React native find location from user location

时间:2018-03-26 08:03:15

标签: react-native location react-native-android react-native-ios

我有一系列的位置(城市),我想从我目前的位置找到最近的城市。

我想测试用户位置与阵列之间的距离,以查看最接近的位置。我该怎么做?

4 个答案:

答案 0 :(得分:0)

关于如何使用Javascript示例计算两个地理位置之间的距离有一个非常好的文档,您可以找到here

  

计算纬度/经度点之间的距离,方位等

     

此页面显示了各种纬度/经度计算   点,用formulæ和代码片段来实现它们。

     

所有这些形式都是基于球形的计算   地球(忽略椭球效应) - 这足够准确*   大多数目的...... [事实上,地球是略微椭圆形的;运用   球形模型给出的误差通常高达0.3%1 - 参见注释   进一步的细节]。

假设您有一个包含城市地理位置的数组,您可以循环并计算与使用Geolocation API react-native获得的用户当前位置的距离。

答案 1 :(得分:0)

假设您将数据作为数组/对象的数组。对于演示代码,我使用的是数组数组。

const cities = [
 ["city1", 10, 50, "blah"],
 ["city2", 40, 60, "blah"],
 ["city3", 25, 10, "blah"],
 ["city4", 5, 80, "blah"] 
];

deg2Rad = (deg) => {
  return deg * Math.PI / 180;
}

pythagorasEquirectangular = (lat1, lon1, lat2, lon2) => {
  lat1 = this.deg2Rad(lat1);
  lat2 = this.deg2Rad(lat2);
  lon1 = this.deg2Rad(lon1);
  lon2 = this.deg2Rad(lon2);
  const R = 6371;
  const x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);
  const y = (lat2 - lat1);
  const d = Math.sqrt(x * x + y * y) * R;
  return d;
}
nearestCity = (latitude, longitude) => {
 let mindif = 99999;
 let closest;

 for (index = 0; index < cities.length; ++index) {
  const dif = this.pythagorasEquirectangular(latitude, longitude, cities[index][1], 
    cities[index][2]);
    if (dif < mindif) {
    closest = index;
    mindif = dif;
 }
 return cities[closest]
}

或类似的东西。您也可以使用Geolocation获取当前位置。 用您当前的lat,lon调用nearestCity(lat, lon)。 希望这会有所帮助。

答案 2 :(得分:0)

此方法已在之前的反应中使用,不幸的是它不适用于React Native。我已经编辑了代码,使其可以在React Native上使用。

代码如下:

cities = [
     ["city1", 10, 50, "blah"],
     ["city2", 40, 60, "blah"],
     ["city3", 25, 10, "blah"],
     ["city4", 5, 80, "blah"] 
    ];
     nearestPlace = null;

    deg2Rad = (deg) => {
      return deg * Math.PI / 180;
    }

    pythagorasEquirectangular = (lat1, lon1, lat2, lon2) => {
      lat1 = this.deg2Rad(lat1);
      lat2 = this.deg2Rad(lat2);
      lon1 = this.deg2Rad(lon1);
      lon2 = this.deg2Rad(lon2);
      const R = 6371;
      const x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);
      const y = (lat2 - lat1);
      const d = Math.sqrt(x * x + y * y) * R;
      return d;
    }
    nearestCity = (latitude, longitude) => {
     let mindif = 99999;
     let closest;


     for (let index = 0; index < this.cities.length; index++) {
      const dif = this.pythagorasEquirectangular(latitude, longitude, this.cities[index][1], 
        this.cities[index][2]);
        if (dif < mindif) {
        closest = index;
        mindif = dif;
        }

      }
      this.nearestPlace = closest

    }

因此,当您随后this.nearestCity (yourLat, yourLon)时,您会在this.nearestPlace中找到结果。

答案 3 :(得分:-1)

您可以使用其他软件包来计算距离,例如https://github.com/cmoncrief/geodist

然后您可以通过代码计算两点之间的距离

var geodist = require('geodist')

var dist = geodist({lat: 41.85, lon: -87.65}, {lat: 33.7489, lon: -84.3881})
console.log(dist)           
// => 587