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" ...
随机推荐
- C#简单的上位机制作之界面设计
今天开始打算正式在博客园落户了,写点有用的吧, 一个简单的C#上位机,也就是串口调试助手废话不多说,新建windows应用程序 到这人一个工程就算是新建完成了,然后就是组件的添加了,我们需要在里面添加 ...
- java并发之volatile
volatile是轻量级的synchronized,它在多处理器应用开发中保证了共享变量的“可见性”(可见性指当一个线程修改共享变量后,其它线程可以看到这个修改). volatile如果使用合理会比s ...
- select2的相关问题
在弹出框中无法使用select2的问题: 通常情况下,使用select2只需要在加载相关js和css后,添加如下代码即可: $("#selectId").select2(); 但如 ...
- ASP.NET Aries 开源开发框架:开发指南(一)
前言: 上周开源了Aries开发框架后,好多朋友都Download了源码,在运行过程里,有一些共性的问题会问到. 所以本篇打算写一下简单的开发指南,照顾一下不是太看的懂源码的同学,同时也会讲解一下框架 ...
- 验证码类库CaptchaMvc
CaptchaMvc是一个有弹性的.简单的解决方案,它能够解决你项目中所有与验证码相关的问题.你需要做的所有事情就是向你的项目中添加一个类库,添加之后验证码就准备就绪了.该项目拥有使用验证码所需要的所 ...
- Android安全开发之浅谈密钥硬编码
Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...
- jws.mono脚本安装详解
就在最近两天,最新版本的jws.mono上线了,这个版本除了提供与之前版本拥有的功能外,还额外提供了一个“自动化”的安装脚本,通过执行该脚本,jws.mono将自动快速的安装到指定的目录,同时,通过改 ...
- xamarin UWP中MessageDialog与ContentDialog的区别
MessageDialog与ContentDialog的异同点解析: 相同点一:都是uwp应用上的一个弹窗控件.都能做为弹出应用. 相异点一:所在命名空间不同,MessageDialog在Window ...
- Mysql 备份
MySQL数据库备份命令 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile ...
- Android开发学习之路-RecyclerView使用初探
在进行一些MaterialDesign规范开发的时候,比如之前说到的CoordinateLayout实现的向上折叠效果的时候,如果依然使用ListView,那么这种效果是做不出来的,因为ListVie ...