WebGIS中基于AGS的画圆查询简析以及通过Polygon来构造圆的算法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。
1.背景
某个项目需求中需要在前端进行画圆查询,将圆范围上的多边形要素在前端进行展示。因为此项目的环境是AGS环境,考虑使用AGS的I查询来完成。

2.I查询的相关参数介绍
I查询中主要涉及到如下几个参数:geometry、geometryType、layerDefs、layers、tolerance、mapExtent、imageDisplay等。
2.1理解相对简单的参数
理解geometry、geometryType、layerDefs、layers这是四个参数相对简单。
Geometry:查询要素的构造。
GeometryType:查询的方式,分为点、线、面、四角范围查询。
LayerDefs:查询过滤条件,可以针对需要查询的Layers来设置属性过滤。
Layers:需要查询的图层。有top、visible、all三种过滤图层方式。
2.2理解相对复杂的参数
在I查询的参数中还有tolerance、mapExtent、imageDisplay这样三个参数,他们之间是相互关联的,理解起来稍微复杂。
官方的文档上有如下描述:

字面上,我们可以将以上三个参数理解为:查询缓冲范围、查询时的地图范围、查询时的图片大小。
这里,我将进一步解释下这三个参数内在的意思。
mapExtent:指的是此时我们做I查询时屏幕范围上的地理坐标范围。
ImageDisplay:包含了三个值:查询时的屏幕地图像素级高度(height:px)、宽度(width:px)、像素DPI。
Tolerance:查询时基于像素级的缓存大小(不是真实的地理长度)。
通过我上面的描述,我们应该可以发现这三个参数的内在关联。即,通过mapExtent和ImageDisplay,地图服务器内部可以算出此时的一个像素所对应的真实地理单位长度。然后再乘以tolerence中的像素级长度,地图服务器内部便能获取到真实的缓冲地理级长度。
2.3总结
了解了以上参数的真实意思后,我们可以对项目需求给出第一个解决方案,即利用I查询的点类型查询来完成。
3.方案一:利用I查询的点类型查询来完成,可行?
3.1测试
我们设想,地图服务器内部的点查询应该是:基于点坐标以及缓冲长度,构建出一个圆来进行查询。而真实情况真的如此吗?以下是一个对点类型查询的测试:

我们发现,在I查询的点类型查询后,对圆范围本没有触及到的723、1564两个要素也被查询出来,这又是为什么?
答案是:点类型查询,并不是如我们之前理解的缓冲出一个圆,而应该是缓冲出了一个Extent。如图,当我们构建了这个Extent后,确实能够将本不被圆涉及到的两个面要素也查询出来。
3.2结论
I查询中基于point的查询其实是构造extent的查询,并不适合与需求中的圆查询。但是I查询能够提供的查询方式又只有:点、线、面、范围查询四种,那到底该如何进行圆查询?这里我们给出另外一个方案:用面来模拟圆进行查询。
4.方案二:用面来模拟圆,进行I查询多边形类型查询,可行?
4.1Polygon模拟圆的算法
我们大致思路是:在圆上按照360度,一度取一个点,然后构造成一个polygon。具体实现如下:

4.2测试和结论
测试过程相对简单,我不再描述,这里直接给出测试结果:正确。
-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
WebGIS中基于AGS的画圆查询简析以及通过Polygon来构造圆的算法的更多相关文章
- WebGIS中基于控制点库进行SHP数据坐标转换的一种查询优化策略
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 目前项目中基于控制点库进行SHP数据的坐标转换,流程大致为:遍 ...
- WebGIS中利用AGS JS+eChart实现一些数据展示的探索
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 eChart提供了迁徙图.热点图.夜视图等跟地图能够很好的结 ...
- WebGIS中利用AGS JS+eCharts实现一些数据展示的探索
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 eCharts提供了迁徙图.热点图.夜视图等跟地图能够很好的 ...
- 连接查询简析 join 、 left join 、 right join
join :取两个表的合集: left join:左表的数据全部保留,然后增加右表与左表条件匹配的记录.如下 select cc.* from cloud_groups as cg left join ...
- (十)WebGIS中地理坐标与屏幕坐标间的转换原理
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 地图本身是拥有坐标的,一般可以大致分为平面坐标和经纬度坐标, ...
- (九)WebGIS中的矢量查询(针对AGS和GeoServer)
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在第七章里我们知道了WebGIS中要素的本质是UICompo ...
- (十九)WebGIS中I查询的原理及设计(包含AGS、GeoServer、Supermap)
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 我们在使用arcmap时,经常会用到被称为I查询的工具.具体 ...
- WebGIS中兴趣点简单查询、基于Lucene分词查询的设计和实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 兴趣点查询是指:输入框中输入地名.人名等查询信息后,地图上可 ...
- django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)
models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True), OneToOneField("Author" ...
随机推荐
- DSY1531*Bank notes
Description Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我 ...
- Des与3Des加密解密
/// <summary> /// Des和3Des算法 /// </summary> public class Des { /// <summary> /// D ...
- Hibernate中使用Criteria查询
忽略一些配置,测试代码如下: Session session= HibernateUtil.getSession(); Transaction tx= session.beginTransaction ...
- Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法
Android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, ...
- 《.NET之美》消息及勘误
<.NET之美>消息及勘误 编辑最终还是采用了<.NET之美>作为书名,尽管我一直觉得这个名字有点文艺了,而更倾向于使用<.NET专题解析>这个名称. 目前已经可以 ...
- shell简单用法笔记(shell中数值运算)二
shell中变量值,如果不手动指定类型,默认都是字符串类型: 例如: a= b= c=$a+#b echo $c 结果会输出:123+456 shell中,如果要进行数值运算,可以通过一下方法: 方法 ...
- SQL Server 数据变更时间戳(timestamp)在复制中的运用
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 方案(Solution) 方案一(Solution One) 方案二(Solution Two ...
- .NET面试题系列[0] - 写在前面
.NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] - .NET框架基础知识(2) .NET面试题系列[3] - C# 基础知识(1) .NET ...
- Python黑帽编程 3.3 MAC洪水攻击
Python灰帽编程 3.3 MAC洪水 传统的交换机(我只对我目前使用的交互机做过测试,按照常识只能这样表述)在数据转发过程中依靠对CAM表的查询来确定正确的转发接口,一旦在查询过程中无法找到相关目 ...
- 多彩的Console打印新玩法
Chrome应该是每一个Web开发者必备的工具之一.它有而强大的Devtool,辅助我们的JavaScript调试,审视DOM元素,CSS即时修改等.以及它还有一个的庞大的插件系统,同时我们也可以很容 ...