我有一个我正在使用的本机应用程序react-native-maps。我想将当前位置发送到 firebase,并且我想在用户从当前位置超过 100 米时提醒他。我怎样才能做到这一点?
附加信息:
- React Native 版本“0.57.5”
- 反应原生火力基地“^5.2.3”
- 反应原生地图“^0.22.1”
提前致谢。
我有一个我正在使用的本机应用程序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 库
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