微信小程序精准定位百度

1.坐标系介绍

WGS84地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,最基础的坐标,谷歌地图在非中国地区使用的坐标系GPS/谷歌地图卫星
GCJ02火星坐标系,是由中国国家测绘局制定的地理信息系统的坐标系统。并要求在中国使用的地图产品使用的都必须是加密后的坐标,而这套WGS84加密后的坐标就是GCJ02腾讯(搜搜)地图,阿里云地图,高德地图,谷歌国内地图,百度地图
BD09百度坐标系,百度在GCJ02的基础上进行了二次加密,官方解释为了进一步保护用户的隐私搜狗地图,图吧地图等

2. uni-app精准定位

精准定位的关键是使用gcj02不使用wgs84

getLocation() {
            let _this = this
            uni.getLocation({
                type: 'gcj02',
                //精准定位的关键是使用gcj02不使用wgs84
                // type: 'wgs84',
                success(res) {
                    console.log("你当前经纬度是:", res)
                    _this.latitude = res.latitude.toString();
                    _this.longitude = res.longitude.toString();
                },
                fail(err) {
                    console.log('>>>>>>>>>>>>>>>>授权失败:', err)
                }
            });
}

3. js精准定位

1.引入maputil.js文件

<script>
var mapUtil = require('../../utils/maputil.js')
export default {
  data() {
  }
}

2.使用js文件

//输入后台获取的lng、lat返回回显再地图上的坐标位置
let mapresult = mapUtil.wgs84ToGcj02(lng,lat)

3.文件详情

// 一些常量
var PI = 3.1415926535897932384626;
var X_PI = 3.14159265358979324 * 3000.0 / 180.0;
var a = 6378245.0;
var ee = 0.00669342162296594323;
// 检测是否在国内
function isOutofChina(lng, lat) {
	return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
};
 
// BD-09坐标转换为GCJ-02坐标
function bd09ToGcj02(lng, lat) {
	var x = lng - 0.0065;
	var y = lat - 0.006;
	var magic = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);
	var sqrtMagic = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);
	var mgLng = sqrtMagic * Math.cos(magic);
	var mgLat = sqrtMagic * Math.sin(magic);
	return [mgLng, mgLat]
};
// GCJ-02坐标转换为BD-09坐标
function gcj02ToBd09(lng, lat) {
	var magic = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * X_PI);
	var sqrtMagic = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * X_PI);
	var mgLng = sqrtMagic * Math.cos(magic) + 0.0065;
	var mgLat = sqrtMagic * Math.sin(magic) + 0.006;
	return [mgLng, mgLat]
};
// WGS-84坐标转换为GCJ-02坐标
function wgs84ToGcj02(lng, lat) {
	if (isOutofChina(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 = parseFloat(lat) + parseFloat(dlat);
		var mglng = parseFloat(lng) + parseFloat(dlng);
		return [mglng, mglat]
	}
};
// GCJ02-坐标转换为WGS-84坐标
function gcj02ToWgs84(lng, lat) {
	if (isOutofChina(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 = parseFloat(lat) + parseFloat(dlat);
		var mglng = parseFloat(lng) + parseFloat(dlng);
		return [lng * 2 - mglng, lat * 2 - mglat]
	}
};
// 转换经度
function transformLng(lng, lat) {
	var 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) {
	var 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
}
 
 
 
 
module.exports = {
	bd09ToGcj02: bd09ToGcj02,
	gcj02ToBd09: gcj02ToBd09,
	wgs84ToGcj02: wgs84ToGcj02,
	gcj02ToWgs84: gcj02ToWgs84
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要在Vue项目中使用百度地图获取精准位置,可以按照以下步骤进行: 1. 在index.html文件中引入百度地图API的JS文件,例如: ```html <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的AK"></script> ``` 其中,AK是你在百度地图开发者平台申请的密钥。 2. 在Vue组件中使用百度地图的API,例如: ```vue <template> <div id="map"></div> </template> <script> export default { mounted() { const map = new BMap.Map("map"); // 创建地图实例 const geolocation = new BMap.Geolocation(); // 创建定位对象 geolocation.getCurrentPosition(function(r) { if (this.getStatus() == BMAP_STATUS_SUCCESS) { // 判断定位成功 const point = r.point; // 获取定位点 map.centerAndZoom(point, 15); // 将地图中心移动到定位点,并设置缩放级别 const marker = new BMap.Marker(point); // 创建标注对象 map.addOverlay(marker); // 将标注添加到地图中 } }, {enableHighAccuracy: true}); // 启用高精度定位 } } </script> <style> #map { height: 500px; } </style> ``` 其中,BMap是百度地图的命名空间,Geolocation是定位对象,getCurrentPosition是获取当前位置的方法,BMAP_STATUS_SUCCESS是定位成功的状态码。在获取定位成功后,可以将地图中心移动到定位点,并在地图上添加一个标注。需要注意的是,为了提高定位精度,可以在getCurrentPosition方法的第二个参数中设置enableHighAccuracy为true。 以上就是在Vue项目中使用百度地图获取精准位置的方法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RedEric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值