VC++开发GIS系统(284)判断面元素之间的拓扑关系
2016-12-28 17:31
405 查看
本文介绍GIS系统中面元素之间拓扑关系的判断方法。
通常情况下可以将面元素之间拓扑关系做如下划分:
两个面完全重合
两个面相交
两个面相离
一个面内含另外一个面
其中为了简化,可以将1与4看作同一种情况。
将一个面拆分成一条折线,并判断其是否与另一面相交,有一条相交则两个面相交。
如果一个面所有的点在另外一个面内,则包含
非上述情况则相离
在 _malaBase.h 中声明如下的函数:
@
@
并在 _malaBase.cpp中实现上述函数,代码如下:
其中函数
详细代码可以参考:GitHub
VC++开发GIS系统(283)判断折线与面的拓扑关系VC++开发GIS系统(285)判断拓扑关系类的设计及实现
关于面元素之间的拓扑
通常情况下可以将面元素之间拓扑关系做如下划分:两个面完全重合
两个面相交
两个面相离
一个面内含另外一个面
其中为了简化,可以将1与4看作同一种情况。
面元素之间的拓扑算法思路
将一个面拆分成一条折线,并判断其是否与另一面相交,有一条相交则两个面相交。如果一个面所有的点在另外一个面内,则包含
非上述情况则相离
算法实现
在 _malaBase.h 中声明如下的函数:int polygonAndPolygon(vector<malaPoint>&Polygon1, vector<malaPoint>&Polygon2);//面与面的拓扑关系 相交返回2,内含返回3,相离返回4
@
Polygon1面要素1
@
Polygon2面要素2
并在 _malaBase.cpp中实现上述函数,代码如下:
/* * 面与面的拓扑关系 相等返回1,相交返回2,内含返回3,相离返回4,覆盖返回5 */ int malaLogic::polygonAndPolygon(vector<malaPoint>&Polygon1, vector<malaPoint>&Polygon2) { if (polyLineAndPolygon(Polygon1, Polygon2) == 2) return 2; int length = Polygon1.size(); int index = 0; int i; for (i = 0; i < length; i++) { if (isPointInPolygon(Polygon1[i], Polygon2)) index++; } if (index == length) return 3; int length2 = Polygon2.size(); index = 0; for (i = 0; i < length2; i++) { if (isPointInPolygon(Polygon2[i], Polygon1)) index++; } if (index == length2) return 5; return 4; }
其中函数
polyLineAndPolygon用于判断折线与面的拓扑关系,可以参考文章《VC++开发GIS系统(283)判断折线与面的拓扑关系》
isPointInPolygon用于判断点与面的拓扑关系,可以参考文章《VC++开发GIS系统(280)判断点与面的拓扑关系》
详细代码可以参考:GitHub
VC++开发GIS系统(283)判断折线与面的拓扑关系VC++开发GIS系统(285)判断拓扑关系类的设计及实现
相关文章推荐
- ArcEngine开发判断3D模型之间的关系
- 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
- ArcEngine开发判断3D模型之间的关系
- VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统
- 判断元素之间的包含关系contains和compareDocumentPosition详解
- 本文是笔者根据数据库编程经验,利用C++语言的模板、继承、授权、多态等面向对象特性,借鉴命令模式,实现了对象在关系数据中的存储,降低应用系统与数据库之间的耦合,提高开发效率。
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- 编译器开发: 利用图的拓扑排序算法,计算源代码文件之间的依赖关系
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- ADO的一次开发实践(vc通过ADO连接access数据库做的一个多功能查询系统)
- 杭州中导科技诚聘GIS系统开发工程师
- 诚聘执行副总裁、vc开发工程师、系统架构师、php开发工程师 -- quoted
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- MFC、Windows API、VC++ 之间的关系
- 组件式GIS开发实例之MO+VC
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- 应用MapXtreme2004开发GIS代码(C#) 搜索TAB表中的元素
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量(转)