2016-07-25 163 views

回答

0

是的,這可以通過使用Google Places API得到緯度/經度,適用於iOS的谷歌Places API所提供的應用程序有關的地方豐富的信息,包括地點的名稱和地址,地理位置指定爲緯度/經度座標的位置。除此之外,您可以使用overlays在地圖的很大一部分上對內容進行分層。覆蓋物體是符合MKOverlay協議的任何物體。疊加對象是一個數據對象,它包含指定疊加層的形狀和大小及其在地圖上的位置所需的點。疊加層可以表示形狀,如圓形,矩形,多段線和簡單或複雜的多邊形。您還可以定義自己的自定義疊加層以表示其他形狀。

注:

在iOS系統7和OS X v10.9和以後,覆蓋的呈現是由overlay renderer對象,這是MKOverlayRenderer類的實例來處理。渲染器的工作是在地圖視圖要求時將覆蓋圖的內容繪製到屏幕上。例如,如果您有一個代表公交路線的簡單疊加層,則可以使用多段線渲染器繪製追蹤總線路線的線段。您還可以定義一個自定義渲染器,在每個公交站點的位置繪製公交路線和圖標。指定overlays時,您可以將它們添加到地圖的特定級別,這樣可以將它們渲染到其他類型的地圖內容的上方或下方。在此之前的iOS 7,覆蓋一個 顯示較少 德克斯特Datul
德克斯特Datul 下午1:07今天 重新使用疊加的觀點,這是MKOverlayView類的實例繪製在屏幕上。

配置您的地圖界面時,您可以隨時添加疊加對象。地圖視圖使用每個疊加對象中的數據來確定相應的疊加視圖何時需要在屏幕上顯示。疊加層在屏幕上移動時,地圖視圖會要求其委託創建相應的疊加渲染器。

+0

感謝datul的響應。我實現了這個部分,並顯示了我們需要獲取座標的多邊形。我們可以得到那些使用谷歌API?用數據部分堵塞並且實現完成。 –

0

使用谷歌API:

-(CLLocationCoordinate2D)getLatLongFromAddress:(NSString*) addressStr 
{ 
    double latitude = 0, longitude = 0; 
    NSString *esc_addr = [addressStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    NSString *req = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", esc_addr]; 
    NSString *result = [NSString stringWithContentsOfURL:[NSURL URLWithString:req] encoding:NSUTF8StringEncoding error:NULL]; 

    if (result) 
    { 
     NSScanner *scanner = [NSScanner scannerWithString:result]; 
     if ([scanner scanUpToString:@"\"lat\" :" intoString:nil] && [scanner scanString:@"\"lat\" :" intoString:nil]) 
     { 
      [scanner scanDouble:&latitude]; 
      if ([scanner scanUpToString:@"\"lng\" :" intoString:nil] && [scanner scanString:@"\"lng\" :" intoString:nil]) 
      { 
       [scanner scanDouble:&longitude]; 
      } 
     } 
    } 

    CLLocationCoordinate2D center; 
    center.latitude = latitude; 
    center.longitude = longitude; 
    return center; 
} 

使用地理編碼:

CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 

    [geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) 
    { 
     if(!error) 
     { 
      if([placemarks count] > 0) 
      { 
       CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
       CLLocation *location = placemark.location; 
       CLLocationCoordinate2D coordinate = location.coordinate; 
      } 
     } 
    }]; 
+0

使用這個我們可以得到一個位置,但不是該區域。例如,如果我們選擇在德克薩斯州可用的「達拉斯」。我們能否得到「得克薩斯」邊界(一系列座標)來繪製一個多邊形。感謝您的迴應 –