Функция поворота Geopandas - PullRequest
       23

Функция поворота Geopandas

0 голосов
/ 18 января 2019

Я хотел бы использовать функцию geopandas.rotate() для поворота всех объектов в geodataframe на основе атрибута в столбце. Я успешен, если я просто выберу одну функцию. Однако для нескольких строк, я считаю, что мне нужно создать цикл for.

new_gdf = gpd.GeoDataFrame(columns=foo.columns)
for index, row in foo.iterrows():
    bar = foo[foo[row]].rotate(foo[rotation_col], origin='center')
    new_gdf=new_gdf.append(bar)

Когда я пытаюсь написать цикл for, я получаю сообщение об ошибке типа unhashable типа: 'Polygon'. Я также попытался написать функцию .apply(). Я не уверен, что делаю это правильно. Но вот что у меня есть:

foo_new = foo.apply(foo.rotate(foo.rotation_col, origin='center'))

Я могу предоставить больше информации по мере необходимости.

Спасибо

1 Ответ

0 голосов
/ 18 января 2019

Вы пытаетесь вращать shapely.Polygon, а не GeoPandas.GeoSeries, поэтому для этого вам нужно использовать фигурную форму.

import geopandas as gpd
import shapely

p1 = shapely.geometry.Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
p2 = shapely.geometry.Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])

g = gpd.GeoSeries([p1, p2])

gdf = gpd.GeoDataFrame(geometry=g)
gdf['angle'] = [25, 45]

for index, row in gdf.iterrows():
    rotated = shapely.affinity.rotate(row['geometry'], row['angle'])
    gdf.loc[index, 'geometry'] = rotated
...