iOS定位服務與地圖開發(2)---地理資訊反編碼

來源:互聯網
上載者:User

標籤:style   blog   class   code   java   c   

上節我們通過定位擷取了經度和緯度數值,但是一般人很難看懂這些數字。

地理資訊反編碼:就是根據這些經緯數字返回地點的相關文字描述資訊,這些文字描述資訊被封裝在CLPlacemark類中,我們稱這個類為“地標”類。

地理資訊反編碼使用CLGeocoder類實現,這個類能夠實現在地理座標與地理文字描述資訊之間的轉換。

CLGeocoder類中進行地理資訊反編碼的方法是:reverseGeocodeLocation: completionHandler:

location:是要定位的地理位置對象

completionHandler:指定了一個代碼塊,用於地理位置反編碼之後的回調。

-(IBAction)reverseGeocode:(id)sender{    CLGeocoder *geoCoder = [[CLGeocoder alloc] init];    [geoCoder reverseGeocodeLocation:_currLocation completionHandler:^(NSArray *placemarks, NSError *error)    {         //得到的數組placemarks就是CLPlacemark對象數組,這裡只取第一個就行         CLPlacemark *mark = nil;         if([placemarks count] > 0){             id tempMark = [placemarks objectAtIndex:0];             if([tempMark isKindOfClass:[CLPlacemark class]])             {                 mark = tempMark;             }             //具體商務邏輯,CLPlacemark的屬性有很多,包括了街道名等相關屬性               NSDictionary *addressDict = mark.addressDictionary;             NSString *address = [addressDict  objectForKey:(NSString)kABPersonAddressStreetKey];             address = address == nil ? @"" : address;                 NSString *state = [addressDict objectForKey:(NSString)kABPersonAddressStateKey];              state = state == nil ? @"" : state;                          NSString *city = [addressDict objectForKey:(NSString)kABPersonAddressCityKey];             city = city == nil ? @"" : city;             //  擷取地標對應的可讀的文字資訊,一般返回到UI顯示             NSString *streetInfo = [NSString stringWithFormat:@"%@\n%@\n%@\n",state,address,city];             }                  }];}                

【說明】:

_currLocation是CLLocation類型的成員變數,是在委託方法locationManager:didUpdateLocations:中獲得的。

completionHandler:^(NSArray *plackmrks , NSError *error)參數placemarks是反編碼成功的地標集合。如果使用者要查看所有的地標資訊,需要迴圈遍曆。

下面這些鍵是在AddressBook架構中定義的常量,需要引入AddressBook.framework架構:

kABPersonAddressStreetKey鍵:可以從字典中取出地標的街道資訊

kABPersonAddressStateKey鍵:可以從字典中取出地標所在的州、省等資訊

kABPersonAddressCityKey鍵:可以從字典中取出地標所在的城市等資訊

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.