Как добавить базу данных Firebase к моему заказанному объекту из более близкого элемента к следующему? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть база данных Firebase с вложенными словарями, прикрепленными к методу Firebase autoId ().

Snap (donators-items) {
    "-LjGwJLdBoFugIaPMVJg" =     {
        description = "Yummy Pasta";
        latitude = "44.93926644825692";
        longitude = "4.872616600173217";
        name = "Pasta";
        pickUpDate = "2019-07-09T16:15:53+02:00";
        selectedType = "Food";
    };
    "-LjGwWkbOzeXJ6U3JO7r" =     {
        description = "Brand new shirt";
        latitude = "44.93607125515575";
        longitude = "4.878479988801786";
        name = "Cool T-shirt";
        pickUpDate = "2019-07-12T16:15:41+02:00";
        selectedType = "Clothes";
    };
}

Я использую этот метод для извлечения словаря базы данных.

var donatorsItems = [DonatorItem]()

func fetchDonatorsItemsFromFirebase() {
  donatorsItems.removeAll()

  rootRef.child(FirebaseRoot.donatorsItems.rawValue).observe(.value) {
    (snapshot) in
    if let idDict = snapshot.value as? NSDictionary {
      let ids = idDict.allKeys
      for key in ids {
        if let nestedDict = idDict[key] as? FirebaseDictionary {

          print(nestedDict)

        }
      }
    }    
  }
}

При печати nestedDict я заполняю два вложенных словаря в неупорядоченной коллекции.

Какя могу получить данные, чтобы добавить их в мой объект DonatorItem и отправить их в порядке от ближе к дальнейшему, используя широту и долготу каждого объекта?

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

func getDistanceFromUserToMeetingPoint(_ meetingPointLatitude: Double, _ meetingPointLongitude: Double, vc: UIViewController) -> Double

1 Ответ

0 голосов
/ 09 июля 2019

Запросы к базе данных Firebase могут упорядочивать / фильтровать только по одному свойству.Поскольку местоположение указывается двумя свойствами в вашей базе данных, в настоящее время нет способа упорядочить / отфильтровать местоположение или расстояние.

Существует дополнительная библиотека для Firebase под названием GeoFire , которая добавляет эту возможность, добавляя значение geohash к каждому узлу.Геохеш - это одно строковое значение, которое кодирует широту и долготу таким образом, что позволяет Firebase фильтровать узлы в пределах определенного диапазона от заданной точки.

Это позволит вам запрашивать элементы в пределах диапазона, новы не получите результаты от ближайшего к дальней.Это просто невозможно в Firebase, так как он не может узнать «расстояние» на сервере.Поэтому вам придется извлечь элементы в определенном диапазоне, а затем упорядочить их по расстоянию в клиентском коде вашего приложения.

Дополнительные вопросы по этой теме см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...