2016-05-09 5 views
2

Давайте представим, у меня есть Firebase установки, как это, за исключением 10000 пользователей:Наименее сложный способ получить 5 ближайших пользователей в Firebase/Swift?

"users" : { 
    "user 1" : { 
     "latitude": 1234567, 
     "Longitude": 7654321, 
     "name": "Name 1" 
    }, 
    "user 2" : { 
     "latitude": 1234567, 
     "longitude": 7654321, 
     "name": "Name 2" 
    }, 
    "user 3" : { 
     "latitude": 1234567, 
     "Longitude": 7654321, 
     "name": "Name 3" 
    }, 
    "user 4" : { 
     "latitude": 1234567, 
     "Longitude": 7654321, 
     "name": "Name 4" 
    }, 
    } 

Что бы наименее способом данные интенсивно, чтобы создать список из 5 пользователей ближайших ко мне? Очень новичок в этом, поэтому единственные решения, о которых я могу думать, потребуют опроса всех 10 000 пользователей.

ответ

2

Я очень новичок в этой теме, поэтому могу указать только в правильном направлении. По сути, способ хранения местоположения пользователя не является оптимальным. Лучший способ сделать это - использовать GeoFire новое дополнение к службе Firebase. Как это работает, вы должны иметь большой объект местоположения, и вы храните геолокацию тех пользователей, которые используют этот ключ пользователя. Вот пример.

{ 
    Locations: { 
     -KH35xPkJmX0UTSG8DuM : { 
      "g" : "randomID", 
      "l" : { 
        "0" : "latitude", 
        "1" : "longitude" 
       } 
     } 
    } 
    } 

    { 
    Users: { 
     -KH35xPkJmX0UTSG8DuM : { 
     "username" : "Joe Sloan" 
     } 
    } 
    } 

В вашем объекте объектов будет 10 000 ключей пользователей и геолокаций. значение «г» и «л» объект устанавливается при использовании

geoFire.setLocation(CLLocation(latitude: 37.7853889, longitude: -122.4056973), forKey: "firebase-hq") 

Google оптимизировал запрос для пользователей в подобном месте.

let center = CLLocation(latitude: 37.7832889, longitude: -122.4056973) 
    // Query locations at [37.7832889, -122.4056973] with a radius of 600 meters 
    var circleQuery = geoFire.queryAtLocation(center, withRadius: 0.6) 

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

+0

Удивительно, большое спасибо. Я подумал об этом, но не смог определить, будет ли Geofire работать со Swift, поскольку я видел поддержку только на других языках. Знаете ли вы, есть ли там ресурсы Swift Geofire? –

+1

GeoFire Framework написан на Objective-C, однако, если вы перейдете к GeithFire github, они предоставили документацию для быстрой! Firebase действительно хорош в предоставлении быстрой документации. Фрагменты кода, которые я опубликовал выше, находятся в быстром и прямо со страницы github. Рекомендуемый способ добавления GeoFire в ваше приложение - через CoacoaPods! –

+0

как вы можете прочитать результаты этого запроса? @HunterWalker –

Смежные вопросы