微信小程式獲取手機定位+經緯度轉詳細地址

时光独醒發表於2024-05-15

在微信小程式中獲取手機定位資訊

 wx.getLocation({
            type: 'wgs84',
            success(res) {
                // console.log(res)
                const latitude = res.latitude
                const longitude = res.longitude
                if (flag) {
                    getMinKey(_this, latitude, longitude, callback, errback)
                }
            },
            fail(res) {
                // console.log(res)
                if (res.errCode == 2) {
                    common.getToast('請開啟手機定位授權');
                }
            },
        })

官方文件給出的wx.getLocation只能獲取到當前位置的經緯度,沒有給出當前位置的具體資訊,這時需要將經緯度轉換為詳細地址。

騰訊位置服務為微信小程式提供了基礎的標點能力、線和圓的繪製介面等地圖元件和位置展示、地圖選點等地圖API位置服務能力支援,使得開發者可以自由地實現自己的微信小程式產品。

配置可參考:https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview

使用:

location-address.js

//獲取定位地址,透過經緯度轉成詳細地址
const app = getApp();
const common = require('./common.js');
const dataMainModule = require('./main.js');
// 引入SDK核心類,js檔案根據自己業務,位置可自行放置
const QQMapWX = require('./qqmap-wx-jssdk.min.js');
let isWaitTenSeconds = false; //等待10秒如果定位異常置為true
let addrNum = 0;
/**
 * 獲取當前定位資訊
 * @param flag  是否返回經緯度轉換地址詳細資訊
 * @returns Boolean
 */
const currentLocation = (_this, flag = false, callback, errback) => {
    let that = _this;
    var opt = {
        scope: 'scope.userLocation',
        content: '獲取您的手機定位位置'
    }
    app.getSettingRecord(opt).then((data) => {
        wx.getLocation({
            type: 'wgs84',
            success(res) {
                // console.log(res)
                const latitude = res.latitude
                const longitude = res.longitude
                if (flag) {
                    getMinKey(_this, latitude, longitude, callback, errback)
                }
            },
            fail(res) {
                // console.log(res)
                if (res.errCode == 2) {
                    common.getToast('請開啟手機定位授權');
                }
            },
        })
    })
}

/**
 * 經緯度轉換成詳細地址
 * @param _this  頁面作用域
 * @param latitude  經度
 * @param longitude  緯度
 * @returns Boolean
 */
const getMinKey = (_this, latitude, longitude, callback, errback) => {
    let that = _this;
    //var key = '7IABZ-XBRRT-C4OXJ-VG2LS-EOBG5-4JFG4';        
    dataMainModule.getMinKey({
        type: 1
    }, (res) => {
        // console.log('獲取定位key', res)
        if (res.retCode == 200 && res.mapKey) {
            var mapKey = res.mapKey,
                retryCount = res.retryCount;
            mapKey = mapKey.replace(/^"|"$/g, '');
            var qqmapsdk = new QQMapWX({
                key: mapKey
            });
            var params = {
                latitude: latitude,
                longitude: longitude
            };
            qqmapsdk.reverseGeocoder({
                location: params,
                success: function (res1) {
                    // console.log(res1);
                    if (res1) {
                        addrNum = 0;
                        isWaitTenSeconds = false;
                        if (callback) {
                            callback(res1.result)
                        }
                    }
                },
                fail: function (res) {
                    // console.log(res);
                    addrNum++;
                    common.log.warn("獲取定位地址失敗", JSON.stringify({
                        errMsg: JSON.stringify(res),
                        mapKey: mapKey
                    }));
                    common.log.setFilterMsg("getMinKey");
                    //按後臺返回次數嘗試重新獲取
                    if (addrNum <= retryCount) {
                        setTimeout(() => {
                            getMinKey(_this, latitude, longitude, callback, errback)
                        }, 2000)
                    }
                    if (errback) {
                        errback(res)
                    }
                }
            })
        } else {
            // wx.removeStorageSync('zbg_standard_Address');
            if (errback) {
                errback(res)
            }
        }
    }, (res) => {
        // console.log(res)
        //common.getToast(res);
        setTimeout(() => {
            isWaitTenSeconds = true
        }, 15000)
        if (errback) {
            errback(res)
        }
    })
}

module.exports = {
    currentLocation,
    getMinKey
}

頁面使用:

getmobileSeat() { //獲取手機定位位置
        let that =this;
        locationAddress.currentLocation(this, true,(res)=>{
            if(res){
                var address = res.formatted_addresses?.recommend;
                console.log(address)
                that.setData({
                    mobileSeat:address
                })
            }
        });
    },

經緯度轉換詳細地址資料

相關文章