百度地图常用

254 阅读1分钟
import Http from '@http';const AK = 'aFed89ygyXWgCST1KRQzfG4ZcoQBBDwQ';const GD_JWD = 3;const BAIDU_JWD = 5;let baiduMap = {  getPosition(lng, lat) {    return new Promise((resolve, reject) => {      let script = document.createElement('script');      script.id = 'getPosition';      script.type = 'text/javascript';      script.src = `https://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location=${lat},${lng}&output=json&pois=1&ak=aFed89ygyXWgCST1KRQzfG4ZcoQBBDwQ`;      script.onerror = reject;      document.head.appendChild(script);      window.renderReverse = function(res) {        if (res.status === 0) {          resolve(res.result);        } else {          resolve();        }      };    });  },  translateJWDByNet(lng, lat, from = GD_JWD) {    return new Promise((resolve, reject) => {      // 添加超时控制      let time = 1000;      let timeId = setTimeout(() => {        resolve({lat: lat, lng: lng});      }, time);      Http.jsonp('https://api.map.baidu.com/geoconv/v1/', {        params: {          coords: `${lng},${lat}`,          from: GD_JWD,          to: BAIDU_JWD,          ak: AK,          callback: '_vi_translateJWDByNet',          jsoncallback: '_vi_translateJWDByNet',          format: 'json'        }      }).then(res => {        clearTimeout(timeId);        if (res.status === 0) {          let location = res.result[0];          resolve({            lng: location.x,            lat: location.y          });        } else {          resolve({lat: 0, lng: 0});        }      }, err => {        clearTimeout(timeId);        console.log('经纬度转换错误', err);        resolve({lat: lat, lng: lng});      });    });  },  getLocationByJWD(lng, lat) {    return new Promise((resolve, reject) => {      this.init().then(() => {        let point = new BMap.Point(lng, lat);        let geoc = new BMap.Geocoder();        geoc.getLocation(point, res => {          resolve(res.addressComponents);        });      });    });  },  // 百度坐标转高德(传入经度、纬度)  bd_decrypt(bdLng, bdLat) {    let X_PI = Math.PI * 3000.0 / 180.0;    let x = bdLng - 0.0065;    let y = bdLat - 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 ggLng = z * Math.cos(theta);    let ggLat = z * Math.sin(theta);    return { lng: ggLng, lat: ggLat };  },  // 高德坐标转百度(传入经度、纬度)  bd_encrypt(ggLng, ggLat) {    let X_PI = Math.PI * 3000.0 / 180.0;    let x = ggLng;    let y = ggLat;    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 bdLng = z * Math.cos(theta) + 0.0065;    let bdLat = z * Math.sin(theta) + 0.006;    return {      lng: bdLng,      lat: bdLat    };  }};export default baiduMap;