检查点是否在多边形内

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查点是否在多边形内相关的知识,希望对你有一定的参考价值。

给定GEO-JSON多边形,如下所示:

[
    [15.520376, 38.231155],
    [15.160243, 37.444046],
    [15.309898, 37.134219],
    [15.099988, 36.619987],
    [14.335229, 36.996631],
    [13.826733, 37.104531],
    [12.431004, 37.61295],
    [12.570944, 38.126381],
    [13.741156, 38.034966],
    [14.761249, 38.143874],
    [15.520376, 38.231155]
]

如何检查GPS位置是否在多边形区域内?

例如,如果用户位于Lat 37.387617,Long 14.458008,我将如何搜索阵列?

我不需要有人为我编写代码,我只是不明白我可以检查的逻辑。如果您有任何示例(任何语言),请指出我。

答案

此任务称为point in polygon测试。

Gerve解释了广泛用于此任务的算法。但这不会帮助您实现它。有脚踩,如平行线。

其中一种算法称为Crossings Multiply test,它是一种优化的变体。

源代码:CrossingsMultiplyTest(文件中的最后一个函数)

"Point in Polygon Strategies"给出了概述

使用经度表示x坐标,纬度表示y坐标。

另一答案

我发现了一篇关于Ray-casting algorithm的文章。这里解释得很好,它的主旨是(伪代码):

count ← 0
 foreach side in polygon:
   if ray_intersects_segment(P,side) then
     count ← count + 1
 if is_odd(count) then
   return inside
 else
   return outside

以上是关于检查点是否在多边形内的主要内容,如果未能解决你的问题,请参考以下文章

检查点是不是在多边形内

如何检查一个圆是不是位于凸多边形内

哪个是检查用户位置(android 应用程序)是不是在多边形内的更好方法

谷歌地图颤动检查多边形内的点

检查点是否位于m维矩形内

Google Maps v3:检查点是不是存在于多边形中