Python geopandas - 编辑地理数据

Python geopandas - editing geodata

我尝试使用 .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()

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