我有一个
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
。df.footprint
的 {type' : 'Polygon'}
列解析为 GeoDataFrame geometry
?
您可以使用 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]