首先我們要了解地理編碼和反編碼的含義和作用:
<1>地理編碼:把地名轉(zhuǎn)換成位置信息
作用:把文字描述的 位置轉(zhuǎn)換成地圖上的經(jīng)緯度埂奈;
<2>反編碼:把位置信息轉(zhuǎn)換成文字
作用:可以點(diǎn)擊地圖上的某個位置 來獲得文字的描述
<3>地理編解碼在編解碼的時候 是一個耗時的操作 可以采用異步操作
//編碼
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
//反編碼
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
*****注:在工程運(yùn)行開始時,都必須要添加定位框架#import <CoreLocation/CoreLocation.h>
1敬特、地理編碼:文字描述的位置 轉(zhuǎn)換成 地圖上的經(jīng)緯度
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
[geocoder geocodeAddressString:@"鄭州" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
CLPlacemark *placemark = placemarks.firstObject;
CLLocation *loc = placemark.location;
NSLog(@"緯度%f 經(jīng)度%f",loc.coordinate.latitude,loc.coordinate.longitude);
}];
輸出結(jié)果:緯度34.707001 經(jīng)度113.509167
#pragma mark 根據(jù)地名確定地理坐標(biāo)
-(void)getCoordinateByAddress:(NSString *)address{
//地理編碼
[_geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
//取得第一個地標(biāo)厘肮,地標(biāo)中存儲了詳細(xì)的地址信息转砖,注意:一個地名可能搜索出多個地址
CLPlacemark *placemark=[placemarks firstObject]; CLLocation *location=placemark.location;//位置 CLRegion *region=placemark.region;//區(qū)域 NSDictionary *addressDic= placemark.addressDictionary;//詳細(xì)地址信息字典,包含以下部分信息 //
NSString *name=placemark.name;//地名 // NSString *thoroughfare=placemark.thoroughfare;//街道
// NSString *subThoroughfare=placemark.subThoroughfare; //街道相關(guān)信息恢筝,例如門牌等
// NSString *locality=placemark.locality; // 城市
// NSString *subLocality=placemark.subLocality; // 城市相關(guān)信息,例如標(biāo)志性建筑
// NSString *administrativeArea=placemark.administrativeArea; // 州
// NSString *subAdministrativeArea=placemark.subAdministrativeArea; //其他行政區(qū)域信息
// NSString *postalCode=placemark.postalCode; //郵編
// NSString *ISOcountryCode=placemark.ISOcountryCode; //國家編碼
// NSString *country=placemark.country; //國家 // NSString *inlandWater=placemark.inlandWater; //水源料睛、湖泊
// NSString *ocean=placemark.ocean; // 海洋
// NSArray *areasOfInterest=placemark.areasOfInterest; //關(guān)聯(lián)的或利益相關(guān)的地標(biāo)
NSLog(@"位置:%@,區(qū)域:%@,詳細(xì)信息:%@",location,region,addressDic); }];
}
#pragma mark 根據(jù)坐標(biāo)取得地名-(void)getAddressByLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude{ //反地理編碼 CLLocation *location=[[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
[_geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *placemark=[placemarks firstObject]; NSLog(@"詳細(xì)信息:%@",placemark.addressDictionary); }];
}
@end
總結(jié)我們目前在地圖上接觸到的幾個類:
CLLocationManager:定位管理器,用來設(shè)置管理定位丐箩,設(shè)置定位的精度、定位頻率恤煞、后臺運(yùn)行等屎勘。
CLGeocoder:主要用來編碼與反編碼。
CLLocation:用于表示位置信息居扒,包含地理坐標(biāo)概漱、海拔等信息,包含在CoreLoaction框架中喜喂。
CLPlacemark:定位框架中地標(biāo)類瓤摧,封裝了詳細(xì)的地理信息。
CLLocationCoordinate2D:他是一個結(jié)構(gòu)體玉吁,用來表示經(jīng)緯度照弥。