2011-11-27 24 views
10

Trong iOS 5, có một cách mới để chuyển tiếp địa chỉ mã địa lý (chuyển đổi địa chỉ như 1 Infinite Loop, CA, USA sang địa chỉ lat/lang). More info on this is here.Đặt một CLPlacemark trên Bản đồ trong iOS 5

Có ai đã cố gắng đặt đối tượng CLPlacemark được mã hóa địa lý chuyển tiếp trên MKMapView không? Tôi có một đối tượng CLPlacemark sau khi mã hóa địa lý nhưng không có đầu mối làm thế nào để đặt nó trên bản đồ.

Tôi sẽ đánh giá cao mọi loại trợ giúp. Google là không có sự giúp đỡ cho đến nay.

Trả lời

24

Ngoài câu trả lời đã chọn, còn có cách này để thêm chú thích vào mapView để mã hóa địa lý chuyển tiếp. Đối tượng CLPlacemark có thể được truyền trực tiếp tới MKPlacemark và được thêm vào chế độ xem bản đồ. Như sau:

MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:placemark]; 
[self.mapView addAnnotation:placemark]; 

Dưới đây là ví dụ đầy đủ về mã hóa địa lý chuyển tiếp.

NSString *address = @"1 Infinite Loop, CA, USA"; 
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
    [geocoder geocodeAddressString:address 
       completionHandler:^(NSArray* placemarks, NSError* error){ 
        // Check for returned placemarks 
        if (placemarks && placemarks.count > 0) { 
         CLPlacemark *topResult = [placemarks objectAtIndex:0]; 
         // Create a MLPlacemark and add it to the map view 
         MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult]; 
         [self.mapView addAnnotation:placemark]; 
         [placemark release]; 
        } 
        [geocoder release]; 
       }]; 
+2

+1 Quên về MKPlacemark. – Anna

9

A CLPlacemark không thực hiện giao thức MKAnnotation do đó bạn vẫn phải tạo lớp chú thích của riêng mình hoặc bạn có thể sử dụng MKPointAnnotation. Các tọa độ của dấu vị trí nằm trong thuộc tính location của nó.

Ví dụ:

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init]; 
pa.coordinate = placemark.location.coordinate; 
pa.title = ABCreateStringWithAddressDictionary(placemark.addressDictionary, YES); 
[mapView addAnnotation:pa]; 
[pa release]; //remove if using ARC 

Bạn có thể đặt title để bất cứ điều gì bạn muốn từ vị trí nhưng có một khả năng, như trong ví dụ này, là sử dụng Address Book UI framework để tạo ra một chuỗi địa chỉ từ từ điển địa chỉ do dấu vị trí cung cấp.

+0

Cảm ơn bạn! Điều đó thật tuyệt vời! – Stealth

+1

Tôi cũng tìm thấy một cách khác để làm điều này thông qua video từ năm nay (2011) WWDC. Chỉ là một fyi. – Stealth

+0

Tôi đã nhìn thấy rò rỉ bộ nhớ nhỏ nhỏ kỳ lạ khi sử dụng ABCreateStringWithAddressDictionary ... 2 rò rỉ mỗi lần xảy ra với tổng số 192bytes. Có ai khác đang gặp sự cố này không? – AndrewPK

0

trong nhanh chóng 3,0

let pm = placemarks! as [CLPlacemark] // this is Clpmacemark 
let placemark = MKPlacemark.init(placemark: pm) 
self.mapview.addAnnotation(placemark) 
Các vấn đề liên quan