众所周不知---
从百度地图获取到的经纬度是不可以直接渲染给腾讯或高德地图使用的,因为他们使用的坐标系是不同的,百度使用的是自成一套的BD09坐标,而腾讯高德使用的则是GCJ-02坐标。
如果不转换就直接使用,就会导致两个地图中定位点偏差很大的情况。
所以,若在项目中碰到这种情况,就需要进行转换:
// 百度转腾讯或高德
function BaiduMapTransTxMap(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 {
longitude: lngs,
latitude: lats
};
}
// 腾讯或高德转百度
function TxMapTransBaiduMap(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 {
longitude: lngs,
latitude: lats
};
}
以上就是转换的方法,稍加记录一下,以备不时之需。