检查点是不是位于(或靠近)凸多边形边缘

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 多边形内?

查找给定的经纬度是不是位于 MongoDB 中的任何多边形中

用php检查是不是指向内部或不在多多边形geojson中

找到顶点边缘(多边形)的最佳算法