如何互换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
相关产品推荐
相关产品推荐

