百度BD09加密经纬度转国测局GCJ02经纬度

正在做的一个微信公众号的项目要求根据用户输入的地址获取经纬度, 并导航到指定位置, 之前头脑一热用了百度的API做定位, 现在要做导航需要调用微信的SDK, 发现百度获取的经纬度是加密过的BD09格式, 需要转换成国测局GCJ02标准, 试着用了百度给的转换API, 发现需要解决跨域问题, 平时族头疼的就是跨域问题, 果断放弃, 这才有了下面这个方法.

先是微信SDK获取用户自己的位置

wx.getLocation({
        type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
        success: function (res) {}
      });

然后是获取导航位置

function getShopLocation() {
        var map = new BMap.Map("container");
        map.centerAndZoom('黑龙江省哈尔滨市南岗区'); // 获取用户录入的地区
        var localSearch = new BMap.LocalSearch(map);
        localSearch.setSearchCompleteCallback(function (searchResult) {
          var poi = searchResult.getPoi(0);
          console.log('BD09: ' + poi.point.lng); // 经度
          console.log('BD09: ' + poi.point.lat); // 纬度
        });
        localSearch.search('黑龙江省哈尔滨市南岗区学府路哈尔滨理工大学');
      }

重点来了, 坐标转换

function bMapTransWXMap(lng, lat) {
        let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        let x = lng - 0.0065;
        let y = lat - 0.006;
        let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
        let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
        let lngs = z * Math.cos(theta);
        let lats = z * Math.sin(theta);

        console.log('GCJ02-----' + lngs)
        console.log('GCJ02-----' + lats)
      }

这里转换出来的坐标就是火星坐标了

最后就是调起导航了

function navigation(latitude, longitude) {
        wx.openLocation({
          latitude: latitude, // 纬度,浮点数,范围为90 ~ -90
          longitude: longitude, // 经度,浮点数,范围为180 ~ -180。
          name: '哈尔滨理工大学西区', // 位置名
          address: '黑龙江省哈尔滨市南岗区学府路哈尔滨理工大学', // 地址详情说明
          scale: 21, // 地图缩放级别,整形值,范围从1~28。默认为最大
          // infoUrl: 'https://www.baidu.com/' // 在查看位置界面底部显示的超链接,可点击跳转
        });
      }

到此为止导航功能就实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值