You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何互换Geopandas Polygon的x、y坐标?

交换Geopandas中Polygon的X/Y坐标

translate()是用来给几何对象添加偏移量的平移操作,无法实现坐标互换。要交换Polygon每个顶点的X、Y坐标,可以通过遍历重构几何对象或利用numpy高效处理,以下是两种实现方式:

方法1:遍历坐标重构Polygon

这种方式直观,适合理解几何结构,同时支持处理带内环的Polygon和MultiPolygon:

import geopandas as gpd
from shapely.geometry import Polygon, MultiPolygon

def swap_xy(geom):
    if geom.type == 'Polygon':
        # 交换外环所有坐标的X/Y
        exterior_coords = [(y, x) for x, y in geom.exterior.coords]
        # 交换所有内环的坐标(如果存在)
        interior_coords = [[(y, x) for x, y in int_coords] for int_coords in geom.interiors]
        return Polygon(exterior_coords, interior_coords)
    elif geom.type == 'MultiPolygon':
        # 对MultiPolygon中的每个Polygon单独处理
        return MultiPolygon([swap_xy(poly) for poly in geom.geoms])
    else:
        # 其他几何类型(如Point、LineString)可同理扩展,这里直接返回原几何
        return geom

# 应用到你的GeoDataFrame几何列
# 假设你的GeoDataFrame名为gdf,几何列是geometry
gdf['geometry'] = gdf['geometry'].apply(swap_xy)

方法2:用Numpy高效处理(适合大数据量)

利用numpy操作坐标数组,处理速度更快,适合包含大量Polygon的数据集:

import geopandas as gpd
from shapely.geometry import Polygon
import numpy as np

def swap_xy_np(geom):
    if geom.type == 'Polygon':
        # 将外环坐标转为numpy数组,交换X/Y列(第0列和第1列互换)
        exterior_np = np.array(geom.exterior.coords)[:, [1, 0]]
        # 处理内环坐标
        interior_np_list = []
        for interior in geom.interiors:
            interior_np = np.array(interior.coords)[:, [1, 0]]
            interior_np_list.append(interior_np)
        return Polygon(exterior_np, interior_np_list)
    elif geom.type == 'MultiPolygon':
        return MultiPolygon([swap_xy_np(poly) for poly in geom.geoms])
    else:
        return geom

gdf['geometry'] = gdf['geometry'].apply(swap_xy_np)

验证示例

针对你提供的测试Polygon:

test_poly = Polygon([(-78.55, 74.89), (-79.48, 74.94)])
swapped_poly = swap_xy(test_poly)
print(swapped_poly)

输出结果为:

POLYGON ((74.89 -78.55, 74.94 -79.48))

符合预期需求。

内容的提问来源于stack exchange,提问作者Tanmoy Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:45:43