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

如何在PostGIS中使用指定Proj4转换文本实现LUREF到WGS84转换

LUREF(EPSG:9895)转WGS84(EPSG:4937)的PostGIS自定义转换方案

背景

需要将LUREF(卢森堡参考系统,EPSG:9895)坐标转换为WGS84经纬度(EPSG:4937),直接使用PostGIS的ST_Transform调用两个CRS得到的结果不正确,但已通过Python pyproj使用自定义转换管道实现了正确转换,需在PostGIS中复用该转换逻辑。

相关参数

源CRS(EPSG:9895)

+proj=tmerc +lat_0=49.8333333333333 +lon_0=6.16666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +units=m +no_defs +type=crs

目标CRS(EPSG:4937)

+proj=longlat +ellps=GRS80 +no_defs +type=crs

自定义转换管道

+proj=pipeline +step +proj=axisswap +order=2,1 +step +inv +proj=tmerc +lat_0=49.8333333333333 +lon_0=6.16666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +step +proj=cart +ellps=intl +step +proj=helmert +x=-189.228 +y=12.0035 +z=-42.6303 +rx=0.48171 +ry=3.09948 +rz=-2.68639 +s=0.46346 +convention=coordinate_frame +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m +step +proj=axisswap +order=2,1

PostGIS实现步骤

1. 注册自定义坐标转换

使用ST_CreateCoordinateOperation将自定义转换管道注册到PostGIS的空间参考系统中:

-- 创建名为lueref_to_wgs84_custom的自定义转换
SELECT ST_CreateCoordinateOperation(
  'EPSG:9895',
  'EPSG:4937',
  'lueref_to_wgs84_custom',
  '<http://www.opengis.net/def/coordinateOperation/OGC/1.0/pipeline>',
  'PROJ4:' || '+proj=pipeline +step +proj=axisswap +order=2,1 +step +inv +proj=tmerc +lat_0=49.8333333333333 +lon_0=6.16666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +step +proj=cart +ellps=intl +step +proj=helmert +x=-189.228 +y=12.0035 +z=-42.6303 +rx=0.48171 +ry=3.09948 +rz=-2.68639 +s=0.46346 +convention=coordinate_frame +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m +step +proj=axisswap +order=2,1'
);

2. 执行自定义转换

在ST_Transform中指定使用刚注册的自定义转换名称,完成坐标转换:

-- 转换示例点(E:59432, N:92294, U:0)
SELECT ST_AsText(
  ST_Transform(
    ST_PointZ(59432, 92294, 0, 9895),
    4937,
    'lueref_to_wgs84_custom'
  )
);

3. 结果验证

可对比PostGIS转换结果与pyproj的输出,确保一致性。pyproj参考代码:

from pyproj import CRS,Transformer
from pyproj.transformer import TransformerGroup

# 查看转换参数详情
trans_group = TransformerGroup(CRS("EPSG:9895").to_3d(),CRS("EPSG:4937").to_3d())
print(trans_group.transformers[0].description)
print(trans_group.transformers[0].to_proj4(pretty=True))

# 执行转换(输入顺序为N,E,U)
print(trans_group.transformers[0].transform(92294, 59432, 0))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:39