python - 如何在不规则多边形内找到一个点

标签 python

我有一个函数,它获取纬度和经度坐标,并返回与包含坐标的多边形相关的信息。换句话说:

def coords_to_info(lat, lng):
    #check in which polygon the point lies
    return polyName

为了检查点是否在多边形内,我尝试了两种不同的函数:

def point_in_poly(x,y,poly):
    """
    function to check if a point is in a 2D polygon
    """
    n = len(poly)
    inside = False

    p1x,p1y = poly[0]
    for i in range(n+1):
        p2x,p2y = poly[i % n]
        if y > min(p1y,p2y):
            if y <= max(p1y,p2y):
                if x <= max(p1x,p2x):
                    if p1y != p2y:
                        xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
                    if p1x == p2x or x <= xints:
                        inside = not inside
        p1x,p1y = p2x,p2y

    return inside

print point_in_poly(lat, lng, lBoundary)

from shapely.geometry import Point
from shapely.geometry.polygon import Polygon

coordPoint = Point(lat, lng)
coordPolygon = Polygon(lBoundary)

print coordPolygon.contains(coordPoint)

lBoundary 是一个封闭的元组列表(第一个点和最后一个点相等):[(a,b), (c,d), (e,f), (a,b)]

这两种方法都适用于测试数据和小的凸数据,但对于大多数真实数据多边形都返回 false。

我已经使用模拟数据对这两个函数进行了相当广泛的测试(我测试了 all these types of polygons ),但是当我将它应用于我的大部分真实数据时,这些函数停止工作。

是否有任何因素会影响这些函数给出漏报,例如多边形大小、坐标的小数位或其他此类琐碎的事情?

最佳答案

most common approach 之一查找一个点是否在多边形内部是测试从该点开始并沿任意方向延伸的线穿过多边形边界的次数。 Check this question in stackoverflow获取更多信息和具体示例。

顺便说一句,Shapely是一个经过良好测试的库。我不认为它会工作不正常,可能是您的多边形或您使用它的方式有问题。

关于python - 如何在不规则多边形内找到一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720768/

相关文章:

python - 拍卖脚本(从文件输入到字典)

Python 日志记录 : Why is __init__ called twice?

python - 如何尽可能快地计算一个以 3 为底的整数值,该整数以一个巨大的十进制数字序列(超过一百万)给出?

python解压列表字典

python - 如何为基于多个分隔符的拆分添加约束?

python - 同时增加数据库计数器

python - 努力创建数据帧,ParserError : Error tokenizing data. C 错误 : Expected 12 fields in line 15, 看到 16

python - 使用元组时,ChoiceField 不显示空标签

python - True Loop 无法正常工作时的套接字

python - 如何在Python中从Excel列表中读取时间戳