Geopandas 旋转功能
Geopandas Rotate function
我想使用 geopandas.rotate()
函数根据列中的属性旋转 geodataframe
中的所有要素。如果我只 select 一项功能,我就成功了。但是对于多行,我相信我需要创建一个 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 循环时,出现类型错误不可散列类型:'Polygon'
。我还尝试编写一个 .apply()
函数。我不确定我是否做对了。但这就是我所拥有的:
foo_new = foo.apply(foo.rotate(foo.rotation_col, origin='center'))
我可以根据需要提供更多信息。
谢谢
您正在尝试旋转 shapely.Polygon
,而不是 GeoPandas.GeoSeries
,因此您需要使用 shapely 来做到这一点。
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
我想使用 geopandas.rotate()
函数根据列中的属性旋转 geodataframe
中的所有要素。如果我只 select 一项功能,我就成功了。但是对于多行,我相信我需要创建一个 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 循环时,出现类型错误不可散列类型:'Polygon'
。我还尝试编写一个 .apply()
函数。我不确定我是否做对了。但这就是我所拥有的:
foo_new = foo.apply(foo.rotate(foo.rotation_col, origin='center'))
我可以根据需要提供更多信息。
谢谢
您正在尝试旋转 shapely.Polygon
,而不是 GeoPandas.GeoSeries
,因此您需要使用 shapely 来做到这一点。
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