iOS定位功能

小序:

本文包括三个内容:
①:定位功能的实现
②:知道城市名拿到经纬度
③:根据经纬度拿到日出日落时间
关于定位我们要添加#import 头文件

一、定位功能

先创建这两个对象(这里是全局私有):
CLLocationManager* _manager //定位管理 CLGeocoder *_geocoder //地理编码
下面直接上代码了

//定位
    //1.创建定位管理对象
    _manager=[[CLLocationManager alloc]init];
    _geocoder=[[CLGeocoder alloc]init];
    //2.设置属性 distanceFilter、desiredAccuracy
    _manager.distanceFilter=kCLDistanceFilterNone;//实时更新定位位置
    _manager.desiredAccuracy=kCLLocationAccuracyBest;//定位精确度
    if([_manager respondsToSelector:@selector(requestAlwaysAuthorization)])
    {
        [_manager requestAlwaysAuthorization];
    }
    //该模式是抵抗程序在后台被杀,申明不能够被暂停
    _manager.pausesLocationUpdatesAutomatically=NO;
    //3.设置代理   我们要遵循代理:
    _manager.delegate=self;
    //4.开始定位
    [_manager startUpdatingLocation];
    //5.获取朝向
    [_manager startUpdatingHeading];  

下面是代理方法

#pragma mark -- delegate
//定位失败时调用的方法
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError* )error
{
    NSLog(@"%@",error);
}
//定位成功调用的的方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray* )locations
{
    if(locations.count>0)
    {
        //        获取位置信息
        CLLocation *loc=[locations lastObject];
        //        获取经纬度的结构体
        CLLocationCoordinate2D coor=loc.coordinate;
        CLLocation *location=[[CLLocation alloc]initWithLatitude:coor.latitude longitude:coor.longitude];
        [_geocoder reverseGeocodeLocation:location completionHandler:^(NSArray* placemarks, NSError *error) {
            CLPlacemark *pmark=[placemarks firstObject];
            /*//地址字典    这里都是关于位置的一些属性 我们拿到我们需要的信息  最后我打印的是一个完整的信息
            NSLog(@"%@",pmark.addressDictionary);
            位置信息:经纬度
            NSString *city=pmark.location;
             拿到城市  直辖市拿不到
             NSString *city=pmark.locality;
             拿到所在区
             NSString *city=pmark.subLocality;
             拿到所造号
             NSString *city=pmark.subThoroughfare;
             多少路多少号
             NSLog(@"%@",pmark.name);
             所在省份
             NSString *city=pmark.administrativeArea;
             */
            NSString *city=pmark.addressDictionary[@"City"];
//            if([city hasSuffix:@"市辖区"])
//                city=[city substringToIndex:city.length-3];
//            if([city hasSuffix:@"市"])
//                city=[city substringToIndex:city.length-1];
            NSLog(@"城市:%@",city);
            for (CLPlacemark * placemark in placemarks) {
                NSDictionary *test = [placemark addressDictionary];
                //  Country(国家)  State(省份) City(城市)  SubLocality(区)
                NSLog(@"%@", [[test objectForKey:@"Country"] stringByAppendingFormat:[NSString stringWithFormat:@"%@%@%@%@",[test objectForKey:@"State"], [test objectForKey:@"City"],[test objectForKey:@"SubLocality"],[test objectForKey:@"Street"]]]);
            }
        }];
    }
}

二、根据城市名拿到经纬度

还是直接上代码

//根据城市拿到经纬度
    NSString *oreillyAddress = @"beijing";
    CLGeocoder *myGeocoder = [[CLGeocoder alloc] init];
    [myGeocoder geocodeAddressString:oreillyAddress completionHandler:^(NSArray *placemarks, NSError *error) {
        if ([placemarks count] > 0 && error == nil) {
            NSLog(@"Found %lu placemark(s).", (unsigned long)[placemarks count]);
            CLPlacemark *firstPlacemark;
            firstPlacemark = [placemarks objectAtIndex:0];
            NSLog(@"Longitude = %f", firstPlacemark.location.coordinate.longitude);//经度
            NSLog(@"Latitude = %f", firstPlacemark.location.coordinate.latitude);//纬度

三、根据经纬度算日出日落

就用上面那个方法拿到经纬度,算日出日落有一套算法 ,我这里也是用别人写好的类。这是代码位置。展示下使用的代码

//根据经纬度判断
            double latitude = firstPlacemark.location.coordinate.latitude;
            double longitude = firstPlacemark.location.coordinate.longitude;
            NSDate * date=[NSDate date];
           
      //这里的formatter是提前设定好的   也是我们需要展示的时间格式 
       //提前设置的属性:@property (nonatomic, strong) NSDateFormatter* formatter;
            NSLog(@"当前时间%@",[self.formatter stringFromDate:date]);
            NSDate* sunriseDate = RMSunCalculateSunrise(latitude, longitude, date, RMSunZenithOfficial);
            if(sunriseDate == nil)
            {
                // This can occur in the extremes of the upper and lower hemispheres at certain times of year
                NSLog(@"今天没有日出");
            }
            else
            {
                NSLog(@"日出:%@",[self.formatter stringFromDate:sunriseDate]);
            }
            
            NSDate* sunsetDate = RMSunCalculateSunset(latitude, longitude, date, RMSunZenithOfficial);
            if(sunsetDate == nil)
            {
                // This can occur in the extremes of the upper and lower hemispheres at certain times of year
                NSLog(@"今天没有日落") ;
            }
            else
            {
                NSLog(@"日落:%@",[self.formatter stringFromDate:sunsetDate]);
            }

有什么问题可以一起交流哈。。

你可能感兴趣的:(iOS定位功能)