Geolib и получение точного местоположения через массив

#javascript #arrays #react-native #geolocation

#javascript #массивы #react-native #геолокация

Вопрос:

У меня есть массив, и мне нужно упорядочить его данные по расстоянию до определенной точки. Зная, что это .sort() не сработает, поскольку я имею дело с координатами, я использовал библиотеку под названием Geolib, в которой есть функция, вызываемая getPreciseLocation() , которая является именно тем, что мне нужно, но, похоже, она не работает при итерации по массиву. Вот массив, содержащий данные, которые я буду использовать.

Данные:

 [
    {
        "id": "1",
        "Point": "27.1597268, 40.6646601"
    },
    {
        "id": "2",
        "Point": "11.1640393, 49.648713"
    },
    {
        "id": "3",
        "Point": "26.1539253, 42.6599287"
    },
    {
        "id": "4",
        "Point": "21.1597268, 44.6646601"
    },
    {
        "id": "5",
        "Point": "10.1640393, 43.648713"
    },
    {
        "id": "6",
        "Point": "26.1539253, 61.6599287"
    }
]
  

Код, который я пытался использовать для итерации по массиву.

 let DistancesFromUserLocation = [];
this.state.Data.forEach(item => {
    DistancesFromUserLocation.push(geolib.getPreciseDistance({latitude: 30.1891168, longitude: 11.6226982}, item.Point))
})
  

В качестве отказа от ответственности: мне нужно только получить, чтобы получить расстояние от каждого объекта массива до нового массива.
Я пробовал и исследовал многие вещи и нашел решение, но только подумав, что я добираюсь до решения, что-то пошло не так.

Ответ №1:

Вам нужно переносить сгенерированное расстояние каждую итерацию в DistancesFromUserLocation массив.

 let DistancesFromUserLocation = [];
this.state.Data.forEach(item => {
    // push each distance to `DistancesFromUserLocation`
    DistancesFromUserLocation.push(
       geolib.getPreciseDistance(
           {latitude: 30.1891168, longitude: 11.6226982},
           item.Point
       );
    )
})
  

Только тогда вы можете использовать Array.sort() .

 console.log(DistancesFromUserLocation.sort());
  

Редактировать:
Проверьте мой рабочий пример здесь, в codesandbox.

Комментарии:

1. Спасибо, это то, чем я занимался всю ночь. Кажется, что я вставил неправильный код, когда я должен был вставить тот, который с помощью метода .push(). Даже при этом это не работает. Он возвращает те же значения:Array [ 3387103, 3387103, 3387103, 3387103, 3387103, 3387103, ]

2. Это странно. Я использую geolib v3.3.1 от manuelbieh , и это работает без проблем. Проверьте мой рабочий пример здесь, в Stackblitz

3. Да, это абсолютно тот результат, который я хочу. Я также использую эту версию Geolib, но сейчас я действительно в замешательстве. Это немного странно. ** РЕДАКТИРОВАТЬ ** : Что еще более странно, я написал этот код как автономный для .js, над которым я работал, и он работает нормально.

4. Может быть, что-то странное происходит за пределами вашего кода? Кроме того, убедитесь, что ваши this.state.Data точки верны, прежде чем выполнять цикл.