2009-07-24 263 views
5

我有一个多边形点的数据库作为纬度和经度对,我需要测试一个给定的经纬度点是否在任何一个多边形内。处理多边形的多边形算法,处理跨边界的多边形

围绕these有几种算法,但如果多边形跨越antemeridian(新西兰海岸外,经度从+180度向东翻转至-180度向西),它们将不起作用。

我看到的一个解决方案是检测多边形是否跨越了antemeridian,如果是这样,将它分成两个多边形,每边一个,然后检查它们中的每一个。

回答

2

另一个(更简单)的选项IMO只是为了测试这种特殊情况,如果存在,请将转换应用到查询点和多边形。例如,如果它横跨反经络,只是将所有东西都翻译成特定的经度,以使其不能跨越子午线,并进行标准测试。

1

这可能是矫枉过正,但您可以考虑使用球形多边形,而不是将地图视为飞机。 Java中的library可以处理它们,并且可以执行点球面多边形检查。尽管如果您的多边形包含超过一半的地球或两个极点,那么您可能会遇到问题,因为封闭区域的定义开始出现故障。

+0

同意 - 最好的办法是把它们当作球形多边形。但是,除非您遵循卷绕惯例(即,将内部定义为由CCW遍历所包围的区域),否则封闭区域总是不明确的。 – 2009-07-24 01:43:00

0

感谢您的建议。最后,我测试的多边形是一个矩形,所以如果它横跨了antemeridian(它有不同的迹象),将它切成两个多边形,每边一个,并查询与它们相交的对象。

0

难道你不能通过添加360将所有的经度坐标'移动'到GW子午线的正面?例如:坐标是-178度,然后变成+ 182度,-1度变为359度,1度变为361等...

我不知道这将如何影响两极,但它可能会正常工作,不要碰两极。

+0

我没有评论无处不在特权,所以作出答案是让我说出来的唯一方法... – 2012-10-01 11:45:55