【发布时间】:2009-06-03 15:30:37
【问题描述】:
参考http://www.weather.gov/directives/sym/pd01008006curr.pdf,第 8 页,我们在地理坐标系(纬度和经度系统)中给出了一个具有四个顶点的区域。我想检查该区域内是否存在具有特定纬度和经度的点。
【问题讨论】:
参考http://www.weather.gov/directives/sym/pd01008006curr.pdf,第 8 页,我们在地理坐标系(纬度和经度系统)中给出了一个具有四个顶点的区域。我想检查该区域内是否存在具有特定纬度和经度的点。
【问题讨论】:
测试一个点是否在任意多边形内(任意数量的边,也允许凹面)的方法是选择一个你知道在多边形外的点;如果您正在测试的点和多边形外的点之间的线段与多边形段的奇数相交,则该点在多边形内。
【讨论】:
这是具有坐标系的球体上的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,所以如果你想在专有产品中使用它,它会“污染”你的其他来源。
【讨论】:
你的意思是编程还是数学?如果您在数学上理解它,那么以编程方式很容易。基本上,顶点定义线。您只需要知道线条的哪一侧构成“内部”。然后,将您的顶点转换为方程式,但使用小于或大于而不是等于。
Id est,假设您具有由以下等式定义的矩形: x=1, x=3, y=1, y=3
如果您想知道 (2,2) 是否在该区域内,只需计算每个方程: x > 1, x 1, y
如果四个都为真,则该点在区域内。
【讨论】:
【讨论】: