json {'type' : 'Polygon'} 到 GeoDataFrame

问题描述 投票:0回答:1

我有一个

DataFrame
和一个 json
{'type' : 'Polygon'}
对象。

df.head(2)

    osm_id  osm_address osm_building    osm_building:levels footprint   plus_code   ground_height   building_height roof_height osm_name    osm_office  osm_type    osm_website osm_operator
739615941   739615941.0 10 Rhodes Avenue University Estate Cape Town    house   2   {'type': 'Polygon', 'coordinates': [[[264275.9...   4FRW3C6X+WRG    96.75   6.9 103.65  NaN NaN NaN NaN NaN
740820432   740820432.0 100 Upper Roodebloem Road University Estate Ca...   house   2   {'type': 'Polygon', 'coordinates': [[[264379.7...   4FRW3F62+R87    85.37   6.9 92.27   NaN NaN NaN NaN NaN
df.footprint[0]
{'type': 'Polygon',
 'coordinates': [[[264275.99887603114, 6241813.834685098],
   [264278.1042860146, 6241837.7936792765],
   [264273.2223782305, 6241838.438089997],
   [264272.6105920747, 6241830.67597108],
   [264271.28497070284, 6241830.787288936],
   [264270.08650652826, 6241814.253691107],
   [264275.99887603114, 6241813.834685098]]]}

我已经尝试过(按照[->这里])

def parse_geom(geom_str):
    try:
        return shape(json.loads(geom_str))
    except (TypeError, AttributeError):  # Handle NaN and empty strings
        return None

df['footprint'] = df['footprint'].apply(parse_geom)

但是失败了。对于所有功能,它都会返回

None

如何将带有 json
df.footprint
{type' : 'Polygon'}
列解析为 GeoDataFrame
geometry

python json pandas dataframe geometry
1个回答
0
投票

您可以使用 shapely 中的 shape

 来制作 GeoDataFrame 的 
几何 :

from shapely.geometry import shape

gdf = gpd.GeoDataFrame(df, geometry=[shape(d) for d in df.pop("footprint")])

输出(仅第一行):

print(gdf)


            osm_id               osm_address  ... osm_operator                  geometry
0 739615941.000000  10 Rhodes Avenue Univ...  ...         None  POLYGON ((264275.999 ...

[1 rows x 14 columns]

© www.soinside.com 2019 - 2024. All rights reserved.