目录:

      一、效果

      二、操作

  通过ajax来调用服务器map数据,来实现搜索功能。

   

一、先看效果

  1.我要搜索下中国移动的地理信息:

  2.会搜出17条消息,然后把他们分页显示,一页6条;

  3.每一页的6条数据,会在map生成一个6条marker;

  4.点击marker的时候会弹出一个popup出来;

二、实际操作:
1.首先把所有数据查出来;

其中在这个图层上面有1000条数据:


 $("#btn").click(function() {
    var gridObj,markers,marker_arr=[],popup_arr=[];
$.ajax({
type: "get",
url: "http://192.168.1.156:6080/arcgis/rest/services/epyzt/EP_DMDZ/MapServer/0/query",
data: {
outFeilds: "*",
f: "json",
where: "NAME='中国移动'", //TextString='河排林场'
returnGeometry: true,
geometry: "",
geometryType: "esriGeometryPolygon",
spatialRel: "esriSpatialRelIntersects"
},
dataType: "json",
success: initPagination,
error: function() {
alert("报错")
}
}) }

2.再把获取到的数据绘制成表格://详见下下面得PS部分

 function initPagination(xhr) {
//这里的表格有个v_index,对应的是json数据的key;而xhr是个复杂的json,在key对应的还是一个对象,所以得重新构造一个数组,数组里面是一个个对象,所以obj都写在function里面,不然每条表格的数据都一样的了。
var arr = [];
$.each(xhr.features, function(i, n) {
var obj = {};
obj.px=i+1;
obj.img=i+1+".png",
obj.sf = n.attributes.PROVINCE;
obj.geometry_x = n.geometry.x;
obj.geometry_y = n.geometry.y;
arr.push(obj)
});
gridObj = $.fn.bsgrid.init('searchTable', {
localData: arr,
pageSize: 6,//6行
additionalAfterRenderGrid:table_complete//绘制完表格之后调用
}); }
//渲染表格
function operate(record, rowIndex, colIndex, options) {
return '<a href="#" onclick="alert(\'ID=' + gridObj.getRecordIndexValue(record, 'ID') + '\');">Operate</a>';

3.再绘制出当前页的marker

 function table_complete (){
  //先删除所有的marker,再加上当年页的marker;
for(var i in marker_arr){
markers.removeMarker(marker_arr[i])
}
for (var i=0;i<gridObj.getPageSize();i++) {
var x=gridObj.getCellRecordValue(i,2);
var y=gridObj.getCellRecordValue(i,3);
var img=gridObj.getCellRecordValue(i,0);
addmarker(x,y,img);
} }
function addmarker(x, y,img) {
markers = new OpenLayers.Layer.Markers("marker Layer", {
displayInLayerSwitcher: false
}); //加载图片标注图层
markers.removeMarker();
map.addLayer(markers);
lonlat = new OpenLayers.LonLat(x,y).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
var size = new OpenLayers.Size(30, 25);
var icon = new OpenLayers.Icon(
'img/'+img+'.png',
size, null);
marker = new OpenLayers.Marker(lonlat, icon); marker_arr.push(marker);
markers.addMarker(marker); }

4.在给每个marker注册一个click事件

 marker.events.register("click",marker,function(param){
for(var i in popup_arr){
map.removePopup(popup_arr[i])
}
infoWindow(this.lonlat);
});
//给每个marker加上popup
function infoWindow (n){ var popup=new OpenLayers.Popup(
"popup",
n,
new OpenLayers.Size(100,50),
"<div>1232324</div>",
true
)
popup_arr.push(popup)
map.addPopup(popup);
}

值得注意的几个是:

  1.其中有不少技巧,最好用的是一个构造JSON对象,有用过jqgrid或者bsgrid插件的应该都会感觉很爽

  2.没有得到具体的marker或者popup的时候,可以先创个数据,一个个把它们push进去,再删除的时候一个个遍历,就可以全解决,不用一个个去找。

ps:正常的能够被grid用到的json应该是这种:

 var localData = [
{
"ID": 202,
"CHAR": "1",
"TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_1",
"NUM": 11.2,
"XH": 1
},
{
"ID": 201,
"CHAR": "111",
"TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_2",
"XH": 2
},
{
"ID": 200,
"CHAR": "200",
"TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_3",
"XH": 3
},
{
"ID": 199,
"CHAR": "199",
"XH": 4
},
{
"ID": 32,
"CHAR": "34",
"NUM": 12.1,
"XH": 5
}];

但是从后台拿到的数据是这样的,这特么怎么可能可以用,所以得重新构造一组;

ok,年前最后一遍就写到这里了。

欢迎来我得小窝:传奇上帝www.leggod.com

ajax数据交互(arcgis server)的更多相关文章

  1. 弹出层和ajax数据交互

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  2. Struts2与Ajax数据交互

    写在前面: ajax请求在项目中常常使用,今天就平时掌握的总结一下,关于使用ajax请求到Struts2中的action时,前台页面与后台action之间的数据传递交互问题. 这里我主要记录下自己所掌 ...

  3. ajax数据交互

    目录 一.ORM查询优化 1-1. only与defer 1-2. select_related与prefatch_related 二.MTV与MVC模型 三.choices参数 四.AJAX 4-1 ...

  4. django建立管理系统之五----单页ajax数据交互

    ajax数据提交: 需求: 1. 点击ajax方式提交后数据提交到后台数据库,并且在前台实现数据更新 a.可以用刷新页面来实现数据页面的更新 对应的html,实现局部刷新(可以用刷新页面实现,例如 $ ...

  5. 通过ArcGIS Desktop数据发布ArcGIS Server

    1.双击GIS Servers--->Add ArcGIS Server 2.选择Publish GIS Services 3.输入Server URL:http://localhost:608 ...

  6. jq ajax数据交互

    get 与 post 的区别 了解和使用 get和post是HTTP与服务器交互的方式, 说到方式,其实总共有四种:put,delete,post,get. 他们的作用分别是对服务器资源的增,删,改, ...

  7. jSon和Ajax登录功能,ajax数据交互案例

    ajax实例,检测用户与注册 检测用户名是否被占用: 在用户填写完用户名之后,ajax会异步向服务器发送请求,判断用户名是否存在 首先写好静态页面: index.html <!DOCTYPE h ...

  8. EChats+Ajax之柱状图的数据交互

    原文链接:https://blog.csdn.net/qq_37936542/article/details/79723710 一:下载 echarts.min.js 选择完整版进行下载,精简版和常用 ...

  9. 使用ArcGIS Server发布我们的数据

    原文:使用ArcGIS Server发布我们的数据 引言 上一篇我们已经安装好了ArcGIS体系的服务软件,这一篇将介绍如何把我们自己的数据通过ArcGIS Server发布出去,并且能够通过Web页 ...

随机推荐

  1. mysql 索引对于select速度提升作用实验

    说明:News2在News的基础上把is_active加上索引. mysql> select count(*) from News2 where is_active=1; +---------- ...

  2. Persistent Bookcase

    Persistent Bookcase time limit per test 2 seconds memory limit per test 512 megabytes input standard ...

  3. CodeForces 609D Gadgets for dollars and pounds

    二分天数+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...

  4. FTP详解

    概述 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Applicat ...

  5. 转发:iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

    -- iOS事件全面解析 转载来自崔江涛(KenshinCui) 链接:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一 ...

  6. Windwos下 php mysql apache 环境配置

    一.下载所需软件: 1.安装Windows组件: 安装Apache的前  必须安装  VC11 vcredist_x86.exe (64位请下载vcredist_x64.exe),选择时尽量选择英文版 ...

  7. $(function(){})的执行过程分析

    作者:zccst 首先,$(function(){})是$(document).ready(function(){})的简写形式. 在日常使用中,我们会把代码写到$(function(){})中,今天 ...

  8. octave之奇巧淫技向量化计算实现寻找样本点所属聚类下标

    前面有文章提到过,K-means算法,第一步骤是找出样本点的的所属聚类.下面用两种方式实现,一种是普通的循环,一种是完全向量化计算. 假设 : X 是m×n样本矩阵,其每一行是一个样本,m表示样本数目 ...

  9. 【python】matplotlib在windows下安装

    昨晚装了好久的这玩意,终于在凌晨成功搞定,然后跑起了一个人人网抓取好友关系的脚本~开心. 以下是我参考的最给力的文档,全部安装一遍,就可以啦~ 但是!在安装前一定要先确认自己的python版本!本人自 ...

  10. IOS开发-ObjC-NSArray

    OC中数组分不可变数组(NSArray)和可变数组(NSMutableArray). 不可变数组: //------------------------------不可变数组------------- ...