Как с помощью Geofire сделать запрос к нетрадиционной структуре узла?

Я работал с GeoFire раньше, и насколько я помню, когда вы сохраняете местоположение с помощью setLocation в GeoFire, структура Firebase выглядит примерно так:

{
  "3f7892b2-f304-4129-8416-0dc7216c2188" : {
    "g" : "9qc9p66045",
    "l" : {
        0 : 37,
        1 : -120
    }
  }
}

Проблема в том, что у меня уже есть база данных реального времени, и она имеет следующую структуру:

{
  "3f7892b2-f304-4129-8416-0dc7216c2188" : {
    "username" : "bobby123",
    "name" : "john",
    "bio" : " I like dogs",
    "location" : {
        "lon" : 37,
        "lat" : -120
    }
  }
}

Таким образом, у него есть другие данные, помимо местоположения (которое я сейчас храню с помощью CLLocation и просто обновляю дочернее значение).

Итак, мой вопрос: какой самый практичный способ запустить запрос GeoFire? Я понимаю, что могу просто использовать setLocation и иметь идентификатор по идентификатору пользователя и сделать ссылку на это позже, когда я загружаю пользователей в табличное представление, но мне любопытно, можно ли запустить GFQuery для моих данных таким образом он настроен в настоящее время.


person John Leonardo    schedule 25.10.2016    source источник


Ответы (1)


Из того, что я знаю, вы должны использовать первую упомянутую вами структуру, а затем, когда вам нужно местоположение для пользователя:

geoFireRef!.getLocationForKey(userID, withCallback: { (location, error) in
}

или как вы называете свой реф. затем вы вызываете запрос в этом месте (например, радиус 100 км):

let locationQuery = geoFireRef!.query(at: location, withRadius: 100)
locationQuery?.observe(GFEventType.init(rawValue: 0)!, with: {(key, location) in
}

При этом вы получаете ключи и, следовательно, пользователей с usersRef.child(key).observeSingleEvent(of: .value, with: { snapshot in

и т. д.

Из того, что я прочитал, это фиксированная структура для GeoFire.

person Peter de Vries    schedule 26.10.2016