在给定多边形坐标的情况下查找点属于哪个多边形的算法

Posted

技术标签:

【中文标题】在给定多边形坐标的情况下查找点属于哪个多边形的算法【英文标题】:Algorithm to find which polygon a point belongs to given the coordinate of a polygon 【发布时间】:2016-06-02 14:13:25 【问题描述】:

现实生活中的问题是这样的:给定不同国家的边界​​作为一系列坐标形成的多边形,并给定一个具有经度和纬度的点A,确定哪个国家包含点A。

问题的粗略图如下所示:

是否有一种算法可以让我确定给定点属于哪个国家/地区?我们可以假设国家边界以三元组(经度、纬度、ISO2)给出。

【问题讨论】:

是的,可能是。你喜欢 Java、C#、Python、MIPS、二进制吗? ...您必须先尝试一下先生。 我的想法是选择一个宽度为 W 的带,看看我的 y 位置的南北是否有边界。如果没有,则增加 W 直到我找到南坐标或北坐标。然后我在长度上做同样的事情来找到西边或东边的边界。如果 n/s e/w 对属于同一个国家/地区,那么我们就找到了该国家/地区。 如果将内插法视为线性,则在其他国家/地区内部存在一些边界点。因此,如果内插是线性的,则分辨率可能会成为问题。 @theblindprophet 他们要求一个算法。算法不需要编程语言(甚至计算机)。 谷歌“点在多边形测试”。 【参考方案1】:

如here 所述,可以使用各种方法,这取决于多边形的表示。一种可能性是从决定包含的点沿固定方向发送射线并计算与多边形相交的数量;如果数字是偶数,则该点在多边形外,否则在多边形内。

【讨论】:

【参考方案2】:

一个简单的测试是从查询点开始沿某个方向(比如正x)取一条线到无穷远。然后将它与形成多边形的所有线段相交。

如果你有奇数个交叉点,那么你的点就在多边形内。如果你有偶数个交叉点,那么这个点就在外面。

这适用于任何非自相交的多边形。

【讨论】:

以上是关于在给定多边形坐标的情况下查找点属于哪个多边形的算法的主要内容,如果未能解决你的问题,请参考以下文章

使用shapefile在Python中查找点的封闭多边形[重复]

如何检查给定坐标是不是属于多边形? (离线地理围栏)

查找给定多边形 w.r.t 的两个“边界”顶点。已知(光源)点

Qt画图以及坐标问题

SQL Server 的多边形算法中的点

如何在 Elasticsearch 中查找包含给定点的多边形