使用GeoPandas转换CRS(EPSG:4326转EPSG:31370)获错误坐标值求助
问题原因及解决方案
核心问题是你创建Shapely Point时颠倒了经纬度顺序:
- Shapely的
Point()构造参数遵循(x, y)顺序,对应地理坐标系中的经度(x)、纬度(y)。你写的Point(51.2, 3.2)把纬度放在了x位置、经度放在了y位置,相当于将点定位到了大西洋区域(经度51.2,纬度3.2),转换到Lambert 72自然得到错误坐标。 - 你的PyProj代码能得到正确结果,是因为
Transformer.transform()默认遵循源CRS(EPSG:4326)的官方轴顺序(纬度在前、经度在后),你传入的(51.2, 3.2)正好匹配这个顺序,因此转换正确。
修正后的GeoPandas代码
import shapely import geopandas as gpd # 正确顺序:经度3.2,纬度51.2 point1 = shapely.geometry.Point(3.2, 51.2) row = {"z": [2.1], "geometry": [point1]} point_wgs = gpd.GeoDataFrame(row, crs=4326) point_bel = point_wgs.to_crs(31370) # 查看转换结果 print(point_bel.iloc[0].geometry)
运行后会得到符合预期的坐标(约68000, 210000)。
如果想彻底避免轴顺序混淆,也可以在GeoPandas中显式使用带always_xy=True参数的转换器,但最稳妥的方式还是严格遵循经度在前、纬度在后的顺序创建Shapely几何对象,这是GIS领域的通用约定。
内容的提问来源于stack exchange,提问作者stray_dog
相关产品推荐
相关产品推荐

