Python geopandas编辑地理数据

2024-03-28 14:04:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用.loc编辑形状文件中的地理坐标到正确的单元格,但每次都会出现相同的错误:TypeError: Value should be either a BaseGeometry or None

我甚至尝试将完全相同的地理坐标粘贴到单元格中,但仍然有相同的错误。问题出在哪里

import geopandas as gpd
fp = 'http://gis-lab.info/data/mos-adm/mo.geojson'
map_df = gpd.read_file(fp)
map_df.loc[[145],['geometry']]= 'MULTIPOLYGON (((37.2905 55.80199, 37.29542 55.803, 37.29663 55.8032, 37.29777 55.80335, 37.29864 55.80345, 37.29969 55.80352, 37.30356 55.80356, 37.30327 55.80318, 37.30292 55.80248, 37.30278 55.80127, 37.30235 55.79863, 37.29822 55.79763, 37.29447 55.79672, 37.29441 55.79679, 37.29412 55.79671, 37.29417 55.79663, 37.29321 55.79641, 37.29326 55.79806, 37.2905 55.80199)))'
map_df.plot()

Tags: 文件编辑mapdfvalue错误beloc
1条回答
网友
1楼 · 发布于 2024-03-28 14:04:35

geopandas中的几何图形存储为shapely.geometry对象。您试图传递一个字符串(WKT)表示形式,这就是它导致上述错误的原因。您必须首先将字符串转换为形状优美的几何体

from shapely.wkt import loads

string = 'MULTIPOLYGON (((37.2905 55.80199, 37.29542 55.803, 37.29663 55.8032, 37.29777 55.80335, 37.29864 55.80345, 37.29969 55.80352, 37.30356 55.80356, 37.30327 55.80318, 37.30292 55.80248, 37.30278 55.80127, 37.30235 55.79863, 37.29822 55.79763, 37.29447 55.79672, 37.29441 55.79679, 37.29412 55.79671, 37.29417 55.79663, 37.29321 55.79641, 37.29326 55.79806, 37.2905 55.80199)))'
geom = loads(string)
df.loc[145, 'geometry'] = geom

如果尝试指定多零件几何图形,在某些情况下可能会导致ValueError: Must have equal len keys and value when setting with an iterable,这是pandas(https://github.com/geopandas/geopandas/issues/992)中的已知错误。解决方法是通过GeoSeries传递它

geom = loads(string)
df.loc[145, 'geometry'] = geopandas.GeoSeries([geom]).values

相关问题 更多 >