Я разрабатываю приложение iOS, в котором я хочу найти все местоположения в пределах некоторого радиуса.Получить места в радиусе
Есть ли какой-либо способ в объективе-c, который позволит мне указать фиксированный радиус и местоположение, и это скажет мне, какие местоположения находятся в пределах этого радиуса?
Я сделал некоторые исследования и я получил этот код,
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:locationManager.location
completionHandler:^(NSArray *placemarks, NSError *error)
{
NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");
if (error)
{
NSLog(@"Geocode failed with error: %@", error);
return;
}
CLLocationDistance radius = 30;
CLLocation* target = [[CLLocation alloc] initWithLatitude:51.5028 longitude:0.0031];
NSArray *locationsWithinRadius = [placemarks objectsAtIndexes:
[placemarks indexesOfObjectsPassingTest:
^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return [(CLLocation*)obj distanceFromLocation:target] < radius;
}]];
NSLog(@"locationsWithinRadius=%@",locationsWithinRadius);
}];
но он получает сбой и показывает ошибку:
Нагрузочного приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «- [CLPlacemark distanceFromLocation:]:
Я иду по правильному пути? это способ, чтобы найти все местоположения из моих указанных мест?
Заранее спасибо.
EDIT:
NSArray *testLocations = @[[[CLLocation alloc] initWithLatitude:19.0759 longitude:72.8776]];
CLLocationDistance maxRadius = 3000; // in meters
CLLocation *targetLocation = [[CLLocation alloc] initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude]; //Current location coordinate..
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(CLLocation *testLocation, NSDictionary *bindings) {
return ([testLocation distanceFromLocation:targetLocation] <= maxRadius);
}];
NSArray *closeLocations = [testLocations filteredArrayUsingPredicate:predicate];
NSLog(@"closeLocations=%@",closeLocations);
Когда я протоколирую closeLocations
массива он показывает нулевое (пустое) значение. Координата, которую я предоставил в testLocations, находится рядом с моим текущим местоположением.
У вас есть список мест (координаты), и вы хотите, чтобы выяснить, какие находятся в пределах заданного расстояния от другой координаты? Для этого вам не нужно геокодировать. Каковы ваши исходные данные? – Wain
У меня есть широта и долгота всех мест в моей БД. Я хочу найти, какие lat и long близки к моей текущей «широте» и «долготе». – Krunal
что случилось в моем коде? что бы это было в моем массиве меток меток? – Krunal