1. 程式人生 > >JS: 百度地圖與騰訊/高德地圖經緯度轉換

JS: 百度地圖與騰訊/高德地圖經緯度轉換

前言

在開發中使用了第三方的資料,由於經緯度使用的是第三方的陣列,他們使用的是百度的地圖座標。在專案中使用時,能用百度地圖去解析自然是最好的,但是呢,該專案是基於微信小程式的,百度地圖針對小程式提供的API功能不是很完善,難以實現想要的需求,所以採用騰訊官方的地圖。

開始

使用不同的地圖,相應的經緯度會存在些許偏差,騰訊和高德是同一座標的,可以互用,百度的座標與兩者稍有不同,使用前,需要先經過換算。

實踐

將騰訊/高德地圖經緯度轉換為百度地圖經緯度

function qqMapTransBMap(lng, lat) {
      let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
      let x = lng;
      let y = lat;
      let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
      let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
      let lngs = z * Math.cos(theta) + 0.0065;
      let lats = z * Math.sin(theta) + 0.006;
     
      return {
          lng: lngs,
          lat: lats 
      } 
}

 將百度地圖經緯度轉換為騰訊/高德地圖經緯度

function bMapTransQQMap(lng, lat) {
      let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
      let x = lng - 0.0065;
      let y = lat - 0.006;
      let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
      let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
      let lngs = z * Math.cos(theta);
      let lats = z * Math.sin(theta);
      
      return {
          lng: lngs,
          lat: lats        
      }   
}

總結

如果你還有什麼疑問或想法,歡迎留言評論,或者掃描下方二維碼,與我取得聯絡~  (記得備註:CSND喔~)