微信小程序精准定位百度

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

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
}


目录
相关文章
|
3月前
|
小程序 定位技术 Android开发
小程序质量提升丨定位问题解决方案(错误码11)
小程序质量提升丨定位问题解决方案(错误码11)
72 6
|
移动开发 小程序 JavaScript
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
196 1
|
10月前
|
小程序 JavaScript
微信小程序多点定位marker标点polyline连线
微信小程序多点定位marker标点polyline连线
118 0
|
11月前
|
小程序
uniapp小程序定位 配置permission失败问题
uniapp小程序定位 配置permission失败问题
|
移动开发 小程序 前端开发
浅谈微信小程序的功能定位和使用场景
浅谈微信小程序的功能定位和使用场景
304 0
|
小程序 JavaScript 前端开发
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
490 0
|
小程序 前端开发 容器
小程序布局中相对定位的用法
小程序布局中相对定位的用法
|
JavaScript 小程序 定位技术
uniApp微信小程序之——获取腾讯地图的定位功能以及解决uni-app提示getLocation 需要在app.json中生命permission字段的方法
获取腾讯地图的定位功能以及解决uni-app提示getLocation 需要在app.json中生命permission字段的方法
611 0
|
安全 Android开发
仿微信通讯录滑动定位ListView功能(二)
仿微信通讯录滑动定位ListView功能(二)
118 0
仿微信通讯录滑动定位ListView功能(二)
|
1天前
|
小程序
微信小程序开发---购物商城系统。【详细业务需求描述+实现效果】
这篇文章详细介绍了作者开发的微信小程序购物商城系统,包括功能列表、项目结构、具体页面展示和部分源码,涵盖了从首页、商品分类、商品列表、商品详情、购物车、支付、订单查询、个人中心到商品收藏和意见反馈等多个页面的实现效果和业务需求描述。
微信小程序开发---购物商城系统。【详细业务需求描述+实现效果】