在添加了相应平台Key和配置了manifest.json文件后,即可开始使用相应Api来获取位置、解析位置和逆解析坐标等操作了。
Uniapp中,常用的与位置有关的API有uni.getLocation(),uni.chooseLocation(),uni.onLocationChange()等。在本文章中,将以uni.chooseLocationAPI作为范例,实现一个快递地址的添加和编辑功能。
选择地址
画出前端界面
这里因为我需要获取行政区编码和经纬度数据,所以采取的是只允许点击右边选择地址按钮进行选择,输入框是禁用输入的。这里主要功能就是获取经纬度,然后调用高德的逆坐标解析接口,获取更多的位置信息。(当然,这里实际是根据业务需求来的,如果uni.chooseLocation返回的数据够用就可以不用再次调用解析坐标了)
// 打开选择地址-获取地址的经纬度信息
uni.chooseLocation({
success: res => {
this.latitude = res.latitude; //纬度
this.longitude = res.longitude; //经度
this.getLocationInfo();
},
fail: err => {
console.log(err);
}
});
地理坐标解析
拿到地址的经纬度坐标后,即可调用高德的逆解析坐标API了。
**注意:**逆解析是需要配置高德WEB服务key的,即服务平台为【WEB服务】的Key
逆解析坐标API请求:
// 根据经纬度逆解析坐标信息
let map_key = '0c7c70xxxxxxx07aeb9f2f221c49180' // 高德WEB服务Key
async getLocationInfo() {
this.chooseAddress = '定位中...';
const [error, res] = await uni.request({
url: `https://restapi.amap.com/v3/geocode/regeolocation=${this.longitude},${this.latitude}&key=${map_key}`
});
if (res.data.status === '1') {
const addressComponent = res.data.regeocode.addressComponent;
this.chooseAddress = res.data.regeocode.formatted_address;
this.model.area_text=`${addressComponent.province}-${addressComponent.city.length ? addressComponent.city : addressComponent.province}-${addressComponent.district}`;
this.model.province_name=`${addressComponent.province}`;
this.model.city_name=`${addressComponent.city.length ? addressComponent.city : addressComponent.province}`;
this.model.area_name=`${addressComponent.district}`;
this.model.address = res.data.regeocode.formatted_address.replace(
`${addressComponent.province}${addressComponent.city}${addressComponent.district}`,'');
} else {
console.log('%c逆地址解析失败,请检查是否在env中配置地图key','color:green;background:yellow');
}
}
关于地理编码解析相关接口的信息,建议直接阅读高德开放平台-地理/逆地理编码文档
到这里已经可以获取到选择的位置的非常详细的信息,这里没有什么难点,有时可能会出现打不开地图或者打开地图没有位置信息等,通常都是高德地图的Key配置的问题,建议多阅读uniapp位置相关文档和检查高德Key的配置。