Ios 将MKMapView更新为从CLGeocoder返回的CLPlacemark
我希望能够通过允许用户在UIAlertView中键入地址或位置来更新MKMapView上显示的区域。我目前有:Ios 将MKMapView更新为从CLGeocoder返回的CLPlacemark,ios,mkmapview,cllocation,mkcoordinateregion,clgeocoder,Ios,Mkmapview,Cllocation,Mkcoordinateregion,Clgeocoder,我希望能够通过允许用户在UIAlertView中键入地址或位置来更新MKMapView上显示的区域。我目前有: if (geocoder.geocoding) [geocoder cancelGeocode]; [geocoder geocodeAddressString:[[alertView textFieldAtIndex:0] text] completionHandler:^(NSArray *placemarks, NSErr
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];
}];
我的问题是我不确定如何计算经度增量 您可以将其设置为等于
latitudelta
,地图视图将根据需要进行调整
但首先你不需要自己计算跨度。您可以使用:
region = MKCoordinateRegionMakeWithDistance(
placemark.region.center,
placemark.region.radius,
placemark.region.radius);
我不确定你问题的第二部分。
在iOS 7及更高版本中,
CLPlacemark
返回的区域实际上是一个CLCircularRegion
(请参阅)
虽然原始代码仍能正常工作,但您可能会收到一条编译器警告,指出radius
和center
已被弃用
要避免警告,请将区域
强制转换为CLCircularRegion
:
CLCircularRegion *pmCircularRegion = (CLCircularRegion *)placemark.region;
region = MKCoordinateRegionMakeWithDistance(
pmCircularRegion.center,
pmCircularRegion.radius,
pmCircularRegion.radius);
您可以将其设置为latitudeDelta,地图视图将根据需要进行调整。但首先你不需要自己计算跨度。您可以使用距离(placemark.region.center,placemark.region.radius,placemark.region.radius,placemark.region.radius)的region=MKCoordinateRegionMakeWithDistance代码>。不确定你问题的第二部分。这似乎有效。我假设我必须使用第三方地理编码器才能查看所有共享相同名称的结果。Anna您能添加此作为答案吗?很遗憾,该中心已被弃用。@Andy,谢谢,我发布了避免编译器警告的代码。