目录:

      一、效果

      二、操作

  通过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. Redis缓存服务搭建及实现数据读写--转载

    来自 http://www.cnblogs.com/lc-chenlong/p/3218157.html 1.  下载安装Redis 下载地址:https://github.com/MSOpenTec ...

  2. js中焦点的含义是什么

    焦点即是光标   焦点是在页面上屏幕中闪动的的小竖线,鼠标点击可获得光标,Tab键可按照设置的Tabindex切换焦点

  3. 结合Pnotify插件--app-jquery-notify.js

    $.NOTIFY = { showSuccess : function (title, text, context) { var opt = { title : title, text : text, ...

  4. Unity NGUI UIPanel下对粒子的剪裁

    使用 unity 做游戏开发时,有时需要在scroll view下使用粒子,但粒子是不会被 UIPanel 所裁剪的,本人提供了脚本 ParticleSystemClipper,用来处理这种情况.思路 ...

  5. RPC(Remote Procedure Call Protocol)——远程过程调用协议

    RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...

  6. 五、pig学习

    一.什么是pig 1.pig和sql.map-reduce的关系 来自为知笔记(Wiz)

  7. mysql 千万量级的表的优化

    参考: 一  大的优化方向: 数据结构优化,慢查询优化,索引优化,mysql参数设置优化 数据结构优化:先读写分离.再垂直拆分.再水平拆分! 说3点 1. 设计合适的索引,基于主键的查找,上亿数据也是 ...

  8. mongodb 3.x connect with credential

    package mongoDb; import java.net.UnknownHostException; import java.util.ArrayList; import java.util. ...

  9. box2d中的物理世界

    box2d中的物理世界,即b2World类就是一个包含了各种物体(body,物理体,或者叫刚体),固定附着物(fixture,形状与物理体的绑定物)以及各种约束体(比如关节),并使其在当中完成各种交互 ...

  10. leetcode--003 LRU cache

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHAAAACmCAIAAAA9PO+sAAAgAElEQVR4nO3du3HbytvH8X8zqoB12A ...