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" ...
随机推荐
- sql rowversion
RowsVersion就是timestamp 丢失更新的解决方法 丢失更新概念:当用户同时修改一行数据,他们先读取数据,放在前端进行修改,当修改后,再提交数据,这样最后提交的数据会覆盖先 ...
- pagination 分页
<!DOCTYPE html> <html> <head> <title>pagination</title> <style type ...
- checkbox选中状态不被改变
让它的状态只能看不能改变,加上onclick="return false;". 也可以disabled="true";但是这个颜色变淡了; <input ...
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- 玩转Windows服务系列——创建Windows服务
创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...
- WPF PlacementTarget技巧
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winf ...
- Linq操作非泛型集合
我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...
- lua中清空目录和递归创建目录
lua中的 lfs.mkdir lfs.rmdir只能针对单个目录,且lfs.rmdir不能清空文件夹 于是我想到了使用os.execute 递归创建目录如下os.execute("mkdi ...
- Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?
构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...
- Objective-C 观察者模式--简单介绍和使用
观察者模式(有时又被称为发布-订阅模式) 在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知. 这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实 ...