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

Geopandas设置CRS后无法生成正确米制缓冲几何的问题

问题原因及解决方案

核心错误是坐标与CRS不匹配:你创建的LineString用的是WGS84经纬度(纬度41/40,经度18.583/18.952),但直接将GeoDataFrame的CRS设为米制投影坐标系EPSG:3003。GeoPandas不会自动识别并转换坐标,只是给现有几何标记CRS,导致经纬度数值被当成米制坐标处理,缓冲后自然出现异常的负数坐标。另外,你创建LineString时的坐标顺序是(纬度,经度),不符合GeoPandas遵循的OGC标准(正确顺序应为(经度,纬度)),这也会导致位置偏差。

修正步骤

  1. 基于经纬度坐标创建GeoDataFrame,指定CRS为EPSG:4326(WGS84地理坐标系)
  2. 将GeoDataFrame转换到目标投影坐标系EPSG:3003
  3. 执行缓冲计算

修正后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:16:24