高德地图、百度地图、腾讯地图坐标相互转换
1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84坐标系的;但是在国内是不允许直接用WGS84坐标系标注的,必须经过加密后才能使用;
2.GCJ-02坐标系,又名“火星坐标系”,是我国国测局独创的坐标体系,由WGS-84加密而成,在国内,必须至少使用GCJ-02坐标系,或者使用在GCJ-02加密后再进行加密的坐标系,如百度坐标系。高德和Google在国内都是使用GCJ-02坐标系,可以说,GCJ-02是国内最广泛使用的坐标系;
3.百度坐标系:bd-09,百度坐标系是在GCJ-02坐标系的基础上再次加密偏移后形成的坐标系,只适用于百度地图。
- 将腾讯、高德地图经纬度转换为百度地图经纬度
//将腾讯、高德地图经纬度转换为百度地图经纬度
mapPointTxTurnBaiDu (dataLon, dataLat) {
let bd_lat;
let bd_lon;
let x_pi = 3.14159265358979324;
let x = dataLon, y = dataLat;
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);
bd_lon = z * Math.cos(theta) + 0.0065;
bd_lat = z * Math.sin(theta) + 0.006;
return { bd_lat, bd_lon };
},
selectAreaTreeVal (val) {
let self = this
self.houseLists.forEach(item => {
const pointData = this.mapPointTxTurnBaiDu(item.lng, item.lat)
item.lng = pointData.bd_lon
item.lat = pointData.bd_lat
let point = new self.BMap.Point(item.lng, item.lat)
let marker = new self.BMap.Marker(point) // 创建标注
self.map.addOverlay(marker)
})
},
- 百度地图坐标转腾讯、高德地图坐标
//百度地图坐标转腾讯、高德地图坐标
transPosition(bd_lng, bd_lat) {
var X_PI = Math.PI * 3000.0 / 180.0;
var x = bd_lng - 0.0065;
var y = bd_lat - 0.006;
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);
var gg_lng = z * Math.cos(theta);
var gg_lat = z * Math.sin(theta);
return {lon: gg_lng, lat: gg_lat}
},
selectAreaTreeVal (val) {
let self = this
self.houseLists.forEach(item => {
const pointData = this.transPosition(item.lng, item.lat)
item.lng = pointData.gg_lng
item.lat = pointData.gg_lat
let point = new self.AMap.Point(item.lng, item.lat)
let marker = new self.AMap.Marker(point) // 创建标注
self.map.addOverlay(marker)
})
},