参考http://www.weather.gov/directives/sym/pd01008006curr.pdf,第8页,我们给出了一个在地理坐标系(纬度和长度系统)中有四个顶点的区域。我想检查该区域内是否存在特定纬度和长度的点。
答案 0 :(得分:6)
测试点是否在任意多边形(任意数量的边,允许凹面)内的方法是选择一个你知道在多边形外面的点;如果您正在测试的点与多边形外部的点之间的线段与多边形线段的ODD编号相交,则该点位于多边形内。
答案 1 :(得分:3)
这是一个带有坐标系的球体上的point-in-polygon问题,它具有几个细微之处,使其比X-Y平面中的“常规”多边形点问题更难:
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,因此如果您希望在专有产品中使用它,它将“污染”您的其他来源。
答案 2 :(得分:1)
你的意思是编程还是数学?如果您以数学方式理解,那么以编程方式很容易。基本上,顶点定义线条。你只需要知道线的哪一边构成“内部”。然后,将顶点转换为方程式,但使用小于或大于而不是等于。
Id est,假设您有由以下等式定义的矩形: x = 1,x = 3,y = 1,y = 3
如果您想知道(2,2)是否在该区域内,只需评估每个等式: x> 1,x< 3,y> 1,y< 3。
如果所有四个都是真的,则该点在该区域内。
答案 3 :(得分:-1)