检查点是不是位于(或靠近)凸多边形边缘
Posted
技术标签:
【中文标题】检查点是不是位于(或靠近)凸多边形边缘【英文标题】:Check if Point is located on(or close to) a convex polygon edges检查点是否位于(或靠近)凸多边形边缘 【发布时间】:2017-09-29 06:35:11 【问题描述】:所以我将 KML 文件加载到我的谷歌地图,它们在地图上显示为凸多边形。 我也有用户位置,基本上我想知道用户是否位于多边形的边缘之一(这是一个凸多边形)。 并且由于位置服务不是 100% 准确,如果位置很近(边缘距离为 15m),那很好:)
我的解决方案是找到在2个顶点之间传递的函数y=f(x),然后检查用户位置是否低于f(x)+a和高于f(x)-a。
我觉得我遗漏了一些东西,应该有一个更好(更准确)的方法来解决我的问题,甚至可能有一个用于 android 的 java 库已经解决了这个问题。
谢谢:)
【问题讨论】:
【参考方案1】:您可以使用PolyUtil.isLocationOnEdge(),这正是您想要的。
【讨论】:
【参考方案2】:您应该实现一个函数来确定从点到线段的距离。您可以在整个网络上找到相关代码,例如:“Shortest distance between a point and a line segment”。 然后遍历多边形的每一段。即使多边形是非凸的,这也有效。
您实际上可以为凸多边形实现更好的时间复杂度,但这可能不值得实施。
【讨论】:
以上是关于检查点是不是位于(或靠近)凸多边形边缘的主要内容,如果未能解决你的问题,请参考以下文章
斯威夫特:多边形中的点?如何检查用户的位置是不是在 Geo-JSON 多边形内?