微信小程序精准定位百度

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

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
}


目录
相关文章
|
7月前
|
JSON 监控 小程序
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
650 14
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
|
移动开发 小程序 JavaScript
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
461 1
|
小程序 定位技术 Android开发
小程序质量提升丨定位问题解决方案(错误码11)
小程序质量提升丨定位问题解决方案(错误码11)
352 6
|
小程序 JavaScript
微信小程序多点定位marker标点polyline连线
微信小程序多点定位marker标点polyline连线
334 0
uniapp小程序定位 配置permission失败问题
uniapp小程序定位 配置permission失败问题
|
小程序 JavaScript 前端开发
微信小程序学习实录3(环境部署、百度地图微信小程序、单击更换图标、弹窗信息、导航、支持腾讯百度高德地图调起)
微信小程序学习实录3(环境部署、百度地图微信小程序、单击更换图标、弹窗信息、导航、支持腾讯百度高德地图调起)
1070 0
|
移动开发 小程序 前端开发
浅谈微信小程序的功能定位和使用场景
浅谈微信小程序的功能定位和使用场景
818 0
|
小程序 JavaScript 前端开发
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
1060 0
|
数据采集 移动开发 前端开发
漏刻有时数据可视化大屏数据采集工具(2):百度人脸识别调用微信摄像头ajax上传识别的解决方案
漏刻有时数据可视化大屏数据采集工具(2):百度人脸识别调用微信摄像头ajax上传识别的解决方案
237 0
|
3月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。