访问当前位置并将其发送到firebase

问题描述 投票:0回答:1

我有一个本机应用程序,我正在使用react-native-maps。我想将当前位置发送到firebase,我还想提醒用户当他离当前位置100米时。我怎样才能做到这一点?

附加信息:

  • React Native版本“0.57.5”
  • react-native-firebase“^ 5.2.3”
  • react-native-maps“^ 0.22.1”

提前致谢。

firebase react-native react-native-maps react-native-firebase
1个回答
1
投票

您可以在组件安装时查询用户的当前位置,并继续侦听位置变化,然后计算距离不同位置的距离变化:

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

© www.soinside.com 2019 - 2024. All rights reserved.