本文介绍GIS系统中,点与面之间拓扑关系的判断方法。

关于点面之间的拓扑

通常情况下可以将点与面的关系做如下划分:

点在面内

点在面的边界上

点在面外

本文做了一个简化处理,将1和2两种情况当做一种。所以本文中判断的点面之间的拓扑关系划分如下:

点在面内

点在面外

点面之间的拓扑算法思路

算法如图:

算法实现

在 _malaBase.h 中声明如下的函数:

bool isPointInPolygon(malaPoint point, vector& Poly);//点是否在多边形内部

@ point 点要素

@ Poly 面(区)要素

并在 _malaBase.cpp中实现上述函数,代码如下:

/*

* 判断点是否在区上

*/

bool malaLogic::isPointInPolygon(malaPoint point, vector& Poly)

{

int LineNum = Poly.size();

malaPoint leftP = point;

malaPoint rightP;

rightP.x = getMaxX(Poly) + 1;

rightP.y = point.y;

int count = 0, yPrev = Poly[LineNum - 2].y;

malaPoint v1, v2;

v1 = Poly[LineNum - 1];

for (int i = 0; i < LineNum; i++)

{

v2 = Poly[i];

if (isPointInLine(leftP, v1, v2))

return true;

if (v1.y != v2.y)

{

if (isLineIntersect(v1, v2, leftP, rightP))

{

if (isPointInLine(v1, leftP, rightP))

{

if (v1.yyPrev)count++; }

else { if (v1.y < yPrev) count++; }

}

else if (!isPointInLine(v2, leftP, rightP))

{

count++;

}

}

}

yPrev = v1.y;

v1 = v2;

}

return (count % 2 == 1);

}

其中函数 isLineIntersect 用于判断两条直线是否相交,可以参考文章《VC++开发GIS系统(167)选择线之判断直线是否与折线相交算法》

详细代码可以参考:GitHub

java判断点与线与面的关系_VC++开发GIS系统(280)判断点与面的拓扑关系相关推荐

  1. java计算机毕业设计-移动公司crm客户关系管理系统开发与实现-源程序+mysql+系统+lw文档+远程调试

    java计算机毕业设计-移动公司crm客户关系管理系统开发与实现-源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计-移动公司crm客户关系管理系统开发与实现-源程序+mysql+系 ...

  2. java计算机毕业设计高校学生智慧党建系统设计与开发MyBatis+系统+LW文档+源码+调试部署-++

    java计算机毕业设计高校学生智慧党建系统设计与开发MyBatis+系统+LW文档+源码+调试部署-++ java计算机毕业设计高校学生智慧党建系统设计与开发MyBatis+系统+LW文档+源码+调试 ...

  3. Muli3D 5 判断点与面的关系

    记录一下: 点与面的关系如图: 如果法相量是单位向量的话,那么分母为1 所以,当 平面的法向量是单位向量的话,看一个点与平面的关系的公司就是分子: Ax0 + By0 + Cz0 + D 在Muli3 ...

  4. win7 怎么干净删除php,window_win7系统如何删除注册表里面的垃圾文件?,win7系统如何删除注册表里面的 - phpStudy...

    win7系统如何删除注册表里面的垃圾文件? win7系统如何删除注册表里面的垃圾文件?在win7系统中我们可以通过删除或修改注册表的垃圾文件,来提高系统的运行速度,但是在删除注册表过程中,如果错误修改 ...

  5. 类和对象总结及用法 计算点到点距离 线与线的关系 计算三角形平行四边形面积周长 判断形状

    1.类和对象简介 类和对象的关系:类是对象的抽象,而对象是类的特例,即类的具体表现形式. 类和对象的区别:类是对象的模板,类是抽象的不占用内存,对象是具体的,占用储存空间. 类中主要包括数据和成员函数 ...

  6. 【Java基础】UML类图及各种线代表的关系含义总结

    文章目录 一.UML常见图 1.类图(Class Diagram) 2.对象图(Object Diagram) 3.时序图(Sequence Diagram) 二.UML类图线的概括 1.类(Clas ...

  7. Java对点、线、面生成栅格瓦片jpg,并渲染呈现

    Java对点.线.面生成栅格瓦片jpg,并渲染呈现 1. 效果图 2. 原理 2.1 面瓦片的生成 2.2 线瓦片的生成 2.3 多点瓦片的生成 3. 源码 参考 这篇博客将介绍从前端HTML页面到后 ...

  8. 量化投资学习-7:图解股市的基本面、技术面、市场环境面的关系

    导读: 用图解的方式,展现股市的基本面.技术面.市场环境面的关系. 一.股市的三面:基本面.技术面.市场环境面 基本面:是参与对象的"里子",是内在的质地.内涵.后台等,根据其内在 ...

  9. 判断点与圆的位置关系

    判断点与圆的位置关系 第一步,创建一个类,代表二维空间的一个点.二维空间确定一个点可参考平面直角坐标系中,确定了x坐标和y坐标,即可确定点的位置 package com.tyl.homework;im ...

最新文章

  1. 统计数字,空白符,制表符_为什么您应该在HTML中使用制表符空间而不是多个非空白空间(nbsp)...
  2. fpga中的case语句
  3. Spring Cloud Feign Clients 无需 Controller自动暴露Restful接口
  4. 制作wordpress页面的学习记录
  5. assubclass_Java类class asSubclass()方法及示例
  6. LeetCode 200. 岛屿数量(图的遍历)
  7. 深入浅出 Spring 架构设计
  8. yum mysql 如何启动_CentOS7用yum安装MySQL与启动
  9. Flex Application初始化顺序
  10. hdu1861 游船出租【模拟】
  11. SLAM会议笔记(三)V-LOAM
  12. Solaris 10 X86安装备忘
  13. MogDB官网正式亮相!单机256万tpmC再创佳绩
  14. UnityShader语法英文入门
  15. outlook正在使用outlook数据文件(.ost)旧的副本,请退出outlook,删除此文件,然后重启outlook。
  16. 每日一面 - 从 innodb 的索引结构分析,为什么索引的 key 长度不能太长?
  17. 获取最新中国行政区划
  18. 给刘成龙的回信( 云中逸客)
  19. MacCms10潜藏后门分析
  20. win10怎么开启aptx_Soomal作品 - Windows与OSX 操作系统对aptX支持的验证测试报告 [Soomal]...

热门文章

  1. python调用c优缺点_Python调用C模块以及性能分析
  2. 【Python】如何用Python实现Word文档拆分
  3. 深度强化学习入门介绍
  4. 【Python基础】一文搞定pandas的数据合并
  5. 【论文解读】CIKM20-MiNet:阿里|跨域点击率预估混合兴趣模型
  6. 【NLP】基于深度学习的文本分类应用
  7. 复现经典:《统计学习方法》第 7 章 支持向量机
  8. HTTP/3 来啦,你还在等什么?赶紧了解一下
  9. 几十万人同时在线的直播间聊天,如何设计服务端架构?
  10. 因为世界杯!我们为你承包了整个网易~