Arcgis for Js实现graphiclayer的空间查询(续)
上文中,实现了简单的针对graphiclayer的空间查询工作,在本节,将更加详细的介绍针对graphiclayer的空间查询。首先,空间查询的方式:提供多种类型的空间查询,包括点周边、线周边、面内等多种方式;其次,图形绘制完成后状态的展示;再次,结果的显示。实现后的结果如下:
点周边——输入缓冲区距离
点周边——查询结果
线周边——输入缓冲区距离
线周边——查询结果
面内——矩形
面内——圆形
面内——多边形
首先,绘制图形。
var drawToolbar = new esri.toolbars.Draw(map);
drawToolbar.on("draw-end",showDrawResults);
on(dom.byId("point"), "click", function(){
restoreMap();
drawToolbar.activate(esri.toolbars.Draw.POINT);
});
on(dom.byId("polyline"), "click", function(){
restoreMap();
drawToolbar.activate(esri.toolbars.Draw.POLYLINE);
});
on(dom.byId("extent"), "click", function(){
restoreMap();
drawToolbar.activate(esri.toolbars.Draw.EXTENT);
});
on(dom.byId("circle"), "click", function(){
restoreMap();
drawToolbar.activate(esri.toolbars.Draw.CIRCLE);
});
on(dom.byId("polygon"), "click", function(){
restoreMap();
drawToolbar.activate(esri.toolbars.Draw.POLYGON);
});
/**
* 显示绘制结果
*/
function showDrawResults(evt){
drawToolbar.deactivate();
map.setMapCursor("default");
var geometry = evt.geometry;
if(geometry.type==="point" || geometry.type==="polyline"){
$('#map').modalInfowindow({
width:175,
height:75,
title:"请输入缓冲区距离",
content:"<input type='text' id='distance' />"
});
$("#distance").focus();
$("#distance").keydown(function (e){
// 回车键事件
if(e.which == 13) {
$("#close").click();
}
});
on(dom.byId("close"), "click", function(){
distance = dom.byId("distance").value;
$("#modal").remove();
doBuffer(geometry);
});
}
else{
queryGraphicByPolygon(geometry);
}
};
当为点或者线的时候,得首先进行缓冲区分析,获取缓冲区的geometry,缓冲区分析的代码如下:
/**
* 执行buffer
* @param geometry
*/
function doBuffer(geometry) {
var symbol = null;
switch (geometry.type) {
case "point":
symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,
7,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([0,0,255]),
1
),
new Color([0,0,255])
);
break;
case "polyline":
symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([0,0,255]),
2
);
break;
case "polygon":
symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_NONE,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([0,0,255]),
2
),
new Color([0,0,255,0.25]));
break;
}
var graphic = new Graphic(geometry, symbol);
map.graphics.add(graphic);
//setup the buffer parameters
var params = new BufferParameters();
params.distances = [distance];
params.bufferSpatialReference = map.spatialReference;
params.outSpatialReference = map.spatialReference;
params.unit = GeometryService["UNIT_KILOMETER"];
if (geometry.type === "polygon") {
//if geometry is a polygon then simplify polygon. This will make the user drawn polygon topologically correct.
gsvc.simplify([geometry], function(geometries) {
params.geometries = geometries;
gsvc.buffer(params, function(bfGeometry){
queryGraphicByPolygon(bfGeometry[0]);
});
});
}
else {
params.geometries = [geometry];
gsvc.buffer(params, function(bfGeometry){
queryGraphicByPolygon(bfGeometry[0]);
});
}
}
在执行缓冲区分析的时候,会用到geometryservice。代码如下:
var gsvc = new GeometryService("http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer");
当缓冲区分析完成或者面要素绘制完成以后的geometry都为polygon,此时,执行空间查询:
/**
* 根据多边形进行查询
* @param geometry
*/
function queryGraphicByPolygon(geometry){
var graphics = chartLayer.graphics;
var sfs = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT,
new Color([255,0,0]), 2),
new Color([255,255,0,0.25])
);
var graphic = new Graphic(geometry,sfs);
map.graphics.add(graphic);
for(var i= 0, total=graphics.length;i<total;i++){
if(geometry.contains(graphics[i].geometry)){
selectedGraphics.push(graphics[i]);
graphics[i].symbol = createSymbol(iconPath,"#0ff");
chartLayer.redraw();
}
}
}
空间查询的逻辑很简单,就是通过判断自定义的区域内是否包含各点。
Arcgis for Js实现graphiclayer的空间查询(续)的更多相关文章
- Arcgis for Js实现graphiclayer的空间查询
本节讲的是Arcgis for Js的针对graphiclayer的空间查询,内容很简单,代码如下: <!DOCTYPE html> <html> <head> & ...
- Arcgis for Js之featurelayer实现空间查询和属性查询
空间查询和属性查询是常用的两种对数据的检索与查询方式,在本节,将讲述Arcgis for Js下如何实现featurelayer的这两种查询方式,先贴图给大家看看: 实现界面 属性查询 空间查询 看完 ...
- Arcgis for JS扩展GraphicLayer实现区域对象的聚类统计与展示
功能需求: 分省市统计并展示全国雨量站的数目与位置. 常规做法: 分省市雨量站的数目通过统计表的形式在页面端展示,位置根据XY坐标信息将雨量站标绘在图上. 优化做法: 去掉统计图的展示方式,直接将各省 ...
- Arcgis for Js之Graphiclayer扩展具体解释
在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种不同的聚类都是通过扩展esri/layers/GraphicsLayer方法来实现的.在本节,就具体的讲讲esri/la ...
- Arcgis for Js之Graphiclayer扩展详解
在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种不同的聚类都是通过扩展esri/layers/GraphicsLayer方法来实现的.在本节,就详细的讲讲esri/la ...
- (转)Arcgis for Js之Graphiclayer扩展详解
http://blog.csdn.net/gisshixisheng/article/details/41208185 在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种 ...
- ArcGIS for Android示例解析之空间查询-----QueryTask
转自:http://blog.csdn.net/wozaifeiyang0/article/details/7331450 QueryTask 查询功能在GIS中是一个不可或缺的重要功能,示例中提供了 ...
- 使用ArcGIS API for Silverlight 进行复合多条件空间查询
原文:使用ArcGIS API for Silverlight 进行复合多条件空间查询 这两天帮网上认识的一个兄弟做了一个查询的示例,多多少少总结一下,在此和大家分享. 为什么说是复合多条件呢?因为进 ...
- ArcGIS API for JavaScript 4.2学习笔记[25] 官方第八章Analysis(空间查询)概览与解释
开森,最关注的空间分析章节终于到了,在空间查询那节逻辑性的代码简直要命(呵呵,空间分析的代码也要命...). 上目录截图: [Geodesic buffers(GeometryEngine)] 使用G ...
随机推荐
- poj1696 Space Ant
地址: 题目: Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4295 Accepted: 2697 ...
- nodejs多核处理
前言大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,有人开发了第三方的cluster,让node可以利用多核CPU实现并行. 随着nod ...
- $命令行参数解析模块argparse的用法
argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...
- C#基础--应用程序域(Appdomain)
AppDomain理解 为了保证代码的键壮性CLR希望不同服务功能的代码之间相互隔离,这种隔离可以通过创建多个进程来实现,但操作系统中创建进程是即耗时又耗费资源的一件事,所以在CLR中引入了AppDo ...
- GPU:并行计算利器
http://blog.jobbole.com/87849/ 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...
- 利用基准电压效正Vcc做参考电压的ADC采样计算方法
利用基准电压效正Vcc做参考电压的ADC采样计算方法
- 使用Python实现基于图像识别的iOS自动化测试
相对于Android来说,iOS比较封闭.这一点,在设计和评估自动化测试方案的时候感觉尤其强烈.iOS平台上没有特别好用的自动化测试工具.苹果针对iOS提供了UI Automation的Instrum ...
- MapReduce:输出是一个文本文件,每一行第一个数字式行标,第二个数字是输入文件中每一行除行标外数字的平均值,且整数不保留小数,小数保留两位小数点
有时候你会遇到这样的问题:你有一个表格,给出了每个人在十二月,一月和二月的收入. 表格如下: 姓名 一月 二月 三月 楚乔 200 314 3500 宇文玥 2000 332 ...
- 洛谷P3393逃离僵尸岛 最短路
貌似一直不写题解不太好QAQ 但是找不到题啊... 随便写点水题来补博客吧 题目不pa了,点链接吧... 点我看题 很明显这是道sb题... 思路: 对于每一个僵尸城市预处理其 s 距离内的城市,然 ...
- Caffe实现多标签输入,添加数据层(data layer)
因为之前遇到了sequence learning问题(CRNN),里面涉及到一张图对应多个标签.Caffe源码本身是不支持多类标签数据的输入的. 如果之前习惯调用脚本create_imagenet.s ...