關于坐標系
我們通常用經(jīng)緯度來表示一個地理位置,但是由于一些原因,我們從不同渠道得到的經(jīng)緯度信息可能并不是在同一個坐標系下。
? 高德地圖、騰訊地圖以及谷歌中國區(qū)地圖使用的是GCJ-02坐標系
? 百度地圖使用的是BD-09坐標系
? 底層接口(HTML5 Geolocation或ios、安卓API)通過GPS設備獲取的坐標使用的是WGS-84坐標系
不同的坐標系之間可能有幾十到幾百米的偏移,所以在開發(fā)基于地圖的產(chǎn)品,或者做地理數(shù)據(jù)可視化時,我們需要修正不同坐標系之間的偏差。
?WGS-84 - 世界大地測量坐標系
WGS-84(World Geodetic System, WGS)是使用最廣泛的坐標系,也是世界通用的坐標系,GPS設備得到的經(jīng)緯度就是在WGS84坐標系下的經(jīng)緯度。通常通過底層接口得到的定位信息都是WGS84坐標系。如天地圖,osm底圖等。
GCJ-02 - 國測局坐標系
GCJ-02(G-Guojia國家,C-Cehui測繪,J-Ju局),又被稱為火星坐標系,是一種基于WGS-84制定的大地測量系統(tǒng),由中國國測局制定。此坐標系所采用的混淆算法會在經(jīng)緯度中加入隨機的偏移。如谷歌地圖(中國區(qū)),高德地圖,騰訊地圖等。
?BD-09 - 百度坐標系系
BD-09(Baidu, BD)是百度地圖使用的地理坐標系,其在GCJ-02基礎上又增加了一次偏移,用來保護用戶隱私。從百度產(chǎn)品中得到的坐標都是BD-09坐標系。
如何安裝
PostgreSQL安裝PostGIS擴展
復制geoc-pg-coordtansform.sql中代碼,在數(shù)據(jù)庫執(zhí)行
github地址:https://github.com/geocompass/pg-coordtransform
示例
GCJ02轉WGS84
select geoc_gcj02towgs84(geom) from test_table
WGS84轉GCJ02
select geoc_wgs84togcj02(geom) from test_table
WGS84轉BD09
select geoc_wgs84tobd09(geom) from test_table
BD09轉WGS84
select geoc_bd09towgs84(geom) from test_table
GCJ02轉BD09
select geoc_gcj02tobd09(geom) from test_table
BD09轉GCJ02
select geoc_bd09togcj02(geom) from test_table
轉換方法
基于 PG+PostGIS 進行三種坐標系之間的轉換,支持點、線、面、多點、多線、多面等各種需求進行互轉
**geoc_gcj02towgs84:火星坐標系轉WGS84坐標系**
**geoc_wgs84togcj02:WGS84坐標系轉火星坐標系**
**geoc_wgs84tobd09:WGS84坐標系轉百度坐標系**
**geoc_bd09towgs84:百度坐標系轉WGS84坐標系**
**geoc_gcj02tobd09:火星坐標系轉百度坐標系**
**geoc_bd09togcj02:百度坐標系轉火星坐標系**
注意事項
**傳入的geometry參數(shù)的 SRID 必須是 4326 或 4490 ,否則返回null。**
?注
**本文如對您有幫助,請在 github 上 star 一下**