微信小程序实现导航功能(输入地址导航)

146 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

“金秋十月,我要连续30天更文,做劳模,拿手机摄影神器!点击查看活动详情 “即可成功参与

根据输入的地址获取经纬度,实现导航功能

html

    <!--地址描述输入框,示例:北京市海淀区彩和坊路海淀西大街74号-->
    <input v-model="addressValue" style="border:1px solid #000;" name="geocoder">
    <!--提交表单数据-->
    <button form-type="submit" @click="formSubmit">地址解析</button>

js代码

   import { jsonp } from 'vue-jsonp' //下载第三方包并在当前页导入使用,解决调用WebService API跨域问题
   import { wgs84togcj02 } from 'gps-convert'  //将wgs84转gcj02  
   //根据输入的地址导航(根据输入的地址获取经纬度)
    const addressValue = ref('北京市海淀区彩和坊路海淀西大街74号')
    const formSubmit = async () => { 
      jsonp('https://apis.map.qq.com/ws/geocoder/v1/', {
        key: '', //腾讯位置服务申请的key,必填
        address: addressValue.value,  //地址中请包含城市名称,URL编码仅对传入的地址信息(北京市海淀区彩和坊路海淀西大街74号)进行编码
        output: 'jsonp' //跨域
      }).then((res: any) => {
        if (res.status === 0) {
          console.log(res)
          //省 市  区 街道 门牌号
          let address = res.result.province + res.result.city + res.result.district + res.result.street + res.result.street_number
          let name = res.result.title  //最终用于坐标解析的地址或地点名称
          let lat = res.result.location.lat  //纬度 解析到的坐标(GCJ02坐标系)
          let lng = res.result.location.lng  //经度 解析到的坐标(GCJ02坐标系)
          let url_ticket = ''
          url_ticket = window.location.href.split('#')[0]
          getSignature({ url: encodeURIComponent(url_ticket) }).then((res: any) => {
            wx.config({
              beta: true,
              debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
              appId: '', // 必填,公众号的唯一标识
              timestamp: res.result.timestamp, // 必填,生成签名的时间戳
              nonceStr: res.result.nonceStr, // 必填,生成签名的随机串
              signature: res.result.signature,// 必填,签名
              jsApiList: ['openLocation'] // 必填,需要使用的JS接口列表   
            });
            wx.ready(() => {
              //导航去到经纬度的地方
              const newArr = wgs84togcj02([lat, lng])  //将wgs84转gcj02    
              // alert(newArr)
              wx.openLocation({
                latitude: newArr[0],// 纬度,浮点数,范围为90 ~ -90
                longitude: newArr[1],// 经度,浮点数,范围为180 ~ -180。
                scale: 18,// 地图缩放级别,整形值,范围从1~28。默认为最大 
                address, // 地址:要去的地点详细描述
                name,//要找的地方名字
              })
            })
            wx.error((err: any) => {
              throw new Error(err)
            })
          })
        } else {
          Toast.fail(res.message);
        }
      })
    }

根据详细地址获取经纬度,腾讯位置服务为微信小程序提供了方法,需要去官网申请开发者的key,详细过程请看官网:lbs.qq.com/miniProgram…

image.png

WebService API / 开发指南 / 地址解析(地址转坐标),详细说明请看官网

lbs.qq.com/service/web…

调用WebService api会出现跨域问题,使用vue-jsonp包可解决跨域问题,具体方法看官网

www.npmjs.com/package/vue…