2012-02-06 41 views
3

我希望能夠通過允許用戶在UIAlertView中鍵入地址或位置來更新顯示在MKMapView上的區域。我目前有:將MKMapView更新爲從CLGeocoder返回的CLPlacemark

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

我的問題是我不確定如何計算經度增量。

+2

你可以只將其設置爲latitudeDelta,並根據需要在地圖視圖會調整。但是你並不需要首先自己計算跨度。您可以使用'region = MKCoordinateRegionMakeWithDistance(placemark.region.center,placemark.region.radius,placemark.region.radius);'。不確定你的問題的第二部分。 – Anna 2012-02-06 19:03:44

+0

這似乎是工作。我假設我將不得不使用第三方地理編碼器才能看到所有共享相同名稱的結果。 – brendan 2012-02-06 19:40:12

+0

安娜你能添加這個答案嗎? – brendan 2012-02-24 21:05:52

回答

14

您可以將其設置爲等於latitudeDelta,並根據需要調整地圖視圖。

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

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

不確定您的問題的第二部分。


在iOS系統7或更高,由 CLPlacemark返回的 region實際上是一個 CLCircularRegion(見 Deprecated CLRegion methods - how to get radius?)。

雖然原始代碼仍然按原樣運行,但您可能會收到編譯器警告,提示radiuscenter已棄用。

爲了避免該警告,施放regionCLCircularRegion

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

region = MKCoordinateRegionMakeWithDistance(
     pmCircularRegion.center, 
     pmCircularRegion.radius, 
     pmCircularRegion.radius); 
+0

不幸的是中心已被棄用。 – Andy 2015-03-17 13:55:12

+0

@安迪,謝謝,我已經發布了應該避免編譯器警告的代碼。 – Anna 2015-03-17 14:07:58

+0

作爲'CLCircularRegion'投射效果很好,謝謝! – 2016-05-12 02:15:17