提醒说明:本文用了两种方法,建议直接看第二种,因为第二种比第一种靠谱简单;
2015.11.12 在webGis 项目的开发中,当前已经实现使用QueryTask来针对要素进行NAME,空间的查询之后,并使用Symbol将要素显示出来在图上,如下图所示
在项目的实际需要中,我们需要点击上图要素的时候,弹出带有easyui属性表格的easyui Window,Arcgis api for javascript 在要素查询的时候,初始化了一个infoTemplate
当我们点击的时候弹出infoTemplate,如下图:
这个事infoTemplate,并不是我们所需要的easyui window,要实现我们的需求,我们最好使能获取鼠标点击要素的事件,这样子是比较快,但是找了很久都没有找出来,
由于当时项目很赶,就先放一边,自定义一个table去显示我们需要的数据 ,今早空下来,重新想了个办法:
1.写了一个map的点击的监听事件
2.在查询的时候,将查询的结果放到一个变量当中,设置为全局变量
3.获取点击的经纬度,并与保存的结果数据的经纬度比较,找出距离最小的距离以及相应的点的下标
4.弹出easyui window,根据下标获取相应的数据,显示到弹出框内的表格中
相关代码:
map.on("click",function(evt) {
var clickPoint=evt.mapPoint;
var mapClick_X=clickPoint.x;
var mapClick_Y=clickPoint.y;
$('#detailWin').window('close');
if(layerResults){
//先得到哪一个的点距离鼠标点击的位置最近,返回点的索引值
var index=findMinDistance(mapClick_X,mapClick_Y);
//index=-1表示鼠标点击的位置距离点的距离长度太远
if(index== -1){
return;
}
$('#detailWin').window({
left:evt.pageX+10,
top:evt.pageY+10,
title:layerResults.features[index].attributes.NAME
});
$('#detailWin').window('open');
}else{
return;
}
//将目标点的数据显示在属性表格中
$('#testTable').propertygrid({
columns:[[
{ title: "名称", field: "name",width:70 },
{ title: "值", field: "value",width:180 }
]],
data:[
{"name":"名称:","value":layerResults.features[index].attributes.NAME,"editor":"text"},
{"name":"类别:","value":layerResults.features[index].attributes.LB,"editor":"text"},
{"name":"经度:","value":layerResults.features[index].attributes.JD,"editor":"text"}
],
showGroup:false
});
})
效果图:
写于2015-12-11,经过公司的大神提醒,上面的方法不好,以下是比较好用而且简单的方法:
假设要素服务的URL地址是127.0.0.1:1234/REST/services/0
var featureLayer=new esri.layers.Feature(URL);
featureLayer.on("click",function(evt)){
}
这边的evt.graphic.attributes就包含有该要素的属性信息,如果要弹出easyui的window,就可以在上面的方法的回调函数中执行