一、開通騰訊位置服務
在這里我們先要登錄騰訊我i之服務的官網開通位置服務 騰訊位置服務官網
點擊進入控制台,創建應用並創建key,並將填寫微信小程序ID
進入微信公眾平台將請求域名設為合法域名
下載 微信小程序 JavaScript SDK 並在項目中創建lib目錄,將SDK文件放入該目錄
二、編碼實現
(一)獲取定位坐標
微信小程序提供定位接口,我們只需要調用方法即可。uni-app框架的uni對象里面也封裝了定位的方法
1.uni.getLocation(Object)
Object參數說明
參數名 | 類型 | 必填 | 說明 | 平台差異說明 |
---|---|---|---|---|
type | String | 否 | 默認為wgs84返回gps坐標 | |
altitude | Boolean | 否 | 傳入true會返回高度信息,由於獲取高度需要較高精確度,會減慢接口返回速度 | App和字節跳動 |
geocode | Boolean | 否 | 默認false,是否解析地址信息 | 僅App平台支持 |
success | Function | 是 | 接口調用成功的回調函授,返回內容詳見參數返回說明 | |
fail | Function | 否 | 接口調用失敗的回調函數,返回內容詳見返回參數 | |
complete | Function | 否 | 接口調用結束的回調函數(調用成功,失敗都會執行) |
success返回參數說明
參數 | 說明 |
---|---|
latitude | 緯度,浮點數,范圍為-90-90,負數表示南緯 |
longitude | 經度,浮點數,范圍為-180-180,負數表示西經 |
speed | 速度,浮點數,單位m/s |
accutracy | 位置的精確度 |
altitude | 高度,單位m |
verticalAccuracy | 垂直精度,單位 m(Android無法獲取,返回 0) |
horizontalAccuracy | 水平精度,單位m |
address | 地址信息(僅App端支持,需配置geocode為true) |
address地址信息說明
屬性 | 類型 | 描述 |
---|---|---|
country | String | 國家 |
province | String | 省份名稱 |
city | String | 城市名稱 |
district | String | 區(縣)名稱 |
street | String | 街道信息 |
streetNum | String | 街道門牌號 |
poiName | String | POI信息 |
postalCode | String | 郵政編碼 |
cityCode | String | 城市代碼 |
示例:
uni.getLocation({
type: 'wgs84',
success: function (res) {
console.log('當前位置的經度:' + res.longitude);
console.log('當前位置的緯度:' + res.latitude);
}
});
(二)、在項目中使用
1. 先要開啟位置權限,我使用的HBuilder X 2.9.8版本
如不開啟就獲取不到經緯度
2. 首先要獲取用戶簽到時的地理位置(經度、緯度)
uni.showLoading({
title: '簽到中請稍后'
});
setTimeout(function() {
uni.hideLoading();
}, 30000);
//獲取地理定位
uni.getLocation({
type: 'wgs84',
success: function(resp) {
let latitude = resp.latitude;
let longitude = resp.longitude;
}
})
3. 根據定位坐標,換算成真實的地址,先引用騰訊位置的SDK文件
var QQMapWX = require('../../lib/qqmap-wx-jssdk.min.js');
var qqmapsdk;
4.使用onLoad生命周期函數,對qqmapsdk對象進行初始化
onLoad: function() {
qqmapsdk = new QQMapWX({
key: '這里填寫你生成的key'
});
},
如下圖:
請求接口進行置換
qqmapsdk.reverseGeocoder({
location: {
latitude: latitude,
longitude: longitude
},
success: function(resp) {
// console.log(resp.result);
let address = resp.result.address;
let addressComponent = resp.result.address_component;
let nation = addressComponent.nation;
let province = addressComponent.province;
let city = addressComponent.city;
let district = addressComponent.district;
}
})