将MKMapView更新为CLGeocoder返回的CLPlacemark



我希望能够通过允许用户在UIAlertView中键入地址或位置来更新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];
        }];

我的问题是我不确定如何计算经度增量。

您只需将其设置为latitudeDelta,地图视图就会根据需要进行调整。

但你一开始不需要自己计算跨度。您可以使用:

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

不确定你问题的第二部分。


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

尽管原始代码仍将按原样工作,但您可能会收到编译器警告,radiuscenter已弃用。

为了避免警告,将region转换为CLCircularRegion:

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

相关内容

  • 没有找到相关文章

最新更新