我有一个定义区域(或多边形)的KML文件。我想创建一个函数来检查给定的坐标是在该多边形的内部还是外部。
如果你想看一下,这是KML:http://pastebin.com/LGfn3L8H
我不想显示任何地图,我只想返回一个布尔值。
答案 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说明了如何执行此操作。