最近遇到需要在raspberry pi 上讀gps座標,而我用的是waveshare的L76X GPS HAT 這片晶片,不過這片晶片吐出來的gps誤差無敵無敵的大,開車可能開一個小時都不會到的那種距離。但是他解析出來的百度座標卻是非常的精準,但是百度座標只能在百度地圖座標地圖上查而已,因為他是bd-09的加密坐標系,而google是吃WGS-84( 可是文章都說他們是GCJ-02)
所以我需要把他的百度座標 做一個轉換,這邊我是直接寫C語言來做
L76X的程式github上有,所以我只需要在引入 https://github.com/Dronaldo17/ChinaMapShift/blob/master/algorithm/china_shift.c
這個別人寫好的C就好了
我在我的main主程式
include “china_shift.h” //百度轉全球座標
//開始執行修正 baidu gps偏移轉google gps
Location gps ={Baidu.Lon,Baidu.Lat};// 這邊的百度經緯度是L76X的 /C/main 那隻程式裡面的
//Transform 百度BD-09 to GCJ-02
gps=bd_decrypt(gps);
//Transform GCJ-02 to WGS-84
gps =transformFromGCJToWGS(gps);
printf("\r\n");
printf("google %07f %07f",gps.lat,gps.lng);
這樣子重新make過你的C 就可以直接./main 執行看看你拿到的gps是否正確了
所以看了上面程式碼應該會有一個奇怪的地方,我先把百度先轉成GCJ-02坐標系後 發現這座標丟去google還是錯的
我再多轉一次把她轉到WGS-84後再丟入google map去就發現正確了。