// 页面中使用
export default {
data() {
return {
addressInfo: null
}
},
methods: {
/**
* 获取当前位置详细地址
* @returns {Promise} 返回地址信息
*/
const getLocation = () => {
return new Promise((resolve, reject) => {
uni.getLocation({
type: 'gcj02', // 使用高德地图坐标系
success: async (res) => {
try {
const address = await this.getAddressInfo(res.longitude, res.latitude);
resolve(address);
} catch (error) {
reject(error);
}
},
fail: (err) => {
reject(err);
}
});
});
},
/**
* 根据经纬度获取详细地址
* @param {number} longitude - 经度
* @param {number} latitude - 纬度
* @returns {Promise} 返回地址详情
*/
const getAddressInfo = (longitude, latitude) => {
return new Promise((resolve, reject) => {
uni.request({
url: 'https://restapi.amap.com/v3/geocode/regeo',
method: 'GET',
data: {
key: '你的高德地图Key',
location: `${longitude},${latitude}`,
extensions: 'all',
output: 'json'
},
success: (res) => {
if (res.data.status === '1') {
resolve(res.data.regeocode);
} else {
reject(new Error('获取地址信息失败'));
}
},
fail: (err) => {
reject(err);
}
});
});
},
async getAddress() {
try {
uni.showLoading({
title: '获取位置中...'
});
const address = await this.getLocation();
this.addressInfo = {
formatted_address: address.formatted_address, // 完整地址
province: address.addressComponent.province, // 省份
city: address.addressComponent.city, // 城市
district: address.addressComponent.district, // 区县
street: address.addressComponent.street, // 街道
streetNumber: address.addressComponent.streetNumber, // 门牌号
township: address.addressComponent.township, // 乡镇
pois: address.pois // 周边兴趣点
};
uni.hideLoading();
} catch (error) {
uni.hideLoading();
uni.showToast({
title: '获取位置失败',
icon: 'none'
});
console.error(error);
}
}
}
}
配置说明:
1,manifest.json配置:
{
"permission": {
"scope.userLocation": {
"desc": "您的位置信息将用于获取当前位置"
}
}
}
2,微信小程序配置(app.json):
{
"permission": {
"scope.userLocation": {
"desc": "您的位置信息将用于获取当前位置"
}
}
}
3,高德开放平台配置:
// 需要在高德开放平台申请的配置信息
const config = {
key: '你的key',
securityJsCode: '你的安全密钥' // 如果需要的话
}
如果看完后对您有所启发,麻烦您点赞收藏!!!