uni.getLocation+百度地图,报错getLocation:fail translate coordinate system faild

问题描述:
经测验,在type传入gcj02时才会报错,要使用gcj02就要配置地图key,没配置则报错getLocation:fail translate coordinate system faild;
当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.自己写转换函数,先用uni.getLocation 不传type参数(默认wgs84)拿到wgs84坐标,然后转换。

// 调用
uni.getLocation({
		success: (res) => {
				const bmapRes = wgs84togcj02(res.longitude, res.latitude)
				if (bmapRes && bmapRes.length !== 0) {
						const { latitude, longitude } = {longitude: bmapRes[0], latitude: bmapRes[1]}
						console.log("我的GCJ02定位:", { longitude, latitude })
				}
		}
});

// 转换
const PI = 3.1415926535897932384626
const a = 6378245.0 //卫星椭球坐标投影到平面地图坐标系的投影因子。
const ee = 0.00669342162296594323 //椭球的偏心率。


//转化经度
function transformlng(lng, lat) {
  let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))
  ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0
  ret += ((20.0 * Math.sin(lng * PI) + 40.0 * Math.sin((lng / 3.0) * PI)) * 2.0) / 3.0
  ret += ((150.0 * Math.sin((lng / 12.0) * PI) + 300.0 * Math.sin((lng / 30.0) * PI)) * 2.0) / 3.0
  return ret
}

//转化纬度
function transformlat(lng, lat) {
  let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))
  ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0
  ret += ((20.0 * Math.sin(lat * PI) + 40.0 * Math.sin((lat / 3.0) * PI)) * 2.0) / 3.0
  ret += ((160.0 * Math.sin((lat / 12.0) * PI) + 320 * Math.sin((lat * PI) / 30.0)) * 2.0) / 3.0
  return ret
}
//判断坐标是否在国外
function out_of_china(lon, lat) {
  if (lon < 72.004 || lon > 137.8347) {
    return true;
  }
  if (lat < 0.8293 || lat > 55.8271) {
    return true;
  }
  return false;
}
//wgs84 to gcj02   地球坐标系 转 火星坐标系
const wgs84togcj02 = (lng, lat) => {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [mglng, mglat]
    }
}

转换函数引用:https://blog.youkuaiyun.com/shi15926lei/article/details/140025529

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值