地球地球上的多边形点

时间:2016-07-04 14:22:30

标签: algorithm math geospatial point-in-polygon

我有一个定义多边形的坐标列表(纬度,经度)。它的边缘是通过将两个点与弧相连接而创建的,弧是这些点之间的最短路径。

我的问题是确定是否有另一个点(让我们称之为 U )放入或放出多边形。我已经在网上搜索了几个小时,寻找一个完整且没有任何缺陷的算法。这就是我希望我的算法支持和接受什么(就可能的弱点而言):

  1. 地球可以被视为一个完美的球体(从我读过它可以得到0.3%的精度损失,我很好)。
  2. 必须正确处理跨越国际日期变更线的多边形。
  3. 必须正确处理跨越北极和南极的多边形。
  4. 我决定实施以下方法(作为适用于2D场景的光线投射算法的修改)。

    1. 我想选择多边形之外的 S (纬度,经度)点。
    2. 对于定义单个边的每对顶点,我想计算大圆(让我们称之为 G )。
    3. 我想计算一对分 S U 的大圆圈。
    4. 对于第2点中定义的每个大圆,我想计算这个大圆是否与 G 相交。如果是这样,我将检查交叉点是否位于多边形的边缘。
    5. 我将计算有多少个交叉点,并根据它(偶数/奇数)我决定点 U 是否在多边形的内部/外部。
    6. 我知道如何从第2点到第5点实施计算,但我不知道如何选择起点 S 。它在2D平面上并不那么明显,因为我不能只选择最左边一点的点。

      关于如何选择这一点的任何想法( S )以及我的方法是否合理且最佳?

      感谢您的任何意见!

2 个答案:

答案 0 :(得分:0)

如果多边形是局部的,则只需在点 B 上取与地球球体相切的平面,然后计算多边形顶点在该平面上的投影,这样问题就变成了缩小为二维。

当您用投影中的直线近似球形弧时,此方法会引入一个小的误差。如果多边形较小,则可能微不足道,否则,可以在进行投影时沿圆弧添加中间点。

您还应该考虑 B 对映体上的多边形,但是考虑到多边形的方向或检查 B 与一些多边形顶点。

最后,如果必须为此查询太多点,则可能希望选择一些固定的投影平面(例如,形成包裹球体的八面体的那些投影平面),然后预先计算多边形的投影。您甚至可以为每个树创建一些2d索引结构作为四叉树,以加快查找速度。

答案 1 :(得分:0)

最大的问题是定义“在多边形内部”的含义。

在球体上,每个多边形(只要直线不相交)都定义了球体的两个区域。两个区域都有资格被称为多边形的内部。

考虑在南极周围的一个简单的1米长的黄色方形正方形。

您可以将黄色区域视为正方形的内部,也可以将正方形包围在每条线以北(地球其余部分)以北的所有区域。

因此,从技术上讲,球面上的任何点都“有效地”位于多边形内部。

唯一的消除歧义的方法是选择所需多边形的哪一侧。例如,将内部始终定义为每个边缘右侧的区域。