uniappにおいてAPP側でuni.getLocationを呼び出すとアドレスが取得できない場合がある問題の解決方法
1. ジオコードを true に設定します。
uni.getLocation({
type: 'wgs84',
geocode:true,//设置该参数为true可直接获取经纬度及城市信息
success: function (res) {
console.log('获取定位信息',res);
},
fail: function (err) {
console.log("获取定位失败",err);
uni.showToast({
title: '获取定位失败',
icon:'none'
});
}
});
通常であれば、この時点で res.address からアドレス情報を取得できます。
【参考ドキュメント】:https://uniapp.dcloud.io/api/location/location?id=getlocation
2. 特殊な状況: geocode が true に設定されていても、住所情報を取得できません。
現時点ではエラーは報告されず、緯度と経度の情報のみを取得できます。返される情報は次のとおりです。
{
"type": "wgs84",
"altitude": 0,
"latitude": 34.806316,
"longitude": 113.685944,
"speed": 0,
"accuracy": 40,
"errMsg": "getLocation:ok"
}
plus.maps.Map.reverseGeocode
このような場合は、次のメソッドを使用してアドレス情報を取得できます。
【参考資料】:https://www.html5plus.org/doc/zh_cn/maps.html#plus.maps.Map.reverseGeocode
// #ifdef APP
uni.getLocation({
type: 'wgs84',
geocode:true,//设置该参数为true可直接获取经纬度及城市信息
success: function (res) {
console.log('获取定位信息',res);
// 创建地图坐标对象
var point = new plus.maps.Point(res.longitude, res.latitude);
//静态方法,反向地理编码
plus.maps.Map.reverseGeocode(point, {
},(event)=>{
var address = event.address; // 转换后的地理位置
var point = event.coord; // 转换后的坐标信息
var coordType = event.coordType; // 转换后的坐标系类型
var reg = /.+?(省|市|自治区|自治州|县|区)/g;
var addressList = address.match(reg).toString().split(",");
//注意 因为存在直辖市, 当所在地区为普通省市时,addressList.length == 3,city = addressList[1];当所在地区为直辖市时addressList.length == 2,city = addressList[0];
let city = addressList.length == 3?addressList[1]:addressList[0];
console.log("addressList",addressList);
},
function(e) {
console.log("失败回调",e);
}
);
},
fail: function (err) {
console.log("获取定位失败",err);
uni.showToast({
title: '获取定位失败',
icon:'none'
});
}
});
// #endif
//なお、市区町村が存在するため、その地域が一般の州または市の場合は、addressList.length == 3, city = addressList[1]、地域が市区町村の場合は、addressList.length == 2, cityとなります。 = addressList[0];
取得した情報はaddressList
以下の通りです。
普通省市:["河南省", "郑州市", "金水区"]
直辖市:["上海市", "浦东新区"]