Обновление MKMapView до CLPlacemark, возвращенного из CLGeocoder
Я хочу иметь возможность обновлять регион, отображаемый в MKMapView, позволяя пользователю вводить адрес или местоположение в UIAlertView. В настоящее время у меня есть:
if (geocoder.geocoding)
[geocoder cancelGeocode];
[geocoder geocodeAddressString:[[alertView textFieldAtIndex:0] text] completionHandler:^(NSArray *placemarks, NSError *error) {
if (!error) {
NSLog(@"Found a location");
} else {
NSLog(@"Error in geocoding");
}
NSLog(@"Num found: %d", [placemarks count]);
CLPlacemark *placemark = [placemarks objectAtIndex:0];
MKCoordinateRegion region;
region.center.latitude = placemark.region.center.latitude;
region.center.longitude = placemark.region.center.longitude;
MKCoordinateSpan span;
double radius = placemark.region.radius / 1000;
NSLog(@"Radius is %f", radius);
span.latitudeDelta = radius / 112.0;
//span.longitudeDelta = ???
region.span = span;
NSLog(@"Region is %f %f %f", region.center.latitude, region.center.longitude, span.latitudeDelta);
[mapView setRegion:region animated:YES];
}];
Моя проблема в том, что я не уверен, как рассчитать дельту долготы.
1 ответ
Решение
Вы можете просто установить его равным latitudeDelta
и вид карты будет корректироваться по мере необходимости.
Но вам не нужно самим рассчитывать промежуток времени. Ты можешь использовать:
region = MKCoordinateRegionMakeWithDistance(
placemark.region.center,
placemark.region.radius,
placemark.region.radius);
Не уверен насчет второй части вашего вопроса.
В iOS 7 и выше
region
вернулся CLPlacemark
на самом деле CLCircularRegion
(см. Устаревшие методы CLRegion - как получить радиус?).Хотя оригинальный код все еще будет работать как есть, вы можете получить предупреждение компилятора о том, что radius
а также center
устарели.
Чтобы избежать предупреждения, бросьте region
как CLCircularRegion
:
CLCircularRegion *pmCircularRegion = (CLCircularRegion *)placemark.region;
region = MKCoordinateRegionMakeWithDistance(
pmCircularRegion.center,
pmCircularRegion.radius,
pmCircularRegion.radius);