Получить все объекты в пределах определенного диапазона в GeoFire
Можно ли получить все ключи в определенном диапазоне, используя GeoFire от Firebase? Мне известно, что вы можете получать события для гео-запросов, такие как: введенный ключ, выходной ключ или перемещенный ключ, однако в настоящее время я ищу что-то более похожее на FEventTypeValue (одноразовое считывание значения для конкретного географического региона), поскольку объекты моей карты не двигаются
Ничего не могу найти в документации: https://github.com/firebase/geofire-objc
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);
}];
Не забудьте потом почистить слушателей.
Разве это не то, что вы ищете?
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)