AI摘要
PostGIS的ST_AsGeoJSON函数输出的GeoJSON格式遵循国际标准RFC 7946,坐标顺序为[经度, 纬度],即[lng, lat]。这与一些前端地图库如Google Maps、高德和百度JS API的[lat, lng]顺序不同,使用时需注意区分。若需将坐标顺序颠倒,可使用ST_FlipCoordinates函数。
直接结论(PostGIS + GeoJSON 标准)
PostGIS 的 ST_AsGeoJSON 输出是:[经度 lng, 纬度 lat]
也就是 先 lng,后 lat,不是 lat,lng。
1. 官方依据(RFC 7946 + PostGIS)
GeoJSON 国际标准 RFC 7946 强制规定:
坐标数组 = [longitude, latitude](X,Y)
PostGIS ST_AsGeoJSON 严格遵守该标准,完全不颠倒。
PostGIS 内部几何:ST_MakePoint(lng, lat) → 输出 GeoJSON 保持顺序 [lng, lat]
示例:
-- PostGIS:POINT(经度,纬度)
SELECT ST_AsGeoJSON(ST_SetSRID(ST_MakePoint(116.407, 39.904),4326));输出:
{"type":"Point","coordinates":[116.407,39.904]}→ [lng, lat]
2. 最容易踩坑的对比(一定要分清)
| 平台/格式 | 坐标顺序 |
|---|---|
PostGIS ST_AsGeoJSON、GeoJSON标准 | [lng, lat](经度在前) |
| Google Maps/高德/百度 JS API | [lat, lng](纬度在前) |
| Leaflet、OpenLayers | 大多 [lat, lng] |
前端地图库是lat,lng;PostGIS/GeoJSON 标准是lng,lat
混用会直接跑到地球对面。
3. 颠倒了怎么办?
PostGIS 一键翻转坐标:
-- 把 [lng,lat] 翻成 [lat,lng]
SELECT ST_AsGeoJSON(ST_FlipCoordinates(geom)) FROM table;