[GIS算法] 拓扑关系
在知识传播途中,向涉及到的相关著作权人谨致谢意!
文章目录
- 拓扑关系
- 数据结构
- 拓扑关系的自动建立
- 弧段的预处理
- 直线段相交的判断方法
- 自相交弧段处理
- 弧段相交打断处理
- 结点匹配算法
- 建立拓扑关系
- 计算结点关联弧段的方位角,并按由小到大排序
- 左转算法
- 岛的判断
拓扑关系
「拓扑空间关系」
一种对空间结构进行明确定义的数学方法
拓扑空间关系信息是空间分析、辅助决策等的基础,也是GIS区别于CAD(计算机辅助设计)等的主要标志
对于拓扑关系的自动建立问题,研究的焦点是如何提高算法与过程的效率和自动化程序
数据结构
「拓扑数据结构」
具有拓扑关系的矢量数据结构就是拓扑数据结构
拓扑数据结构是地理信息系统分析和应用功能所必须的,它描述了基本空间目标点、线、面之间的关联、邻接和包含关系
基本数据结构 | 说明 | 数据结构 | 异常 |
---|---|---|---|
拓扑结点 | 结点用来检测弧段与弧段的连接关系和多边形特征是否能正确地完成 | 「悬挂结点」只与一条弧段相连接的起点或终点 | |
拓扑弧段 | 弧段指处于两个结点之间的点序列串,并且具有方向 | 「悬挂弧段」起始结点或终止结点只与一条弧段相关联 | |
拓扑面 | 由一条或若干弧段首尾相连接而成的边线所包含的区域 | ||
三者关系 |
拓扑关系的自动建立
「拓扑关系自动生成算法的一般过程」
没有相交或自相交的弧段:弧段处理,使整幅图形中的所有弧段,除在端点处相交外,没有其他交点
结点匹配,建立结点、弧段关系
建立多边形,以左转算法或右转算法跟踪,生成多边形,建立多边形与弧段的拓扑关系
建立多边形与多边形的拓扑关系。调整弧段的左右多边形标志号。多边形内部标识号的自动生成
「拓扑关系自动生成算法的其他过程」
- 弧段两端角度的计算
- 悬挂结点和悬线的标识
- 多边形面积计算
- 点在多边形内外的判别
弧段的预处理
「弧段预处理」使得弧段不存在自相交和相交现象
直线段相交的判断方法
自相交弧段处理
弧段相交打断处理
「弧段相交打断处理」弧段与弧段相交关系的判断,可以采用两两判断的方法,即要进行n(n-1)/2次判断
- 取出第一条弧段,与其他n-1条弧段进行相交判断
- 求得交点后,将交点分别插入第一条弧段和与其相交弧段的对应位置上,并记录位置
- 将第一条弧段与所有其他弧段的相交关系判断完毕后,通过记录下的交点位置将第一条弧段分割,然后依次取出下一条弧段进行同样的处理,直到所有的弧段处理完毕
「减少工作量」在判断两条弧段的关系时,应尽可能地减少计算量,可采用类似于快速排斥+跨立实验的计算方法减少工作量
「C++实现」参见《地理信息系统算法基础》P109
结点匹配算法
处理完弧段之后,就可以进行结点匹配了。
「结点匹配」把一定容差范围内的弧段结点合并称为一个结点,其坐标值可以是取多个结点的平均值,或者选中一个结点作为所有结点的中心坐标
「结点匹配的思路」每条弧段对应着两个结点,每个结点在合并前对应着一条弧段,在合并结点的过程中,需要将结点对应的弧段也合并在一起
- 将所有的结点加入结点集合
- 从结点集合中取出一个结点作为中心点,从余下的结点中找出容差范围内的其他结点,将这些结点所对应的弧段加入中心结点的弧段集合中,同时将弧段的对应结点变为中心结点,并修改弧段的相应坐标
「C++实现」参见《地理信息系统算法基础》P113
建立拓扑关系
计算结点关联弧段的方位角,并按由小到大排序
「弧段的方位角」每个结点都关联有若干条弧段,结点、弧段的头结点、为弧段的尾结点,设结点为N,则弧段的方位角定义为:结点N与弧段上与其最接近的结点V的连线与X轴的正向夹角
「算法」
左转算法
「左转算法基本思路」从组成多边形边界的某一条弧段开始
- 如果该弧段的方向角最小或介于同一结点的其他弧段方向角之间,则逆时针方向寻找最小夹角偏差所对应的弧段为多边形的后续弧段
- 如果该弧段与x轴正向夹角为最大,则从该弧段的同一结点出发的其他弧段中,方向角最小的弧段是该多边形的后续弧段
「算法描述」参见《地理信息系统算法基础》P115
岛的判断
「岛的判断」指找出多边形互相包含的情况,即寻找复杂多边形。找到岛后才可以完成多边形的拓扑关系的建立
「算法描述」参见《地理信息系统算法基础》P116
[GIS算法] 拓扑关系相关推荐
- GIS算法基础——左转算法拓扑生成
GIS基础算法目录 GIS算法基础--左转算法拓扑生成 GIS算法基础--矢量数据压缩道格拉斯普克压缩算法(非递归实现) GIS算法基础--左转算法拓扑生成 GIS基础算法目录 基于JavaScrip ...
- NLP --- 最大熵模型的解法(GIS算法、IIS算法)
上一节中我们详细的介绍了什么是最大熵模型,也推导出了最大熵模型的目标公式,但是没给出如何求解的问题,本节将详细讲解GIS算法求解最大熵模型的过程,这里先把上一节的推导出的公式拿过来: 上面第一个式子是 ...
- [转] GIS算法源码集合
其他GIS相关代码下载索引 http://www.mygis.com.cn/codeindex10.htm 1.深度优先实现的路径分析源码 http://www.mygis.com.cn/codes/ ...
- GIS 算法 之 拉默-道格拉斯-普克算法(ramer-douglas-peucker)
如今的 GIS 应用离不开互联网,即 "WebGIS",GIS 一个显著的特点就是数据量大,数据异构,因此在网络中传输数据成为了影响 WebGIS 应用性能的瓶颈.在 Web 浏览 ...
- GIS算法基础(四)平面坐标变换(变换矩阵算法实现)
目录 一.平面直角坐标系的建立 二.平面坐标变换矩阵 三.平移变换 四.比例变换 五.对称变换 六.旋转变换 七.错切变换 八.复合变换 (1).复合平移 (2)复合比例变换 (3)复合旋转 (4)相 ...
- GIS算法:7_python拓扑套件shapely
可用于GIS数据处理与空间计算的Python包有GDAL和shapely. 相对来说,GDAL功能更全面,还可以用于数据转换.瓦片地图发布.栅格影像分析等,shapely只能进行基本的数据处理和空间计 ...
- GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现)
矢量结构数据与栅格结构数据的相互转换,是地理信息系统的基本功能之一,已发展形成了许多高效的转换算法. 源码已经放在github上了,需要朋友自取. https://gitee.com/XiaoZhon ...
- GIS算法:3_拓扑空间关系计算模型DE-9IM
DE-9IM全称为Dimensionally Extended nine-Intersection Model,是一种判断对象之间空间关系的拓扑模型,java的拓扑套件jts和python的shape ...
- GIS算法基础实验1高斯克吕格的正反算
主题:用编程实现高斯克吕格的正反算 目录 目的 算法思想 计算模型 程序说明 结果分析 一.目的 通过编程进一步体会和掌握高斯克吕格的正反算算法. 二.算法思想 高斯投影-正算公式就是由大地坐标(L, ...
最新文章
- AWS — AWS VPC 虚拟专用云
- python 点计算角度
- Java中的String、StringBuilder、StringBuffer
- rub、sass和compass的安装
- NOIP 2016 迟来的满贯
- 这个关系国计民生的“黑盒子” 我们造出来了
- 【OpenCV 例程200篇】61. 导向滤波(Guided filter)
- 每日linux命令学习-历史指令查询(history、fc、alias)
- 转lua解析脚本过程中的关键数据结构介绍
- 5.Knockout.Js(自定义绑定)
- 字节跳动教育裁员处理还是挺仗义的!
- 破解软件下载网站100个
- 国防科技大学《编译原理》慕课测试题整理
- 一个简单LEGv8处理器的Verilog实现【三】【工具使用和编程规范】
- ldDWR出现“例外被抛出且未被接住 解决方法
- 19-离线词典生成原理、图像描述子用BoW转化为BoW向量和FeatureVe
- 云运维管家服务器,云平台随身管理-我的“运维管家”
- 2020年上半年我国互联网网络安全监测数据分析报告
- 我走进了微缩的“物联国”
- git+vimdiff 一次关闭所有文件
热门文章
- SQL2008 MSSQLSERVER服务无法启动,报错17051怎么解决
- 以美萍服装管理软件为例的UML建模
- 魔兽世界怀旧服服务器显示离线上不去,魔兽世界怀旧服服务器断开连接怎么办-魔兽世界怀旧服怎么进不去_6137游戏网...
- 基于Android的家教系统
- CnOpenData电商平台交易数据数据
- html 图像旋转180度
- CAD格式刷怎么用?
- Intel NUC冥王峡谷
- cisco AP瘦转胖过程,以及“注意点”。
- WEB页面SEO —— 提升网页加载速度:对外联css,以及js使用了延迟加载以及dns-prefetch,preconnect,prefetch和prerender