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页 ...
随机推荐
- ecos的mvcl
m 数据模型抽象层 v 视图 c 控制器 l 业务逻辑 mvc与mvcl区别 mvc中的m是mvcl中m+l
- jQuery常用的查找Dom元素方法
废话不多说,先来个总结,然后下面是demo 一. 同级节点之间的检索(检索深度N=0) next()是在兄弟节点中,往后匹配; prev()是在兄弟节点中,往前匹配. 二. 父级/子级节点的检索(检索 ...
- Myeclipse创建新项目
1. 打开myeclipse, 配置mysql server preference里找到 show view-- DB Browser, 新建数据库驱动. 1. URL填写: jdbc:mysql:/ ...
- vector与ArrayList、hashmap与hashtable区别
一.vector与ArrayList区别 首先要说明的是vector和arraylist都是list的实现类,都是代表链表的数据结构. java.util.Vector; 类中 pa ...
- python redis list操作
LPUSH list_name value [value ...] Prepend one or multiple values to a list 从左侧插入值,最早插入的值在最右边 LPUSHX ...
- losbyday Linux下的强大工具之一akw(转),Shell必备
简单使用:awk :对于文件中一行行的独处来执行操作 .awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍:AWK命令介绍 a ...
- RDA5820收音机芯片驱动
RDA5820 是北京锐迪科推出的一款集成度非常高的立体声 FM收发芯片.该芯片具有以下 特点: FM 发射和接收一体 支持 65Mhz~115Mhz的全球 FM接收频段,收发天线共用. ...
- iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏
一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAc ...
- Python3基础 set() 集合 创建集合与特点:自动将重复合并掉 不支持索引
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- Python3基础 内嵌函数 简单示例
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...