我已经模拟了这个算法http://forcefront.github.io/point-in-polygon/point-in-polygon.html。
但我认为纬度和经度是球形坐标。
该算法是否适合地图上多边形的juding点?
答案 0 :(得分:3)
通用的多边形点实现不会考虑到您可以从179.999度到-180度的值进行换行,并且我们没有充分了解手头的问题。如果你的输入被正确地标准化(例如,对于我的情况,它放在[-180,180]中)并且你的多边形没有触及你的地图边界,那么你应该没有问题。
当你看这样的算法时,x和y坐标系是任意的;你可以将它们应用于y和z,x和t等(虽然x和t的情况没有任何意义,我可以很快想到)。
如果我在描述中没有说清楚:如果我给你一个围绕北极的多边形,那么这个多边形是否包括北极,或者它是否包括除了北极以外的所有东西都是模棱两可的;没有明确传达给我的。
同样,如果你看一个球体的纬度/经度投影,一个多边形与lat相交或者long = 180,而多边形中的一个通用点就不会处理它。
拍摄世界照片,让事情更加清晰。我不确定如何将多边形定义为左边的绿色区域与两个半圆之间的区域(穿过我们和中国)。
离开我的头顶,你可以通过将两个圆分成两个不同的多边形并独立测试来解决这些问题。您可以按原样表示上半圆,或者通过带有点和整个地图的4个角的多边形来表示它。
或者,您可以在对多边形进行测试时移动坐标系(以便它不会换行并且其点都被标准化),但是这将无法考虑遍布地球多次的多边形(标准化会破坏)你的多边形)。
答案 1 :(得分:0)
大多数情况下,如果您的角度介于-179和180度之间,它应该可以正常工作。如果你的角度更小或更大,那么你需要转换它。您可以使用转换到每个顶点的世界坐标并将其投影回-179,180度。以下是计算边界框的方法,例如从美国的纽约到中国的北京:Need to calculate latitude longitude from postal code database when location has multiple codes。以下是如何标准化角度Easy way to keeping angles between -179 and 180 degrees的方法。您还可以将leaflet JavaScript库与wrap函数一起使用。
答案 2 :(得分:0)
除了你
之外,它适用于所有情况1)重叠基准限制(经度从180跳到-180的限制)或当 2)重叠两极。
因此,对于99.99%的所有应用程序,只需检查地理数据导入的两个条件 然后使用链接的算法。
提供忽略不符合这些条件的多边形的信息,数据提供者必须先拆分它们。