地理编码



在处理相关地图的时候,有可能遇到一些问题,比如初次时候的时候,没有弹出地图的提示框,或者没有网络,或者没有显示地图

下面是相关的处理:

/*相关的博客

1. 要实现地图、导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作。

2. Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用。

3. 在Core Location中主要包含了定位、地理编码(包括反编码)功能。

 

iOS8中配置配置项发生了变化,可以通过配置

        NSLocationAlwaysUsageDescription

或者

 来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。

同时,在应用程序中需要根据配置对requestAlwaysAuthorization或locationServicesEnabled方法进行请求。由于本人机器已经更新到最新的iOS8.1下面的内容主要针对iOS8,使用iOS7的朋友需要稍作调整。

 

还有网络的相关设置

 */




iosmapview地图导航 ios地图导航语言设置_地图编码




/**

设置地图的时候 一定要在plist文件里面去设置属性:NSLocationAlwaysUsageDescription、NSLocationWhenInUseUsageDescription 

 以及网络属性的设置

 */

1.首先导入头文件

#import <CoreLocation/CoreLocation.h>//定位


2.声明熟悉


CLGeocoder *_geocoder;//地理编码




3.设置代理

<CLLocationManagerDelegate>
 
//地理编码
- (void)geocoderOfMap
{
_geocoder=[[CLGeocoder alloc]init];
    [self getCoordinateByAddress:@"北京"];
    [self getAddressByLatitude:+39.90498900 longitude:+116.40528500];
 
}
  
 /*
、 startUpdatingHeading    开始导航方向追踪
  
、 stopUpdatingHeading     停止导航方向追踪
  
、 startMonitoringForRegion  开始对某个区域进行定位追踪,开始对某个区域进行定位后。如果用户进入或者走出某个区域会调用- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
和
代理方法反馈相关信息
  
、 stopMonitoringForRegion     停止对某个区域进行定位追踪
  
、 requestWhenInUseAuthorization  请求获得应用使用时的定位服务授权,注意使用此方法前在要在info.plist中配置NSLocationWhenInUseUsageDescription
  
、requestAlwaysAuthorization  请求获得应用一直使用定位服务授权,注意使用此方法前要在info.plist中配置NSLocationAlwaysUsageDescription
  */
 
根据地名确定地理坐标
-(void)getCoordinateByAddress:(NSString
    //地理编码
_geocoder geocodeAddressString:address  completionHandler:^(NSArray *placemarks, NSError
        //取得第一个地标,地标中存储了详细的地址信息,注意:一个地名可能搜索出多个地址
CLPlacemark *placemark=[placemarks  firstObject];
         
CLLocation *location=placemark.location;//位置
CLRegion *region=placemark.region;//区域
NSDictionary *addressDic= placemark.addressDictionary;//详细地址信息字典,包含以下部分信息
        //        NSString *name=placemark.name;//地名
        //        NSString *thoroughfare=placemark.thoroughfare;//街道
        //        NSString *subThoroughfare=placemark.subThoroughfare; //街道相关信息,例如门牌等
        //        NSString *locality=placemark.locality; // 城市
        //        NSString *subLocality=placemark.subLocality; // 城市相关信息,例如标志性建筑
        //        NSString *administrativeArea=placemark.administrativeArea; // 州
        //        NSString *subAdministrativeArea=placemark.subAdministrativeArea; //其他行政区域信息
        //        NSString *postalCode=placemark.postalCode; //邮编
        //        NSString *ISOcountryCode=placemark.ISOcountryCode; //国家编码
        //        NSString *country=placemark.country; //国家
        //        NSString *inlandWater=placemark.inlandWater; //水源、湖泊
        //        NSString *ocean=placemark.ocean; // 海洋
        //        NSArray *areasOfInterest=placemark.areasOfInterest; //关联的或利益相关的地标
NSLog(@"位置:%@,区域:%@,详细信息:%@",location,region,addressDic);
         
//反编码
_geocoder reverseGeocodeLocation:location  completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks,  NSError * _Nullable
             
CLPlacemark *placemark=[placemarks  firstObject];
NSLog(@"详细信息:%@",placemark.addressDictionary);
        }];
 
    }];
     
 
    
}
 
根据坐标取得地名
-(void)getAddressByLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude{
    //反地理编码
CLLocation *location=[[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
_geocoder reverseGeocodeLocation:location  completionHandler:^(NSArray *placemarks, NSError
CLPlacemark *placemark=[placemarks  firstObject];
NSLog(@"详细信息:%@",placemark.addressDictionary);
    }];
     
_geocoder reverseGeocodeLocation:location  completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks,  NSError * _Nullable
NSLog(@"反编码");
    }];
}