微信小程序精准定位百度

简介: 微信小程序精准定位百度

1.坐标系介绍


image.png

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文件

1. //输入后台获取的lng、lat返回回显再地图上的坐标位置
2. 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
}


目录
相关文章
|
移动开发 小程序 JavaScript
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
232 1
|
7月前
|
小程序 定位技术 Android开发
小程序质量提升丨定位问题解决方案(错误码11)
小程序质量提升丨定位问题解决方案(错误码11)
116 6
|
小程序 JavaScript
微信小程序多点定位marker标点polyline连线
微信小程序多点定位marker标点polyline连线
170 0
uniapp小程序定位 配置permission失败问题
uniapp小程序定位 配置permission失败问题
|
移动开发 小程序 前端开发
浅谈微信小程序的功能定位和使用场景
浅谈微信小程序的功能定位和使用场景
395 0
|
小程序 JavaScript 前端开发
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
610 0
|
小程序 前端开发 容器
小程序布局中相对定位的用法
小程序布局中相对定位的用法
|
JavaScript 小程序 定位技术
uniApp微信小程序之——获取腾讯地图的定位功能以及解决uni-app提示getLocation 需要在app.json中生命permission字段的方法
获取腾讯地图的定位功能以及解决uni-app提示getLocation 需要在app.json中生命permission字段的方法
663 0
|
安全 Android开发
仿微信通讯录滑动定位ListView功能(二)
仿微信通讯录滑动定位ListView功能(二)
133 0
仿微信通讯录滑动定位ListView功能(二)
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
649 7

热门文章

最新文章