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;