我已经模拟了这个算法http://forcefront.github.io/point-in-polygon/point-in-polygon.html。
但我认为纬度和经度是球坐标。
该算法是否适合判断地图上多边形中的点?
我已经模拟了这个算法http://forcefront.github.io/point-in-polygon/point-in-polygon.html。
但我认为纬度和经度是球坐标。
该算法是否适合判断地图上多边形中的点?
一个通用的多边形点实现不能解释你可以从 179.999 度到 -180 度这样的值,而且我们还没有得到关于手头问题的足够信息。如果您的输入已正确规范化(例如,在我的情况下,它被放置在 [-180, 180) 中)并且您的多边形没有触及您的地图边界,那么您应该没有问题。
当您查看这样的算法时,x 和 y 坐标系是任意的;您可以将它们应用于 y 和 z、x 和 t 等(尽管 x 和 t 的情况并不一定具有我能很快想到的任何含义)。
如果我的描述不清楚:如果我给你一个围绕北极的多边形,那么这个多边形是否包括北极,或者它是否包括除了北极之外的所有东西,都是模棱两可的;这还没有明确地转达给我。
同样,如果您查看球体的纬度/经度投影,则多边形与 lat 或 long = 180 相交,而多边形中的通用点将无法处理。
拍下我的世界照片,让事情变得更清晰。我不确定您如何将多边形定义为左侧的绿色区域与两个半圆之间的区域(穿过我们和中国)。
在我的脑海中,您可能可以通过将两个圆圈分成两个不同的多边形并独立测试它们来解决这些问题。您可以按原样表示上半圆,也可以通过多边形及其点和整个地图的 4 个角来否定它。
或者,您可以在针对多边形进行测试时移动坐标系(这样它就不会包裹并且它的点都被标准化),尽管这无法解释多次跨越地球的多边形(标准化会破坏您的多边形) .
大多数情况下,当您只有 -179 到 180 度之间的角度时,它应该可以工作。如果您的角度更小或更大,那么您需要转换它。您可以使用每个顶点的世界坐标转换并将其投影回 -179,180 度。以下是计算边界框的方法,例如从美国纽约到中国北京:当位置有多个代码时,需要从邮政编码数据库中计算纬度经度。以下是如何标准化角度将角度保持在 -179 到 180 度之间的简单方法。您还可以使用带有 wrap 功能的传单 JavaScript 库。
它适用于所有情况,除非您
1) 重叠基准限制(经度从 180 跳到 -180 的限制)或
2) 重叠两极。
因此,对于 99.99% 的应用程序,只需检查地理数据导入时的两个条件,然后使用链接算法。
提供不满足这些条件的多边形将被忽略的信息,并且数据提供者必须先拆分它们。