Поднять ValueError при создании файла формы с геопандами

Я только недавно начал работать с шейп-файлами. У меня есть шейп-файл, в котором каждый объект является многоугольником. Я хочу создать новый шейп-файл, в котором геометрия каждого многоугольника заменяется его центроидом. Вот мой код.

import geopandas as gp
from shapely.wkt import loads as load_wkt

fname = '../data_raw/bg501c_starazagora.shp'
outfile = 'try.shp'
shp = gp.GeoDataFrame.from_file(fname)

centroids = list()
index = list()

df = gp.GeoDataFrame()

for i,r in shp.iterrows():
    index.append(i)
    centroid = load_wkt(str(r['geometry'])).centroid.wkt
    centroids.append(centroid)

df['geometry'] = centroids
df['INDEX'] = index

gp.GeoDataFrame.to_file(df,outfile)

Когда я запускаю скрипт, я получаю raise ValueError("Geometry column cannot contain mutiple " ValueError: Geometry column cannot contain mutiple geometry types when writing to file.Я не могу понять, что не так. Любая помощь?

1 ответ

Проблема в том, что вы заполняете геометрическое поле строковым представлением геометрии, а не фигурным геометрическим объектом.

Нет необходимости конвертировать в wkt. Ваш цикл может быть:

for i,r in shp.iterrows():
    index.append(i)
    centroid = r['geometry'].centroid
    centroids.append(centroid)

Тем не менее, нет необходимости циклически проходить через геоданные. Вы можете создать новый из центроидов шейп-файлов следующим образом:

df=gp.GeoDataFrame(data=shp, geometry=shp['geometry'].centroid)
df.to_file(outfile)
Другие вопросы по тегам