问题描述:
经测验,在type传入gcj02时才会报错,要使用gcj02就要配置地图key,没配置,uni.getLocation就会忽略type参数。
当key配置的是百度地图时type传入gcj02会报错。
还有就是不能在谷歌浏览器使用,不然调用没反应(报错都没有)。
type传入gcj02在某些老版本cli项目也不能使用,调用API没反应,如2.0.1-alpha-36920221121001,我改成2.0.2-4020420240722004就可以了,不过会报错getLocation:fail translate coordinate system faild。
我看了源码,uni.getLocation参数type:gcj02只对腾讯地图和高德地图有用。
解决办法:
1.使用腾讯地图或高德地图
2.自己调用百度坐标转换API。详情可看百度地图API坐标转换文档
说下第2种,先用uni.getLocation 不传type参数(默认wgs84)拿到wgs84坐标,然后调用百度API,mode传2(2代表wgs84转bd09ll)拿到bd09ll坐标。
bd09ll转gcj02:
// 百度的BD09坐标转换成GCJ-02坐标
export const coordinateShiftGCJ = (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};
}
// GCJ-02坐标转换成百度的BD09坐标
const coordinateShift = (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};
}