我有一个本机应用程序,我正在使用react-native-maps
。我想将当前位置发送到firebase,我还想提醒用户当他离当前位置100米时。我怎样才能做到这一点?
附加信息:
提前致谢。
您可以在组件安装时查询用户的当前位置,并继续侦听位置变化,然后计算距离不同位置的距离变化:
componentDidMount() {
this.getLocation(); // Get users current location
}
componentDidUpdate(prevProps, prevState) {
// If prevState changes
if (prevState.newLatitude !== this.state.newLatitude) {
// calculate the distance between initial and new coordinates
this.getDistance();
}
}
componentWillUnmount() {
// Remember to clear all listeners
navigator.geolocation.clearWatch(this.watcher);
}
getLocation() {
navigator.geolocation.getCurrentPosition((position) => {
this.setState({
latitude: position.coords.latitude,
longitude: position.coords.longitude
}, () => {
this.sendToFirebase();
this.watchUserPosition(); //continue listening for location changes
});
},
(error) => {
//Handle error
},
{ enableHighAccuracy: false, timeout: 200000, maximumAge: 1000 },
);
}
watchUserPosition() {
this.watcher = navigator.geolocation.watchPosition(
(position) => {
this.setState({
newLatitude: position.coords.latitude,
newLongitude: position.coords.longitude,
error: null,
});
},
(error) => this.setState({ error: error.message }),
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 1000, distanceFilter: 10 },
);
}
现在,在获得初始经度和纬度后,您可以继续比较从watchUserPosition
获得的新经度和纬度。这相当于将经度和纬度转换为米,并检查以米为单位的初始坐标和以米为单位的新坐标的差异。
为此你可以使用Geolib library
getDistance() {
let initial = {latitude: this.state.latitude, longitude: this.state.longitude};
let newCoord = {latitude: this.state.newLatitude, longitude: this.state.newLongitude};
const distance = geolib.getDistance(initial, newCoord);
if (distance >== 100) {
Alert.alert("Success!", "You have reached 100meters!");
this.sendToFirebase(); // whatever you are saving to firebase
}
}
或者,您可以考虑使用Firebase Geo-Fire