reactnative 获取定位_【React Native】定位获取经纬度,当前城市等地址信息
最近做React Native時,需要用到城市定位的功能,React Native中文網的定位部分中也提供了相應的方法。主要用到的方法有:
這里只需要獲取到經緯度,城市等信息,持續監聽的函數就不需要了。這里使用 getCurrentPosition 方法獲取當前位置信息,再用逆地址解析服務完成地址獲取。
獲取經緯度城市地址信息完整步驟如下:
1. 導入Geolocation
import Geolocation from 'Geolocation';
2.調用 getCurrentPosition 方法得到經緯度
這里將這個操作封裝成一個方法,并返回Promise。
//獲取經緯度的方法 Longitude Latitude
let getLongitudeAndLatitude = () => {
//獲取位置再得到城市先后順序,通過Promise完成
return new Promise((resolve, reject) => {
Geolocation.getCurrentPosition(
location => {
//可以獲取到的數據
var result = "速度:" + location.coords.speed +
"\n經度:" + location.coords.longitude +
"\n緯度:" + location.coords.latitude +
"\n準確度:" + location.coords.accuracy +
"\n行進方向:" + location.coords.heading +
"\n海拔:" + location.coords.altitude +
"\n海拔準確度:" + location.coords.altitudeAccuracy +
"\n時間戳:" + location.timestamp;
// ToastAndroid.show("UTIl" + location.coords.longitude, ToastAndroid.SHORT);
resolve([location.coords.longitude, location.coords.latitude]);
},
error => {
// Alert.alert("獲取位置失敗:" + error, "")
reject(error);
}
);
})
}
經緯度,海拔等信息的獲取方式就是以 location.coords.longitude,location.coords.latitude ,location.coords.altitudeAccuracy的方式得到。
如果只是需要獲取經緯度,這里已經完成。可以通過setState或者賦值給全局變量等方式記錄。
為了進一步獲取城市,這里Promise將經緯度組合成一個數組resolve傳遞出去。
3.使用逆地址解析服務將經緯度解析成地址信息
這里可以通過百度地圖或者騰訊位置服務的逆地址解析服務來完成,流程如下:
注冊成為開發者
創建自己的應用
然后獲取key或認證
加上經緯度等參數來發起請求
例如百度地圖的請求方式:
https://api.map.baidu.com/geocoder/v2/?output=json&ak=9a9a9a9a9a9a9a9a9a9a9a9a9a&location=39.206526,116.909158
(9a9a…就是你申請的ak認證,對應在你創建的應用中)
通過Postman 測試請求的效果如下:
這里需要將 location 經緯度參數替換為自己通過 getCurrentPosition 方法獲取到的經緯度。也就是先獲取到經緯度,再通過逆地址解析獲取到城市等地址信息。將這個操作再封裝成一個方法:
getCityLocation() {
return new Promise((resolve, reject) => {
getLongitudeAndLatitude()
//獲取經緯度的方法返回的是經緯度組成的數組
.then((locationArr) => {
// Alert.alert("", "" + locationArr[1]);
let longitude = locationArr[0];
let latitude = locationArr[1];
this.getNetData(BaiduMap_URL + latitude + "," + longitude)
.then((data) => {
if (data.status == 0) {
resolve(data);
} else {
reject(ErrorDeal.getError(data.code));
}
}).catch((data) => {
reject(ErrorDeal.getError(data.code));
})
}).catch((data) => {
reject(ErrorDeal.getError(data.code));
})
})
}
getLongitudeAndLatitude 就是上面的獲取經緯度的方法,this.getNetData是一個fetch 請求的封裝。拼接請求 Url,fetch請求,此時 resolve 的數據就是 Postman 解析的 json 數據了。
//獲取網絡數據
getNetData(url) {
return new Promise((resolve, reject) => {
fetch(url).then((response) => response.json())
.then((responseData) => {
resolve(responseData);
})
.catch((error) => {
reject(ErrorDeal.getError(NetWork_Error))
})
.done()
})
}
4.獲取信息并處理
上面 getCityLocation 返回的 Promise 中 resolve 傳遞的 data 就是 json 數據了,就已經可以因自身需求進行數據處理顯示的操作了。
this.getCityLocation()
.then((data) => {
// Alert.alert("位置?", "" + JSON.stringify(data));
this._confirmCity(data);
})
.catch((error) => {
//ToastAndroid.show("失敗" + JSON.stringify(error), ToastAndroid.SHORT);
});
調用 getCityLocation,再 then 方法處理處理 data ,此時的 data 是一個 json 對象。
例如我的處理是調用 _confirmCity 方法彈出一個城市切換的確認框:
//彈出定位框
_confirmCity(data) {
let address = data.result.addressComponent;
if (address!="") {
Alert.alert("城市定位", "\n當前城市為" + address.province + address.city + "\n \n 是否設為當前城市?\n",
[
{
text: "設為當前城市", onPress: () => {
this.setCurrentCity(address.city)
}
},
{text: "取消"}
]
)
}
}
效果圖:
這里就已經完成了經緯度的獲取,城市地址信息的獲取功能。
總結
以上是生活随笔為你收集整理的reactnative 获取定位_【React Native】定位获取经纬度,当前城市等地址信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easycode不推荐使用_为什么?my
- 下一篇: 不使用自带函数求区域的周长_Excel表