【问题标题】:GeoJSON and MuliPolygon: shape polygon data into dataframe (python, shapely)GeoJSON 和 MuliPolygon:将多边形数据整形为数据框(python,shapely)
【发布时间】:2021-10-27 10:22:51
【问题描述】:

我必须确定该点是否属于某个区域。信息由 geojson 文件给出。 我通过以下方式创建了 DataFrame:

choro = pd.concat([pd.DataFrame({'name':block['properties']['name'], 'area': shape(block['geometry'])}) for block in geojson['features']], ignore_index=True)

该代码带有警告:

ShapelyDeprecationWarning:多部分几何的迭代已被弃用,并将在 Shapely 2.0 中删除。使用geoms 访问多部分几何的组成部分的属性

但有效!顺便说一句,如果您知道如何修改代码以关闭该警告 - 非常值得!

数据框看起来像:

这里是检查点是否属于区域的代码:

for index, area in choro.iterrows():
    polygon = area['area']
    if polygon.contains(point):
        print('Point belongs to ',area['name'])

如果我更改我的数据框(排除“shape”命令)以仅获取坐标(并且没有警告消息):

choro = pd.concat([pd.DataFrame({'name':block['properties']['name'], 'area': block['geometry']['coordinates']}) for block in geojson['features']], ignore_index=True)

我会:

显然是多边形的“形状”命令:

polygon = shape(area['area'])

和:

polygon = MultiPolygon(area['area'])

不再工作了。

问题是我如何才能获得更清晰的代码:将多边形(或任何其他“工作”结构)存储在数据框结构中,以使用 shapely 函数来查找点是否属于该区域并且没有任何警告或错误。

【问题讨论】:

    标签: python shapely point-in-polygon


    【解决方案1】:

    您可以使用 geopandas 包轻松创建您的 DataFrame,如下所示:

    import geopandas as gpd
    import geojson
    import pandas as pd
    with open("FileName.geojson", encoding='UTF-8') as json_file:
        geojson = geojson.load(json_file)
    df = gpd.GeoDataFrame.from_features(geojson["features"])
    

    然后你创建这个函数来返回任意点的多边形名称:

    def find_department(point):
        for index, row in df.iterrows():
            if row.geometry.contains(point):
                return row['name']
    

    要定义您可以使用的地理点:

    from shapely.geometry import shape, Point
    point = Point(Longitude, latitude)
    

    如果你想使用 shapely,我想告诉你你的代码运行良好,没有任何错误或警告,但这里有一些例外错误:

    1. 您将点坐标以相反的顺序排列。记住它是(经度,纬度)
    2. 该点和geoJSON 文件可能不在同一个坐标参考系统(CRS)。请确保使用正确的 EPSG 值导出您的 geoJSON 文件,即:WGS84 (EPSG: 4326) 查看this PDF 了解更多详情。

    【讨论】:

    • 谢谢!我试过geopandas。不幸的是,它无法在 Jupiter Notebook 上安装它们。但是,是的,会尝试通过你的回放来寻找新的想法。
    • 要安装 geopandas 使用 cmd 而不是 jupyter 并使用 conda 安装它 conda install --channel conda-forge geopandas 您可能需要先安装这些软件包 conda install pandas fiona shapely pyproj rtree
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2017-01-12
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多