如何确定当前位置是不是在 KML 定义的区域内?

Posted

技术标签:

【中文标题】如何确定当前位置是不是在 KML 定义的区域内?【英文标题】:How can I determine if the current position is within a KML-defined area?如何确定当前位置是否在 KML 定义的区域内? 【发布时间】:2011-10-18 11:05:39 【问题描述】:

我有一些在地图上定义区域的 KML 数据,例如:

131.0764742247829,-15.80786022929951,0 132.6357700620065,-16.54895727734661,0
134.1119108999971,-17.28040233069844,0 135.8545033459996,-18.1298170074137,0 
137.7396886168202,-19.07860187595016,0 140.011948401144,-20.18462043802856,0 
142.3114600417346,-21.19369381963822,0 144.1566045495202,-22.15731684591415,0

我想在我的 ios 应用程序中确定用户的当前位置是否在这个定义的区域内。我该怎么做?

【问题讨论】:

How to determine if an annotation is inside of MKPolygonView (iOS) 的可能重复项 嗨,jano,感谢您的评论,我实际上想知道我是否在 kml 位置范围内 所以你想知道你是否在这些点的一定距离内? 没必要,我只需要确定我是否在 KML 中,在蓝线内。抱歉开始在 iOS 中学习映射,如果我用错了词,请原谅我。我想知道我的位置蓝点是否在这个特定的 KML 内……我有多个 KML 需要检查。实际上有 27 个。 我认为您很快就关闭了 Jano 的链接。真正的问题,我不知道这个问题的答案是:如何将 KML 位置范围转换为 CGPath 或 MKPolygonView?对不起,我不知道答案。我希望这能为您指明正确的方向。 【参考方案1】:

如果你知道圆的中心和半径,那就很容易了。

CLRegion *circle = [CLRegion initCircularRegionWithCenter:centerCoordinate radius:circleRadius identifier:@"myCircle"];

BOOL doesItContainMyPoint = [circle containsCoordinate:myLocation];

根据修改后的问题更新

我从未尝试过,但你不能用你的点创建一个 UIBezierPath(你不必实际绘制贝塞尔路径),然后使用 UIBezierPath 的- (BOOL)containsPoint:(CGPoint)point 来测试包含吗?

【讨论】:

嗨 sosborn,感谢您的评论,圆圈只是一个例子。刚刚用图片更新了我的问题 感谢更新的答案 sosborn,你能给我看一个关于它是如何工作的简短教程吗?由于我是 iOS 映射的新手,如何将 KML 解析到 iPhone 中? 好吧,您的坐标与图形坐标没有什么不同,也就是说,它们代表一个 x 和一个 y。因此,您可以使用 addLineToPoint: 方法创建 UIBezierPath 和分段。正如我所说,我从未这样做过,但只需查看 UIBezierPath 文档,然后将思维从 GPS 坐标转换为图形点。 感谢您的回复,将学习如何操作,我测试了简单的 KML 来解析值

以上是关于如何确定当前位置是不是在 KML 定义的区域内?的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌地图中心放在kml上,而不是位置

确定一个点是不是在一个区域内

如何检查位置是不是在我的圈子区域内?

ArcGIS中KML转为shp文件

从 Google 位置历史记录下载 KML 数据的当前 URL?

检查用户位置是不是在颤动的2个地理点的区域内