- 测试: 微信小程序地图上的机构位置 偏差很大啊,直接定位到海里了,这不对,给你提个bug.
- 开发: 那不能啊,那经纬度都是后台返回的,有位置偏差,那是腾讯地图的锅。
- 测试: 那你想想办法,解决一下。
- 开发: 这,我查。。。。
这个位置动百度地图上获取的的经纬度,怎么可能不对呢。找了一圈,最后定位到 坐标系的问题。百度地图 与 腾讯地图是两种 地图坐标系统。
火星坐标系统 GCJ-02 地图厂商如下
- 腾讯搜搜地图
- 搜狐搜狗地图
- 阿里云地图
- 高德MapABC地图
- 灵图51地图
百度坐标系统 BD-09【对火星坐标系进行一次加密】 地图厂商如下
- 百度Baidu地图
上段 代码
-
百度经纬度转换成腾讯/高德地图经纬度
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
}
}
-
腾讯/高德地图经纬度转换成百度经纬度
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
}
}
后续的故事
- 测试: 乡镇地图的位置也是定位不准呐,你看看?
- 开发: 那不能奥,经纬度是百度地图上取到的,echarts也是百度的,肯定是一种地图坐标系的啊,
- Echarts issues查查去,喔。还真有人遇见定位不准的事情啊,底下的回复指出是坐标系的问题。
- 开发: 在网上下载的【乡镇地图数据】是到底是哪一个坐标系,翻翻记录,果然,是火星坐标系!!!!有了上一次的经验,这下直接处理好了问题。 至此完美解决。