首页 文章

球体表面上的(经度,纬度)点的凸壳

提问于
浏览
18

标准凸包算法不适用于(经度,纬度)点,因为标准算法假设您需要一组笛卡尔点的船体 . 纬度 - 经度点不是笛卡尔坐标,因为经度"wraps around"在反子午线(/ - 180度) . 即,经度179以东两度是-179 .

因此,如果您的一组点恰好跨越反子午线,您将计算出错误地在世界各地伸展的虚假船体 .

我可以使用标准凸包算法来解决这个问题的任何建议,或指向正确的“地球”船体算法?

现在我想起来,有更多有趣的案例需要考虑而不是跨越反梅迪安 . 考虑一个包围地球的点“带” - 它的凸包将没有东/西边界 . 或者甚至更进一步,{(0,0),(0,90),(0,-90),(90,0),( - 90,0),(180,0)}的凸包是什么? - 它似乎包含整个地球表面,所以它的周边有哪些点?

4 回答

  • 2

    标准的凸包算法并没有被地球表面上的坐标环绕,而是由一个更基本的问题所打破 . 球体的表面(让我们忘记地球的不太球形)不是欧几里德空间,所以欧几里德几何不起作用,凸壳体例程假设下面的空间是欧几里得(给我一个没有' t,请)不会工作 .

    球体的表面符合elliptic geometry的概念,其中直线是大圆,对映点被认为是相同的点 . 您已经开始体验尝试将欧几里德凸性概念应用于椭圆空间所产生的问题 .

    对您开放的一种方法是采用geodesic convexity的定义并实现测地凸壳体例程 . 看起来很毛茸茸 . 它可能不会产生符合您(通常是欧几里德)期望的结果 . 在许多情况下,对于3个任意点,凸包表现为球体的整个表面 .

    另一种方法是导航员和制图师长期采用的方法,将球体表面的一部分(包含所有点的部分)投射到欧几里德空间(这是 Map 投影的主题,我不打扰你参考其上的大量文献)并找出投影点的凸包 . 将您感兴趣的区域投影到飞机上并调整坐标,使它们不会缠绕;例如,如果您对法国感兴趣,可以通过添加30度来调整所有经度,以便整个国家由ve数量协调 .

    在我写作的时候,在@ Li-aung Yip的回答中提出的使用3D凸包算法的想法让我感到误入歧途 . 该组曲面点的三维凸包将包括位于球体内的点,边和面 . 这些字面上并不存在于球体的2D表面上,只会改变您在2D中与不太正确的概念进行摔跤以及在3D中完全错误的难度 . 此外,我从维基百科的文章中了解到,一个封闭的半球(即包括其“赤道”的半球)在球体表面的几何形状中不是凸的 .

  • 1

    您可以考虑在3D空间中应用3D convex hull algorithm而不是将您的数据视为纬度 - 经度数据吗?然后,您可以通过分析3D凸包来找到所需的2D凸包 .

    这将使您回到笛卡尔凸壳的良好行进算法(尽管是三维),并且没有绕坐标的问题 .

    或者,有这篇论文:Computing the Convex Hull of a Simple Polygon on the Sphere (1996)似乎处理了你正在处理的一些相同的问题(坐标环绕等)

  • 1

    如果你所有的点都在一个半球内(也就是说,如果你能找到一个穿过地球中心的切割平面,将它们全部放在一边),那么你可以从中心那里做一个中心的又名gnomic aka gnomonic投影 . 接地平行于切割平面的平面 . 然后是 all great circles become straight lines in the projection ,因此投影中的凸包将映射回地球上正确的凸包 . 您可以通过查看"Gnomonic Projection"部分here中的纬度线来查看错误的纬度/经度点(注意经度线仍然存在直行) .

    (将地球视为一个球体仍然不是一个很好的第二近似 . 我不认为在一个更真实的地球上的真正的最小距离路径上的点(比如WGS84)通常位于穿过中心的平面上 . 也许假装他们这样做给你一个比用球得到的更好的近似值 . )

  • 7

    FutureNerd:

    你是绝对正确的 . 我必须为我的应用程序解决与Maxy-B完全相同的问题 . 作为第一次迭代,我只是将(lng,lat)视为(x,y)并运行标准的2D算法 . 只要没有人看得太近,这就行得很好,因为我的所有数据都在相邻的美国 . 作为第二次迭代,我使用了你的方法并证明了这个概念 .

    点必须在同一个半球 . 事实证明,选择这个半球是非平凡的(它不仅仅是点的中心,正如我最初猜测的那样 . )为了说明,请考虑以下四点:(0,0),( - 60,0), (60,0)沿赤道,(0,90)北极 . 然而,你选择定义“中心”,它们的中心位于北极的对称性,所有四个点都在北半球 . 但是,考虑用(-19,64)冰岛代替第四点 . 现在他们的中心不在北极,而是不对称地朝向冰岛 . 然而,所有四个点仍然在北半球 . 此外,由北极独特定义的北半球是他们共有的唯一半球 . 所以计算这个“极点”变成了算法,而不是代数 .

    有关Python代码,请参阅我的存储库:https://github.com/VictorDavis/GeoConvexHull

相关问题