2015-03-09 4 views
2

Можно ли получить все ключи в определенном диапазоне, используя GeoFire Firebase? Я знаю, что вы можете получать события для гео-запросов, например: введенный ключ, выведенный ключ или перемещенный ключ, однако в настоящее время я ищу что-то более похожее на FEventTypeValue (одно значение времени для определенного региона географии), потому что моя карта объекты не перемещаются.Получить все объекты в определенном диапазоне в GeoFire

Не можете ничего найти в документации: https://github.com/firebase/geofire-objc

+0

Если ваш объект не перемещается, вы получите ровно одно введенное ключом для каждой записи. Вы можете контролировать '[query watchWithReadyBlock ...", чтобы знать, когда все события были загружены, а затем использовать [removeObserverWithHandle] (https://www.firebase.com/docs/ios/guide/retrieving-data.html#section- отключение), чтобы прекратить прослушивание. – Kato

ответ

2

Вы можете использовать ключ вошли события первого сохранения ключей для запроса в словаре, а затем использовать готовое событие, чтобы определить, когда были добавлены все ключи:

NSMutableDictionary *allKeys = [NSMutableDictionary dictionary]; 
[query observeEventType:GFEventTypeKeyEntered withBlock:^(NSString *key, CLLocation *location) { 
    [allKeys setObject:location forKey:key]; 
}]; 
[query observeReadyWithBlock:^{ 
    // Create an immutable copy of the keys in the query 
    NSDictionary *valueData = [allKeys copy]; 
    NSLog(@"All keys within a query: %@", valueData); 
}]; 

Не забудьте очистить слушателей после этого.

+0

Вот как это сделать. Для будущих читателей - обратите внимание, что при создании ключа в методе вы должны выбрать некоторый значащий и уникальный идентификатор: [geofire setLocation: forKey: I_E_FIREBASE_UNIQUE_ID] Хранить объекты геофирмы под одним узлом внутри вашего дерева, например: «geofireSth» и создать индекс на "g" узле geofireSth. Таким образом, вы сможете использовать запрос из примера @johnnydee для извлечения объектов в пределах определенного радиуса. Используйте ключ, полученный из запроса (I_E_FIREBASE_UNIQUE_ID), для выполнения запроса сервера для дополнительных данных об объекте. – Michael

-1

Разве это не то, что вы ищете?

GeoFire позволяет запросить все ключи в географической области с использованием объектов GFQuery.

Objective-C:

CLLocation *center = [[CLLocation alloc] initWithLatitude:37.7832889 longitude:-122.4056973]; 
    // Query locations at [37.7832889, -122.4056973] with a radius of 600 meters 
    GFCircleQuery *circleQuery = [geoFire queryAtLocation:center withRadius:0.6]; 

    // Query location by region 
    MKCoordinateSpan span = MKCoordinateSpanMake(0.001, 0.001); 
    MKCoordinateRegion region = MKCoordinateRegionMake(center.coordinate, span); 
    GFRegionQuery *regionQuery = [geoFire queryWithRegion:region]; 

Swift:

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) 

// Query location by region 
let span = MKCoordinateSpanMake(0.001, 0.001) 
let region = MKCoordinateRegionMake(center.coordinate, span) 
var regionQuery = geoFire.queryWithRegion(region) 
+1

Ну, я так и думал, однако, возможно, что-то не хватает, но я не вижу способа получить доступ к списку объектов, найденных в определенном регионе. – Michael

+0

Я не могу проверить его прямо сейчас, но не должны ли все результаты в объекте circleQuery? – LoVo

+2

Нет списка или чего-либо подобного в соответствии с документами: https://geofire-ios.firebaseapp.com/docs/Classes/GFCircleQuery.html Мы можем наблюдать завершение запроса, но атрибуты блока недействительны, вопреки FEventTypeValue в Firebase – Michael