更新从CLGeocoder返回的CLPlacemark的MKMapView

我希望能够通过允许用户在UIAlertView中input地址或位置来更新显示在MKMapView上的区域。 我目前有:

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]; }]; 

我的问题是我不确定如何计算经度三angular洲。

您可以将其设置为latitudeDeltalatitudeDelta ,地图视图将根据需要进行调整。

但是你并不需要首先计算自己的跨度。 您可以使用:

 region = MKCoordinateRegionMakeWithDistance( placemark.region.center, placemark.region.radius, placemark.region.radius); 

不知道你的问题的第二部分。


在iOS 7和更高版本中,由CLPlacemark返回的region实际上是一个CLCircularRegion (请参阅不推荐的CLRegion方法 – 如何获取半径? )。

尽pipe原始代码仍然可以正常工作,但您可能会收到一个编译器警告,指出radiuscenter已被弃用。

为了避免这个警告,将该regionCLCircularRegion

 CLCircularRegion *pmCircularRegion = (CLCircularRegion *)placemark.region; region = MKCoordinateRegionMakeWithDistance( pmCircularRegion.center, pmCircularRegion.radius, pmCircularRegion.radius);