如何在React Native Expo中使用纬度和经度计算两点之间的距离?

3
我正在制作一个小型的react native应用程序,需要计算经度和纬度之间的距离。我已经拥有当前位置的经度和纬度以及目标地点的经度和纬度。我尝试使用geolib,但是在控制台上始终出现错误:“获取距离时出错'[TypeError: undefined is not an object (evaluating' P.default.getDistance ')]”。以上是导致错误的组件。
_getLocationAsync = async () => {

      let location = await Location.getCurrentPositionAsync({});
      const region = {
        latitude: location.coords.latitude,
        longitude: location.coords.longitude
      }
      this.setState({ location, region});
      console.log(this.state.region) 
/* it displays me on console my current position like this : 
                    "Object {
                          "latitude": 36.8386878,
                          "longitude": 10.2405357,
                     }" */

      this._getDistanceAsync(); 

    }
  };

  _getDistanceAsync = async () => {
    try {
      const distance = geolib.getDistance({ latitude: 51.5103, longitude: 
          7.49347 }, this.state.region)
      this.setState({ distance });
      console.log(this.state.distance)
    } catch (error) {
      console.log("error in get distance", error)
    }
  };

一旦我放置了_getDistanceAsync函数,就会出现错误。非常感谢您的任何建议。


实际上这不一样,因为我使用Node作为后端,所以这对我不起作用。 - Soufien JAOUADI
3个回答

8

参考资料

  1. 你需要使用哈弗辛公式来计算距离。
  2. 你也可以查看这个

1
我使用这个包是因为它可以与Node.js一起使用,并且它完美地工作。非常感谢您的帮助。 - Soufien JAOUADI

6

我所做的是哈弗辛公式,它与编程有关:

function computeDistance([prevLat, prevLong], [lat, long]) {
  const prevLatInRad = toRad(prevLat);
  const prevLongInRad = toRad(prevLong);
  const latInRad = toRad(lat);
  const longInRad = toRad(long);

  return (
    // In kilometers
    6377.830272 *
    Math.acos(
      Math.sin(prevLatInRad) * Math.sin(latInRad) +
        Math.cos(prevLatInRad) * Math.cos(latInRad) * Math.cos(longInRad - prevLongInRad),
    )
  );
}

function toRad(angle) {
  return (angle * Math.PI) / 180;
}

这太棒了。与geolib一样工作,但无需安装新包。谢谢! - Saulo M
6377.830272是什么数字? - s-hunter
@s-hunter,我认为这是地球半径。 - PWL

2
如果您需要计算街道和道路之间的距离,可以使用以下库。

https://github.com/bramus/react-native-maps-directions

此库具有回调函数 onReady,其中包含distanceduration时间的返回值。请注意,distance是距离,duration是持续时间。

这个库需要您启用计费帐户,并且它与expo配合使用。 - Ayush Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接