Geopandas设置CRS后无法生成正确米制缓冲几何的问题
问题原因及解决方案
核心错误是坐标与CRS不匹配:你创建的LineString用的是WGS84经纬度(纬度41/40,经度18.583/18.952),但直接将GeoDataFrame的CRS设为米制投影坐标系EPSG:3003。GeoPandas不会自动识别并转换坐标,只是给现有几何标记CRS,导致经纬度数值被当成米制坐标处理,缓冲后自然出现异常的负数坐标。另外,你创建LineString时的坐标顺序是(纬度,经度),不符合GeoPandas遵循的OGC标准(正确顺序应为(经度,纬度)),这也会导致位置偏差。
修正步骤
- 基于经纬度坐标创建GeoDataFrame,指定CRS为
EPSG:4326(WGS84地理坐标系) - 将GeoDataFrame转换到目标投影坐标系
EPSG:3003 - 执行缓冲计算
修正后的代码
import pandas as pd from shapely import LineString import geopandas as gpd # 1. 用正确的(经度,纬度)顺序创建DataFrame,指定地理CRS test = pd.DataFrame( [["Test", LineString([(18.583, 41.000), (18.952, 40.892)])]], columns=["Nome", "geometry"] ) test = gpd.GeoDataFrame(test, crs='EPSG:4326', geometry="geometry") # 2. 转换到米制投影坐标系EPSG:3003 test_proj = test.to_crs('EPSG:3003') # 3. 执行1000米缓冲 buffered = test_proj.buffer(1000) print(buffered)
验证说明
转换后的投影坐标会是米为单位的合理数值(EPSG:3003下意大利区域的坐标通常在X: 100000-200000、Y: 4500000-4600000左右),缓冲后的多边形坐标也会处于合理范围,不会出现负数。
内容的提问来源于stack exchange,提问作者onafets94
相关产品推荐
相关产品推荐

