PostGIS ST_TRANSFORM使用EPSG 27200报错的问题求助
解决PostGIS中EPSG:27200转换报错的问题
问题根源
报错是因为服务器B使用的PROJ 6.3.1版本无法找到EPSG:27200(新西兰地图投影)与EPSG:4326(WGS84)之间转换所需的基准面转换网格文件。服务器A的PROJ 4.9.2版本对基准转换的处理更宽松,可能内置了简化转换参数,因此未出现问题;而PROJ 6+版本要求必须加载精确网格文件才能完成这类转换。
解决步骤
确认PostGIS使用的PROJ数据目录
在PostgreSQL终端执行以下命令,查看PostGIS关联的PROJ库路径:show postgis_proj_lib_dir;输出通常类似
/usr/share/proj或/usr/local/share/proj,记录该路径。获取基准转换网格文件
下载适用于新西兰基准转换的网格文件(如nzgd2000.gsb),该文件用于NZGD49(EPSG:27200的基准面)与WGS84之间的精确转换。放置网格文件到PROJ目录
将下载的nzgd2000.gsb复制到第一步查到的PROJ数据目录中,确保PostgreSQL服务进程对该文件有读取权限(可执行chmod 644 /path/to/proj/nzgd2000.gsb设置权限)。验证转换功能
重新执行测试查询:select st_asText(st_transform(st_geomfromtext('POINT(172 -43)', 4326), 27200));此时应能正常返回转换后的坐标,不再报错。
补充说明
如果暂时无法获取网格文件,可尝试用简化转换参数(精度会降低),示例:
select st_asText(st_transform(st_geomfromtext('POINT(172 -43)', 4326), 'PROJ4:+proj=tmerc +lat_0=-41 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs'));
仅推荐用于非高精度需求场景。
内容的提问来源于stack exchange,提问作者rajnz18
相关产品推荐
相关产品推荐

