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来构造圆的算法相关推荐
- 基于libmad库的MP3解码简析
基于libmad库的MP3解码简析 MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...
- 匿名函数自我调用_Python中的匿名函数及递归思想简析
匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...
- Python中的匿名函数及递归思想简析
匿名函数 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类 ...
- python匿名函数的作用_Python中的匿名函数及递归思想简析
匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...
- WebGIS中利用AGS JS+eCharts实现一些数据展示的探索
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 eCharts提供了迁徙图.热点图.夜视图等跟地图能够很好的 ...
- SAP中SD模块的销售价格确定逻辑简析
在销售业务中,销售订单项目有一些基本要素,数量,价格,运费,税率等. 在SD模块的销售订单或销售计划协议功能中,这些要素往往通过条件记录的形式来处理.如何理解条件记录?通过价格比较好理解.例如有物料M ...
- android中的多渠道打包,Android 多渠道打包简析
前言 为了更好的统计每个来源的下载量,当我们项目打包的时候,需要打出不同渠道的包.如何打多渠道包?新一代构建工具gradle,其中的一大优势就是支持多渠道,多Apk打包. Gradle的基础概念 fl ...
- react-intl中injectIntl/intlProvider方法的源码简析
问题:react-intl用法部分 function Home(props) {return (<DocumentTitle title={`Ant Design - ${props.intl. ...
- mysql计算秒_如何在MySQL中基于秒计算时间?
让我们首先创建一个表-mysql> create table DemoTable ( Logouttime time ); 使用插入命令在表中插入一些记录-mysql> insert in ...
最新文章
- 1小时学会:最简单的iOS直播推流(十)librtmp使用介绍
- Unix网络协议分析
- python 在 eclipse 上的编码配置问题
- 莫名的_locals属性
- 使用java代码发送电子邮件
- CreateService / SC 创建自启动服务
- 牛客网(剑指offer) 第十题 矩形覆盖
- 如何完全屏蔽Chrome的提示:请停用以开发者模式运行的扩展程序
- linux+svn+拉取版本_在linux客户端下管理svn版本库
- css html应用实例1:滑动门技术的简单实现
- Spring Cloud中如何保证各个微服务之间调用的安全性
- 机器学习中对不均衡数据的处理方法
- 第二章 字符串处理与编码不再发愁
- java验证码图片工具类_工具类:VerifyCode.java:图片验证码
- csdn积分c币获取方法
- 上班太无聊,我要考证 之 程序员考证
- 不错的离线IP地址定位库
- 电脑硬盘分区,新电脑只有C盘怎样分区
- 接口常见安全漏洞说明
- 虚幻引擎4中的实时GI技术
热门文章
- java 注册忘记密码操作_Java实战项目(1):swing图书管理系统的登录,注册,找回密码,增删查,个人解析等...
- pytorch 三维点分类_用于RGBD语义分割的三维图神经网络(2017ICCV,已开源)
- php fileputcontents,在php中file_put_contents函数起什么作用呢?
- 2021年人工神经网络第四次作业-第一题:LeNet对于水果与动物进行分类
- 北京科技大学智能视觉参赛队伍 - 对于比赛总结
- 2021年春季学期-信号与系统-第十一次作业参考答案-第五小题
- 基于pyBoard的进一步的一些测试实验,MC3008
- 第十五届全国大学生智能汽车竞赛赛道拼装图
- android消除app卡顿,为什么你的app会出现卡顿?Android开发:关于性能需要考虑的...
- php 按钮状态,RPi GPIO状态更新为php按钮和脚本