MySQL中GeoJSON/WKT转换时经纬度反转问题求助
问题分析:MySQL中GeoJSON与WKT经纬度反转的原因
结论
是的,你在存储数据时确实将经纬度的顺序反转了。
具体原因
EPSG:4326的坐标定义
EPSG:4326(WGS84)规范中,坐标的X轴对应经度,Y轴对应纬度。MySQL对SRID 4326的几何数据,内部遵循X-Y的存储顺序,也就是经度在前,纬度在后。你的数据存储异常点
从查询结果看:
- WKT输出
POINT(-0.5064713 51.2329694)符合WKT的X-Y(经度-纬度)规范,因此验证正确; - 但GeoJSON输出的坐标是
[51.233, -0.5065],这是纬度在前、经度在后,完全违反了GeoJSON要求的经度-纬度顺序。
这说明你在插入数据时,错误地将纬度值放在了X(经度)的位置,经度值放在了Y(纬度)的位置。
验证方法
执行以下查询查看存储的原始坐标值:
SELECT ST_X(geometry) AS stored_x, ST_Y(geometry) AS stored_y FROM lookup_geometries WHERE name = "Newlands Corner";
你会发现:
stored_x返回51.2329694(实际应为经度-0.5064713)stored_y返回-0.5064713(实际应为纬度51.2329694)
这直接证实了存储时的顺序错误。
修复方案
如果需要修正现有数据,可以通过交换X和Y坐标来更新:
UPDATE lookup_geometries SET geometry = ST_SetSRID(ST_Point(ST_Y(geometry), ST_X(geometry)), 4326) WHERE name = "Newlands Corner";
后续插入数据时,务必遵循经度在前,纬度在后的顺序,比如:
INSERT INTO lookup_geometries (name, geometry) VALUES ("Newlands Corner", ST_GeomFromText('POINT(-0.5064713 51.2329694)', 4326));
内容的提问来源于stack exchange,提问作者James C
相关产品推荐
相关产品推荐

