检查在包含4个顶点的给定区域中是否存在点

参考http://www.weather.gov/directives/sym/pd01008006curr.pdf ,第8页,我们给出了一个在地理坐标系(纬度和长度系统)中有四个顶点的区域。 我想检查该区域内是否存在特定纬度和长度的点。

测试点是否在任意多边形内(任意数量的边,也允许凹面)的方法是选择一个你知道在多边形外面的点; 如果您正在测试的点与多边形外部的点之间的线段与多边形线段的ODD编号相交,则该点在多边形内。

这是具有坐标系的球体上的点多边形问题,该坐标系具有几个细微之处,使其比XY平面中的“常规”多边形点问题更难:

1)里面和外面是什么? (例如,如果我在一边有1英里的小“正方形”,它是否包围1平方英里,或地球表面的其余部分?这是一个简单的例子,但是对于非常大的多边形,可能不清楚哪个应该在里面哪个应该在外面,除非明确说明)

2)是多边形大圆段的分段? 如果是这样,那么那些并不代表纬度 – 长坐标系中的直线,除非它们是子午线或赤道 – 你需要处理曲线而不是几何中的线。 球面几何是最佳选择。

3)坐标系的“边缘”(国际日期线和极点) – 由经度+179.9度,-179.9度和纬度+ 0.1度,-0.1度划分的“正方形”通常不被认为包含点0 N,0 W,并且将被认为包含点0 N,180 W.但是如果你天真地用纬度/长点检查不等式,你将得到相反的答案。

所以我没有答案,但这些都是需要考虑的微妙问题。 (请将其读作“确保将它们包含在测试用例中”!)

编辑:我找到了spheres包,它有SphericalPolygon.contains方法可以做你想要的。 但是,我没有亲自使用过此软件包,而且它是GPL ,而不是LGPL,因此如果您希望在专有产品中使用它,它将“污染”您的其他来源。

你的意思是编程还是数学? 如果您在数学上理解它,那么以编程方式很容易。 基本上,顶点定义线条。 你只需要知道线的哪一边构成“内部”。 然后,将顶点转换为方程式,但使用小于或大于而不是等于。

Id est,假设您具有由以下等式定义的矩形:x = 1,x = 3,y = 1,y = 3

如果你想知道(2,2)是否在该区域内,只需评估每个方程:x> 1,x <3,y> 1,y <3。

如果所有四个都是真的,则该点在该区域内。