微信小程序(定位)

實現(xiàn)微信小程序定位并不難,但是如果第一次接觸的話還是很懵,這里就記錄一下,方便自己復習或大家借鑒吧!

首先重點有兩條:

  1. 通過微信小程序api: wx.getLocation(Object object)獲取當前所在的經(jīng)緯度; 小程序api詳情
  2. 通過騰訊地圖開放平臺逆地址解析獲取的經(jīng)緯度,獲取真實地標名稱;騰訊地圖平臺

具體操作:
(騰訊地圖方面的操作)

  1. 注冊騰訊地圖開放平臺:


    image.png
  2. 申請開發(fā)者密鑰(Key):申請密鑰
    成功后會返回一串key,這個key后面會用到
  3. 控制臺 -> key管理 -> 設置(使用該功能的key)-> 勾選webserviceAPI -> 保存


    申請的key可以在這里查看

    小程序的話一定要勾選這兩個

    (微信平臺方面的操作)

  4. 配置安全域名 微信公眾平臺
    . 微信公眾平臺登錄你的小程序->開發(fā)->開發(fā)設置->服務器域名->將https://apis.map.qq.com填入request合法域名
    image.png
  5. 下載小程序sdk(復制鏈接打開新標簽頁即可下載) http://3gimg.qq.com/lightmap/xcx/jssdk/qqmap-wx-jssdk1.2.zip
  6. 解析壓縮文件夾,放入小程序項目文件內,也可以有規(guī)劃的新建一個文件夾專門存放此類文件,我放在新建的libs內的
  7. 使用:
//app.json文件
//這是因為開發(fā)者需要填寫獲取用戶地理位置的用途說明鸟缕。不配置的話會提示需要申明
 {
 "permission": {
    "scope.userLocation": {
        "desc": "你的位置信息將用于小程序位置接口的效果展示"
    }
}
}
//在需要使用的頁面引入:
let QQMapWX = require('./libs/qqmap-wx-jssdk')
let qqmapsdk;

  getLocation() {
        qqmapsdk = new QQMapWX({
            key: 'CBAJ-DUD-EURJ-JFFJD' //之前在騰訊平臺申請到的key
        })

        wx.getLocation({ //獲取定位地址經(jīng)緯度
            type: 'wgs84',
            success(res) {
                const latitude = res.latitude
                const longitude = res.longitude
                const speed = res.speed
                const accuracy = res.accuracy

                qqmapsdk.reverseGeocoder({ //SDK調用
                    location: {
                        latitude,
                        longitude
                    },
                    success: (res) => {
          //success方法指向閉包,所以this屬于閉包,所以在success回調函數(shù)里是不能直接使用this.setData()的  
         //可以通過外面將this賦值給其它變量,也可通過promise二次封裝,避免回調地獄
                        console.log(res)
                    }
                })
            }
        })
    }

我的完整實現(xiàn):

let QQMapWX = require('./libs/qqmap-wx-jssdk')
let qqmapsdk;

Page({
    data: {
        location: '定位我...', //顯示定位的數(shù)據(jù)
    },
    async onShow(options) { //實現(xiàn)頁面顯示有授權則獲取地標,沒授權,只能通過用戶點擊獲取按鈕來獲取
        let res = await wxAuthorize()
        if (res) {
            this.getLocation()
        } else {
            this.setData({
                location: '定位我...' 
            })
        }
    },
    
    async getLocation() {
        qqmapsdk = new QQMapWX({
            key: 'CBAJ-DUD-EURJ-JFFJD'
        })
        const res = await new Promise((resolve) => {
            wx.getLocation({ //獲取地址經(jīng)緯度
                type: 'wgs84',
                success(res) {
                    resolve(res);
                }
            })
        })
        const latitude = res.latitude
        const longitude = res.longitude

        const res2 = await new Promise(resolve => {
            qqmapsdk.reverseGeocoder({ //SDK調用這里只需要具體到城市,所以這兩個就夠,具體可根據(jù)業(yè)務需求獲取
                location: {
                    latitude,
                    longitude
                },
                success: (res) => {
                    resolve(res) 
                }
            })
        })
        this.setData({
            location: res2.result.ad_info.city 
        })
    },

    async getData() {
        const isAuth = await wxAuthorize();
        if (isAuth) {
            this.getLocation()
        } else {
            wx.showModal({
                title: '請授權當前位置',
                content: '需要獲取您的地理位置,請授權!!!',
                showCancel: true,
                confirmText: '去授權',
                success: function (res) {
                    if (res.confirm) {
                        wx.openSetting({
                            success(res) {
                                console.log(res.authSetting, res, "答應授權")
                                this.getLocation()
                            }
                        })
                    }
                }
            });
        }
    },

//工具函數(shù),封裝的Promise,判斷是否授權,可以避免回調地獄
async function wxAuthorize(scope = 'scope.userLocation') {
  return new Promise(resolve => {
    wx.authorize({
      scope,//發(fā)起定位授權
      success: ()=> {
        console.log('有定位授權')
        //授權成功排抬,此處調用獲取定位函數(shù)
        resolve(true)
        },
      fail(){
        console.log("沒有同意授權定位")
        resolve(false)
      }
    })
  })
}

})
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末懂从,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹲蒲,更是在濱河造成了極大的恐慌番甩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件届搁,死亡現(xiàn)場離奇詭異对室,居然都是意外死亡,警方通過查閱死者的電腦和手機咖祭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔫骂,“玉大人么翰,你說我怎么就攤上這事×尚” “怎么了浩嫌?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我肾扰,道長檀夹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任骚腥,我火速辦了婚禮敦间,結果婚禮上,老公的妹妹穿的比我還像新娘束铭。我一直安慰自己廓块,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布契沫。 她就那樣靜靜地躺著带猴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懈万。 梳的紋絲不亂的頭發(fā)上拴清,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音会通,去河邊找鬼口予。 笑死,一個胖子當著我的面吹牛渴语,可吹牛的內容都是我干的苹威。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驾凶,長吁一口氣:“原來是場噩夢啊……” “哼牙甫!你這毒婦竟也來了?” 一聲冷哼從身側響起调违,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窟哺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后技肩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體且轨,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年虚婿,在試婚紗的時候發(fā)現(xiàn)自己被綠了旋奢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡然痊,死狀恐怖至朗,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情剧浸,我是刑警寧澤锹引,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布矗钟,位于F島的核電站,受9級特大地震影響嫌变,放射性物質發(fā)生泄漏吨艇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一腾啥、第九天 我趴在偏房一處隱蔽的房頂上張望东涡。 院中可真熱鬧,春花似錦碑宴、人聲如沸软啼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祸挪。三九已至,卻和暖如春贞间,著一層夾襖步出監(jiān)牢的瞬間贿条,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工增热, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留整以,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓峻仇,卻偏偏與公主長得像公黑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摄咆,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容