3

ユーザーが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];
        }];

私の問題は、経度のデルタを計算する方法がわからないことです。

4

1 に答える 1

14

に等しく設定するだけlatitudeDeltaで、マップビューは必要に応じて調整されます。

ただし、そもそも自分でスパンを計算する必要はありません。次を使用できます。

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

質問の2番目の部分についてはよくわかりません。


iOS 7以降では、regionによって返されるのCLPlacemarkは実際にはですCLCircularRegion非推奨のCLRegionメソッド-半径を取得する方法を参照してください)。

元のコードはそのまま動作しますが、コンパイラに警告が表示されradiuscenter非推奨になる場合があります。

警告を回避するには、を:としてキャストしますregionCLCircularRegion

CLCircularRegion *pmCircularRegion = (CLCircularRegion *)placemark.region;

region = MKCoordinateRegionMakeWithDistance(
         pmCircularRegion.center,
         pmCircularRegion.radius,
         pmCircularRegion.radius);
于 2012-02-25T00:42:26.110 に答える