PostgreSQL 11中ST_AsGeoJSON返回非可读坐标值求助
问题解决:PostgreSQL中WKB转经纬度无效的处理方案
核心问题分析
你提供的WKB字符串格式有效,但返回的坐标是平面投影坐标系数值(而非经纬度),且后续的空间参考设置逻辑错误,导致无法得到有效经纬度:
- 该WKB本身不包含空间参考(SRID)信息,直接给它硬套WGS84(SRID=4326)经纬度坐标系完全错误——平面投影坐标的数值范围(十几万)和经纬度(-180~180, -90~90)完全不匹配。
- 你执行的
st_setsrid(st_asgeojson(...),4326)逻辑错误:st_asgeojson返回的是JSON字符串,转成geometry后仍是原平面坐标,错误的SRID设置无法改变坐标本质。
正确处理步骤
1. 确认原始坐标系(SRID)
必须向数据团队确认该WKB对应的原始空间参考系代码(SRID)——这类十几万的坐标大概率是国内地方投影坐标系(如CGCS2000分区投影,SRID如2383、2381)或UTM分区投影。
2. 正确转换为经纬度
假设数据团队告知原始SRID为2383(广州CGCS2000投影),执行以下语句即可得到标准经纬度:
-- 给原始WKB设置正确的原始SRID SELECT ST_SetSRID('0101000000A0ABA80D249D024100EC624219AA0B41'::geometry, 2383); -- 转换为WGS84经纬度(SRID=4326)并输出GeoJSON SELECT ST_AsGeoJSON(ST_Transform(ST_SetSRID('0101000000A0ABA80D249D024100EC624219AA0B41'::geometry, 2383), 4326));
3. 验证WKB有效性
你之前执行的ST_AsText能返回合法POINT,说明WKB本身格式无损坏,无需怀疑数据完整性,只需确认坐标系即可。
关键注意事项
- 空间转换的核心是原始SRID必须正确,否则
ST_Transform无法得到正确结果。 - 若无法获取原始SRID,可尝试国内常用平面投影SRID测试(如2381、2383、4523),对比转换结果是否符合预期地理位置。
内容的提问来源于stack exchange,提问作者Chaehwa Ryu
相关产品推荐
相关产品推荐

