我有一个多边形点数据库作为纬度,经度对,我需要测试给定的lat,lng点是否在任何多边形内。
有几种算法可以包括these,但如果多边形跨越了antemeridian(在新西兰海岸附近,经度从东经+180度翻到西经-180度),它们就不起作用了。< / p>
我看到的一个解决方案是检测多边形是否跨越了antemeridian,如果是这样,将其分成两个多边形,每边一个,然后检查每个多边形。
答案 0 :(得分:2)
另一个(更简单的)选项IMO只是测试该特殊情况,如果存在,则将变换应用于查询点和多边形。例如,如果它跨越反子午线,只需按特定的经度数量翻译所有内容,使其不跨越子午线,并进行标准测试。
答案 1 :(得分:1)
这可能有些过分,但您可能会考虑使用球形多边形而不是将地图视为平面。这是Java中的library处理它们,可以进行点球形多边形检查。虽然,如果您的多边形包含超过一半的地球或两个极点,您可能会遇到问题,因为封闭区域的定义开始崩溃。
答案 2 :(得分:0)
感谢您的建议。最后,我正在测试的多边形是一个矩形,所以如果它横跨antemeridian(它有不同符号的经度)将它切成两个多边形,每边一个,并查询与其中任何一个相交的对象。
答案 3 :(得分:0)
难道你不能通过添加360来让所有经度坐标“移动”到GW子午线的正面吗?例如:坐标为-178度,然后变为+ 182度,-1度变为359度,1度变为36度等......
我不知道这会对杆子造成什么影响,但对于任何不接触杆子的东西都可以正常工作。