查找由点引用的多边形的最快方法使用 Python、Fiona 和 Shapely

问题描述

我被这个问题困住了。我有一个包含大约 5500 个多边形的 shapefile 地图。我需要找到与地理定位点(即纬度和经度)相对应的正确多边形。我写了以下简单的函数,给出 lat 和 lng,我得到了我正在寻找的正确信息:

def retrieve_geoformation(lat,lng):
    point = shapely.geometry.Point(lng,lat)
    class_area = None
    with fiona.open(PATH_SHP,encoding='latin-1') as resource:
        for poly in resource:
            shape = shapely.geometry.asShape(poly['geometry'])
            if(shape.contains(point)):
                class_area = poly['properties']['NOM_UE_AFL']
                break
    return class_area

所以,问题是这个函数平均需要 10 秒才能找到正确的多边形,如果给定的 lat 和 lng 对应于“资源”上的最后一个多边形。 我知道“shape.contains”对于巨大的多边形来说是一个昂贵的函数,我已经尝试过将这些多边形预加载为边界框的方法

预加载边界框的问题是构建和加载框对象需要大约 30 秒的处理时间。使用这种方法查找多边形时效果很好(不到 1 秒),但我无法在内存中进行这种“预加载”,因为这只是最终的脚本执行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)