ajax数据交互(arcgis server)
目录: 一、效果 二、操作
通过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)的更多相关文章
- 弹出层和ajax数据交互
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...
- Struts2与Ajax数据交互
写在前面: ajax请求在项目中常常使用,今天就平时掌握的总结一下,关于使用ajax请求到Struts2中的action时,前台页面与后台action之间的数据传递交互问题. 这里我主要记录下自己所掌 ...
- ajax数据交互
目录 一.ORM查询优化 1-1. only与defer 1-2. select_related与prefatch_related 二.MTV与MVC模型 三.choices参数 四.AJAX 4-1 ...
- django建立管理系统之五----单页ajax数据交互
ajax数据提交: 需求: 1. 点击ajax方式提交后数据提交到后台数据库,并且在前台实现数据更新 a.可以用刷新页面来实现数据页面的更新 对应的html,实现局部刷新(可以用刷新页面实现,例如 $ ...
- 通过ArcGIS Desktop数据发布ArcGIS Server
1.双击GIS Servers--->Add ArcGIS Server 2.选择Publish GIS Services 3.输入Server URL:http://localhost:608 ...
- jq ajax数据交互
get 与 post 的区别 了解和使用 get和post是HTTP与服务器交互的方式, 说到方式,其实总共有四种:put,delete,post,get. 他们的作用分别是对服务器资源的增,删,改, ...
- jSon和Ajax登录功能,ajax数据交互案例
ajax实例,检测用户与注册 检测用户名是否被占用: 在用户填写完用户名之后,ajax会异步向服务器发送请求,判断用户名是否存在 首先写好静态页面: index.html <!DOCTYPE h ...
- EChats+Ajax之柱状图的数据交互
原文链接:https://blog.csdn.net/qq_37936542/article/details/79723710 一:下载 echarts.min.js 选择完整版进行下载,精简版和常用 ...
- 使用ArcGIS Server发布我们的数据
原文:使用ArcGIS Server发布我们的数据 引言 上一篇我们已经安装好了ArcGIS体系的服务软件,这一篇将介绍如何把我们自己的数据通过ArcGIS Server发布出去,并且能够通过Web页 ...
随机推荐
- ural1890 Money out of Thin Air
Money out of Thin Air Time limit: 1.0 secondMemory limit: 64 MB Each employee of the company Oceanic ...
- 高效判断奇偶性,利用位运算符&
这种位运算判断奇偶性,在程序和数据库里面都是可以用的 public static bool isOdd(i) { return (i&1)!=0 } 最小奇数是:1 最小偶数是:0 所 ...
- CentOS 6.X x64 编译安装 Countly
CentOS 6.X x64 编译安装Countly 安装所需的软件 yum -y install supervisor ImageMagick sendmail 1. 安装 node.js wge ...
- UVa11555 - Aspen Avenue
今晚CF GYM A题,神坑.. 原题: Aspen Avenue ``Phew, that was the last one!'' exclaimed the garden helper Tim a ...
- 详解Objective-C的meta-class 分类: ios相关 ios技术 2015-03-07 15:41 51人阅读 评论(0) 收藏
比较简单的一篇英文,重点是讲解meta-class.翻译下,加深理解. 原文标题:What is a meta-class in Objective-C? 原文地址:http://www.cocoaw ...
- 设置ubuntu下使用ls命令显示文件颜色显示
文件颜色属性: # Attribute codes: 字符属性# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed#00无 ...
- cordova环境搭建
首先,需要了解一下cordova 和 phonegap 的关系.phoneGap是原先的名字,Cordova是phoneGap被捐给apache之后 用的项目名,phoneGap的名字也被保留了. 1 ...
- 代码中动态改变布局属性RelativeLayout.LayoutParams.addRule()
我们知道,在 RelativeLayout 布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可. 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的 ...
- redis 配置(1)
redis配置密码 1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 #requirepass foobared 去掉行前的注释,并修 ...
- 如何开发一个微信小程序
一.概述 特点:对商家来说,小程序的开发成本低(有丰富的组件.api等).运营成本低(有数据日志等).稳定.互动流畅,便于分享.传播(基本微信平台的大量用户).对用户来说,扫码即可获取服务,随 ...