WebGIS中一种根据网格索引判断点面关系的方法
2016-01-21 14:34
447 查看
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。
a差乘判别法(只针对凸多边形)
b.面积判别法(只针对凸多边形)
c.角度和判别法等(任意多边形均可)
但是以上直接判断点面关系的算法,其时间复杂度是相对很高的。假设一个面有N个点,那么判断1个点与该面的关系所需要花费的时间为:N*N。
这里,我要跟大家讨论的是一种以数学公式为内核,通过建立高效的空间索引来快速提高点面关系判断的算法。
如图,有AB两个多边形,需要判断P点是落在哪个多边形?
b.当点所在网格只包含于一个多边形时,此时连点面具体关系判断都能避免,进一步提高了效率。
c.多边形信息索引文件中可以包含该多边形的属性信息,在点面关系判断成功后,还能提取到该多边形的属性信息,避免了对地理服务器的依赖。
——欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
1.背景
判断点面关系的算法有很多,在我之前的博文中有一篇专门对其进行了描述:判断点是否落在面中的Oracle存储过程描述。其中提到了三种常见判断点面关系的算法:a差乘判别法(只针对凸多边形)
b.面积判别法(只针对凸多边形)
c.角度和判别法等(任意多边形均可)
但是以上直接判断点面关系的算法,其时间复杂度是相对很高的。假设一个面有N个点,那么判断1个点与该面的关系所需要花费的时间为:N*N。
这里,我要跟大家讨论的是一种以数学公式为内核,通过建立高效的空间索引来快速提高点面关系判断的算法。
2.算法模型
2.1命题
如图,有AB两个多边形,需要判断P点是落在哪个多边形?
2.2思路
建立覆盖了A、B多边形的格网,每个格网中包含了其属于哪些多边形的具体信息。判断点与面的关系时,首先获得这个点落在哪个格网,然后获取该格网隶属于哪几个多变形。比如以上的P点,我们获取到P点所在的格网隶属于两个多边形A和B。最后调用点面关系算法,判断点P和面A、B之间的关系。2.3建模流程图
3.索引生成具体方法
生成的索引分为多边形信息索引和网格索引两个,下面分别描述。3.1生成多边形信息索引
多边形信息索引中包含了三部分信息:属性信息、几何信息、信息大小。具体实现流程如下:3.2生成网格索引
网格索引中包含这样两类信息:网格编号、网格隶属于的多边形具体信息(多边形编号、多边形标识)。具体实现流程如下:4.利用索引判断点面关系具体方法
这里直接给出实现流程图:5.优点
a.该算法避免了判断点属于哪个多边形时,要将所有多边形都遍历一遍,提高了效率。b.当点所在网格只包含于一个多边形时,此时连点面具体关系判断都能避免,进一步提高了效率。
c.多边形信息索引文件中可以包含该多边形的属性信息,在点面关系判断成功后,还能提取到该多边形的属性信息,避免了对地理服务器的依赖。
——欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
相关文章推荐
- 性能测试新手误区(一):找不到测试点,不知为何而测
- Hbase存储架构(整理)
- Win10 Windbg symbol path设置
- 0100 Java就业班课程表
- Android Studio如何发布APK
- 信号同步机制
- Objective-C多线程详解(NSThread、NSOperation、GCD)
- PCL点云库配置整理
- Linux下,命令 wget 的使用
- 改善Chrome在Windows下的中文字体效果
- Unity3D判断鼠标向右或向左滑动,响应不同的事件
- Git merge 策略
- 数据结构_8:查找:二叉排序树
- SharePoint 2013 Designer 自己定义操作菜单
- Jquery 时间格式化
- git之切换分支出现的问题
- HBase框架简介(整理)
- Centos 6.5 优化 一些基础优化和安全设置
- android资源文件 color.xml
- 特殊钢立式连铸—美国钢铁核心竞争力并未衰落