我没有使用GIS数据的实际经验,因此当我认为这是一个简单的问题却变得更加微妙时,我会毫无准备地危险!

我希望能够将GPS位置分类为由GPS坐标定义的多边形的内部/外部。事实证明,这是众所周知的(但对我而言不是)point-in-polygon problem。我已经阅读了许多关于https://gis.stackexchange.com/的问题/答案(例如this)。

Shapely似乎是一个很好的解决方案,但是假设坐标位于同一笛卡尔平面上,即不是GPS吗?因此,我首先需要将GPS点转换为UTM点。

但是,如果要比较的点(即点和多边形)总是自然地位于同一UTM区域内,我是否需要引入这一额外步骤。它们应该始终位于同一个城镇/城市内,所以我可以将它们保留为GPS并使用Shapely中的经/纬度坐标吗?

我还遇到了this UTM-WGS84 converter,因此可以使用此包转换我的经/纬对,然后在Shapely中使用这些UTM对,但我想尽可能避免任何其他依赖项。

最佳答案

多边形点已经采用2D限制,GPS坐标为3D。立即给您带来麻烦。

一个简单的解决方法是放弃GPS高度,将其降低为2D表面坐标。您的下一个问题是2D曲面现在是球体。在球形表面上,多边形将表面分为两部分,但是没有明显的“内部”。从多边形中的点的顺序开始,有一个左侧和一个右侧,但没有哪一侧是明显的“内侧”。将赤道视为平凡的多边形-哪个半球位于“赤道”内部?

接下来是多边形边缘的问题。根据定义,这些是笔直的线段。但是球形表面上的线很奇怪-它们通常被称为大圆。任何两个大圆圈都恰好相交了两个点。这不是笛卡尔线的行为。更糟糕的是,当用GPS坐标表示时,大圆的方程式不是线性的,因为它们是经度/纬度对。

我可以想象,此时您会感到有些困惑。您可能想换个角度来看-我们在地图上也遇到类似的问题。根据定义,Globe地图试图将非平坦表面平坦化。由于这不可能完全实现,因此您将得到map projections。您也可以将多边形的角点投影到此类投影上。由于投影是平坦的,因此可以在投影上绘制边缘。现在,您可以从视觉上看到问题:在两个不同的投影上,相同的多边形将包含世界的不同部分!

因此,由于我们同意在现实世界中,多边形的边缘是大圆,因此我们应该真正考虑使大圆保持笔直的投影。恰好有一个投影家族具有此属性,即Gnomonic projection。这是一个投影系列,因为您可以选择任何点作为中心。

碰巧的是,我们这里有一个自然点要考虑:我们正在考虑的GPS点。如果将其放在中心,则在其周围绘制一个gnomonic投影,投影多边形的边缘,然后绘制该多边形,您将获得一个精确的解决方案。

除了实际的地球不是球形。抱歉。无论如何,您需要测试的精确度如何?

10-06 10:41
查看更多