检查坐标是否在KML多边形内

时间:2015-11-13 18:05:45

标签: swift

我有一个定义区域(或多边形)的KML文件。我想创建一个函数来检查给定的坐标是在该多边形的内部还是外部。

如果你想看一下,这是KML:http://pastebin.com/LGfn3L8H

我不想显示任何地图,我只想返回一个布尔值。

1 个答案:

答案 0 :(得分:1)

Point-in-polygon(PiP)是一个研究得很好的计算几何问题,所以你可以使用很多算法和实现。搜索SO可能会找到几个你可以复制粘贴,甚至。

虽然有一个问题 - 你正在处理地球表面上的多边形......这是一个球体,而不是大多数PiP算法期望使用的无限欧几里德平面。 (例如,您可以使用内部角度加起来大于π弧度的三角形。)如此天真地部署PiP算法将为边缘情况提供错误的答案。

最简单的方法是使用一个可以解释欧几里德和球形(或者更确切地说是地球形状)几何之间差异的库,也就是像MapKit这样的映射库。有一些技巧like the one in this SO answer可让您通过地图投影将MKPolygon转换为CGPath,之后您可以使用CGPathContainsPoint函数来测试对应的平面2D多边形你的地球表面多边形。

当然,要做到这一点,您还需要将您的KML文件导入MapKit。 Apple已a sample code project说明了如何执行此操作。