WebGIS中一种根据网格索引判断点面关系的方法

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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/

                                                                           如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                                

 

转载于:https://www.cnblogs.com/naaoveGIS/p/5148185.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] 怎样在react中创建一个事件?

[react] 怎样在react中创建一个事件? var EventEmitter require(events).EventEmitter; class App extends Component{ constructor(props){ super(props); } componentDidMount(){ this.itemChange emitter.addListener(ItemChange, (msg,data)>console.log(…

重写Checkbox 改写选择框的大小

/* 作者:Starts_2000* 日期:2009-07-30* 网站:http://www.csharpwin.com CS 程序员之窗。* 你可以免费使用或修改以下代码,但请保留版权信息。* 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html&…

HDU4349--Xiao Ming's Hope(数论)

输入一个n(1<n<108)&#xff0c;求C(n,0),C(n,1),C(n,2)...C(n,n)有多少个奇数。 Lacus定理 http://blog.csdn.net/acm_cxlove/article/details/7844973 A、B是非负整数&#xff0c;p是质数。AB写成p进制&#xff1a;Aa[n]a[n-1]...a[0]&#xff0c;Bb[n]b[n-1]...b[0]。…

[react] react中可以在render访问refs吗?为什么?

[react] react中可以在render访问refs吗&#xff1f;为什么&#xff1f; <><span id"name" ref{this.spanRef}>{this.state.title}</span><span >{this.spanRef.current ? 有值 : 无值}</span></> 不可以&#xff0c;render …

JS splice()方法

splice() 方法用于插入、删除或替换数组的元素。 语法 arrayObject.splice(index,howmany,element1,.....,elementX) 参数 描述 index 必需。规定从何处添加/删除元素。 该参数是开始插入和&#xff08;或&#xff09;删除的数组元素的下标&#xff0c;必须是数字。 howmany…

为什么每天感觉没精神

有些朋友会总是感觉没有精神&#xff0c;整天困得睁不开眼&#xff0c;干什么都没有劲儿&#xff0c;休息又睡不好&#xff0c;该怎么办呢&#xff1f;早睡早起。虽然都是每天睡8小时&#xff0c;但是早睡早起的人明显比晚睡晚起的人充满了正能量。要相信大自然的力量&#xff…

[react-router] React-Router怎么获取历史对象?

[react-router] React-Router怎么获取历史对象&#xff1f; 1.如果React > 16.8 时可以使用 React Router中提供的Hooksimport { useHistory } from "react-router-dom";let history useHistory(); 2.使用this.props.history获取历史对象let history this.pr…

为Ubuntu Server 安装图形桌面环境

From: http://www.oschina.net/question/12_10835 第一步&#xff1a;安装桌面环境 首先需要确保您已经在/etc/apt/sources.list 文件中启用了Universe和Multiverse软件库&#xff0c;接下来执行如下命令&#xff1a; sudo apt-get update sudo apt-get install ubuntu-desk…

使用STM32的USB模块中后对USB缓冲区的认识

最近在使用STM32的USB模块开发个项目&#xff0c;还以为挺简单&#xff0c;结果搞了快两天才把USB的包缓冲区的访问搞定&#xff0c;在此做个小总结吧。 STM32的USB模块包缓冲区有512B&#xff0c;但是在STM32的参考手册中的存储器映像中却表明0x40006000-0x400063ff&#xff0…

md /mdd /ml /mt/mtd

From: http://www.cnblogs.com/eddyshn/archive/2009/11/23/1608823.html VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) C 运行时库 库文件 Single thread(static link) ML libc.lib Debug single …

[react] 在react中怎样改变组件状态,以及状态改变的过程是什么?

[react] 在react中怎样改变组件状态&#xff0c;以及状态改变的过程是什么&#xff1f; 使用this.setState改变组件的状态改变的过程中&#xff0c;React Fiber Reconciler遍历了整个Fiber Tree&#xff0c;得到了最新的DOM diff结果&#xff0c;并把这个结果应用到真实的DOM上…

web前端实战系列[1]——三列布局

1.代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Cont…

[react] react是什么?它的主要特点是什么?

[react] react是什么&#xff1f;它的主要特点是什么&#xff1f; React是用于构建用户界面的库。 特点&#xff1a; 组件化,增强复用性数据到视图的单向绑定,更安全数据的单项传递流高性能个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff…

Unix整理笔记-vi简介-里程碑M8

1 vi是Unix/Linx工程师必备的 2 ~表示是未使用的行&#xff0c;如果某行不是以~开头&#xff0c;并且仍然是空白的&#xff0c;那么一定存在空格&#xff0c;制表符&#xff0c;换行符等 3 vi区别大小写 4 在vi中搜索文件&#xff0c;命令模式下&#xff1a;/yourword 5 如果进…

android Sqlite小记

1、android.database.sqlite.SQLiteException: near "": syntax error (code 1): 语法错误&#xff0c;如果你的报了这个错误,就好好看下你的sql语句吧 比如,下边这句&#xff1a;&#xff0c;如果你不注意&#xff0c;可能会觉得没错 1 ss "ss:42--56,10--11…

[react] 你用过react版本有哪些?

[react] 你用过react版本有哪些&#xff1f; react17.0.2 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Ext JS 4.1 RC1发布

下载地址&#xff1a;http://cdn.sencha.com/ext-4.1-rc1.zip Bugs Fixed for RC1Button EXTJSIV-5129 - Button does not adhere to width setting in IE9Charts EXTJSIV-4416 - Chart label misaligned on numeric x axisEXTJSIV-5459 - Setting markers to be hidden in ren…

修改linux默认启动级别(包括Ubuntu)

From: http://xinchibaobei.blog.163.com/blog/static/126392509200910101356215/ 说明&#xff1a;本文后半篇引用crazy365的文章&#xff0c;可能是大部分linux版本的设置方式&#xff0c;但在Ubuntu下不适用。 所以搜寻了Ubuntu下的修改方式&#xff0c;稍作整理放在前面…

iSensor APP 之 摄像头调试 OV3640 OV2640 MT9d112

iSensor app 非常适合调试各种摄像头&#xff0c;已测试通过的sensor有&#xff1a; l OV7670、OV7725、OV9650、OV9655、OV9653、OV5642、OV5640 l MT9T001、MT9M001、MT9P031 今天又测试了上述几款新的型号&#xff0c;之前并未用过。 OV3640 OV2640 MT9d112 先看OV2640&am…