欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序 - 獲取用戶地理位置、地址解析及逆地址解析 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 小程序相關(guān) >

微信小程序 - 獲取用戶地理位置、地址解析及逆地址解析

發(fā)表時(shí)間:2021-1-5

發(fā)布人:葵宇科技

瀏覽次數(shù):147

需求背景

小程序需要用戶授權(quán)獲取用戶位置,獲取到經(jīng)緯度請(qǐng)求數(shù)據(jù)列表并解析為城市地址,用戶選擇城市時(shí)把城市解析為經(jīng)緯度。

代碼實(shí)現(xiàn)(項(xiàng)目基于 Taro+react )

1.獲取用戶授權(quán) (微信小程序文檔-指南-開放能力-用戶信息-授權(quán))

小程序授權(quán)類接口調(diào)用時(shí):

  1. 如果用戶未接受或拒絕過此權(quán)限,會(huì)彈窗詢問。

  2. 如果用戶已授權(quán),可直接調(diào)用接口。

  3. 如果用戶已拒絕授權(quán),則不會(huì)出現(xiàn)彈窗,而是直接進(jìn)入接口fail回調(diào)。

    export default {
    pages: [
      'pages/index/index',
    ],
    permission: {
      "scope.userLocation": {
        "desc": "是否允許獲取你當(dāng)前的地理位置信息?"
      }
    },
    }
    
    復(fù)制代碼

    效果:

2.獲取用戶位置經(jīng)緯度

api介紹:

  • wx.getSetting(): 獲取用戶當(dāng)前的授權(quán)狀態(tài)

  • wx.getLocation(): 獲取當(dāng)前的地理位置、速度。當(dāng)用戶離開小程序后,此接口無法調(diào)用。

    // 判斷用戶當(dāng)前授權(quán)狀態(tài)
    getCurrentLocation = () => {
       const vm = this;
       // 判斷用戶是否授權(quán)獲取地理位置
       wx.getSetting({
         success: (res) => {
           // res.authSetting['scope.userLocation'] == undefined    表示 初始化進(jìn)入該頁面
           // res.authSetting['scope.userLocation'] == false    表示 非初始化進(jìn)入該頁面,且未授權(quán)
           // res.authSetting['scope.userLocation'] == true    表示 地理位置授權(quán)
           if (
             res.authSetting["scope.userLocation"] != undefined &&
             res.authSetting["scope.userLocation"] == false
           ) {
             // 非第一次進(jìn)入頁面且未授權(quán),可根據(jù)需求在此處做操作
             
           } else {
            // 獲取用戶位置經(jīng)緯度
             vm.getLocation();
           }
         },
       })
     }
     // 獲取用戶位置
     getLocation() {
       const that = this;
       wx.getLocation({
         type: "gcj02",
         success(res) {
         // res包含用戶位置經(jīng)緯度、speed等
           const latitude = res.latitude;
           const longitude = res.longitude;
           that.setState({
             latitude,
             longitude,
           });
         },
         fail(res) {
           // 用戶未給定位權(quán)限,打開城市選擇器
           // 實(shí)踐中發(fā)現(xiàn)安卓和蘋果此處錯(cuò)誤信息不同
           if (
             res.errMsg == "getLocation:fail auth deny" ||
             res.errMsg == "getLocation:fail:auth denied"
           ) {
              that.setState({
               areaOpened: true,
             });
           }
         },
       });
     }
    復(fù)制代碼

    3.將獲取經(jīng)緯度信息解析為具體城市地址

    借助騰訊地圖逆地址解析接口,申請(qǐng)一個(gè)騰訊地圖的key,傳入經(jīng)緯度即可。

    var accessKey = 'xxxxx自己申請(qǐng)一個(gè)騰訊地圖的key'
    var qqMapApi =
             "https://apis.map.qq.com/ws/geocoder/v1/" +
             "?location=" +
             latitude +
             "," +
             longitude +
             "&key=" +
             accessKey +
             "&get_poi=1";
    wx.request({
         url: qqMapApi,
         header: {
           "Content-Type": "application/json",
         },
         data: {},
         method: "GET",
         success: (res) => {
           if (res.statusCode == 200 && res.data.status == 0) {
             // 從返回值中提取需要的業(yè)務(wù)地理信息數(shù)據(jù) 國家、省、市、縣區(qū)、街
             that.setAddress(res.data.result.address_component);
           }
         },
         fail: () => {
           wx.showToast({
             title: "地址解析失敗",
             icon: "none",
           })
         },
       })
    復(fù)制代碼

    4.用戶選擇城市時(shí)需要將城市解析為經(jīng)緯度

    借助騰訊地圖地址解析接口

    var accessKey = 'xxxxx自己申請(qǐng)一個(gè)騰訊地圖的key'
    var qqMapApi =
          "https://apis.map.qq.com/ws/geocoder/v1/?address=" +
          provinceName +
          cityName +
          countyName +
          "&key=" +
          accessKey;
    wx.request({
        url: qqMapApi,
        header: {
          "Content-Type": "application/json",
        },
        data: {},
        method: "GET",
        success: (res) => {
          if (res.statusCode == 200 && res.data.status == 0) {
            that.setState({
              longitude: res.data.result.location.lng,
              latitude: res.data.result.location.lat,
            });
          }
        },
        fail: (res) => {
          wx.hideToast();
          wx.showToast({
            title: "地址解析失敗",
            icon: "none",
          });
        },
      });
    復(fù)制代碼

    5.用戶拒絕授權(quán)后,手動(dòng)打開設(shè)置授權(quán)界面

    用戶可以在小程序設(shè)置界面(「右上角」 - 「關(guān)于」 - 「右上角」 - 「設(shè)置」)中控制對(duì)該小程序的授權(quán)狀態(tài)。

    開發(fā)者可以調(diào)用 wx.openSetting 打開設(shè)置界面,引導(dǎo)用戶開啟授權(quán)。

    wx.openSetting({
        success(res) {
          if (res.authSetting["scope.userLocation"]) {
            // 已授權(quán)
          } else {
            // 未授權(quán)
          }
        },
      });
    復(fù)制代碼

    調(diào)用后可打開:


作者:元?dú)馍倥⒄?br>來源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

相關(guān)案例查看更多