旋转多边形而不改变内部空间关系

2 投票
1 回答
40 浏览
提问于 2025-04-12 01:56

我有一个多边形的 shapefile 文件,我想把它旋转一下。我可以做到旋转,但问题是,旋转后内部的顶点也会改变。这就导致了多边形之间重叠,而我并不想要这种情况。

这是我尝试过的。

import geopandas as gpd
input_poly_path = "poly3.shp"
gdf = gpd.read_file(input_poly_path)
explode = gdf.explode(ignore_index=True)
ex = explode.rotate(-90, origin="centroid")
g = gpd.GeoDataFrame(columns=['geometry'], geometry='geometry')
g["geometry"] = ex

原始多边形 旋转后的多边形

https://drive.google.com/drive/folders/1HJpnNL-iXU_rReQzVcDGuyWZ8IjciKP8?usp=drive_link 这是多边形的链接

1 个回答

3

如果我理解正确,你需要把centroid(中心点)作为旋转的起点,而这个中心点是从unary_union得到的。

out = gpd.GeoDataFrame(
    geometry=gdf.rotate(
        angle=-90, origin=list(gdf.unary_union.centroid.coords)[0]
    )
)

注意: 你不需要explode几何形状,因为你没有多边形组合

这里输入图片描述

使用的输入数据(gdf):

import geopandas as gpd

# download from Google Drive
input_poly_path = (
    "C:/Users/Timeless/Downloads/"
    "share-20240330T125957Z-001.zip!share"
)

gdf = gpd.read_file(input_poly_path, engine="pyogrio")

撰写回答