更快捷的PG+PostGIS轉換火星坐標系方法

關于坐標系

我們通常用經(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 一下**

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容