• 简易的IOS位置定位服务


    有时一些小的需求,其实只是需要得知当前IOS APP使用的地点,有些只是想精确到城市级别,并不需要任何地图。

    有了以下的简易实现:

    @interface MainViewController ()<CLLocationManagerDelegate>

    ....

    @end

     

    @implementation MainViewController

    - (void)InitLocation {

        //初始化定位服务管理对象

        self.locationManager = [[CLLocationManager alloc] init];

        self.locationManager.delegate = self;

        self.locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;

        self.locationManager.distanceFilter = 1000.0f;

    }

    /*

    其中位置的精确性有如下几个级别,越是精确,程序回调就越慢!当前的例子只是到城市级别,所以使用kCLLocationAccuracyThreeKilometers

    extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

    extern const CLLocationAccuracy kCLLocationAccuracyBest;

    extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;

    extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;

    extern const CLLocationAccuracy kCLLocationAccuracyKilometer;

    extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;

    */

    - (void) viewWillAppear:(BOOL)animated{

        //开始定位

        if(isSetAddress == FALSE){

            dispatch_async(dispatch_get_main_queue(), ^{

                [self InitLocation];

                [self.locationManager requestWhenInUseAuthorization];

                [self.locationManager startUpdatingLocation];

            });

        }

    }

     

    #pragma mark Core Location委托方法用于实现位置的更新,可以得到经纬度,省、城市、街道

    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:

    (NSArray *)locations

    {

        CLLocation * currLocation = [locations lastObject];

        

        NSLog(@"latitude=%3.5f, longitude=%3.5f, altitude=%3.5f", currLocation.coordinate.latitude, currLocation.coordinate.longitude, currLocation.altitude);

        

        CLGeocoder *geocoder = [[CLGeocoder alloc] init];

        [geocoder reverseGeocodeLocation:currLocation

                       completionHandler:^(NSArray *placemarks, NSError *error) {

                           if ([placemarks count] > 0) {

                               CLPlacemark *placemark = placemarks[0];

                               NSDictionary *addressDictionary = placemark.addressDictionary;

                               NSString *address = [addressDictionary objectForKey:(NSString *) kABPersonAddressStreetKey];

                               address = address == nil ? @"": address;

                               NSString *state = [addressDictionary objectForKey:(NSString *) kABPersonAddressStateKey];

                               state = state == nil ? @"": state;

                               NSString *city = [addressDictionary objectForKey:(NSString *) kABPersonAddressCityKey];

                               city = city == nil ? @"": city;

                               NSLog(@"Place description: %@ %@ %@",state, address,city);

                               

                               self.userAddress = [[NSString alloc] initWithFormat:@"%@", city];

                               dispatch_async(dispatch_get_main_queue(), ^{

                                   NSLog(@"SetLiveShowAddress start");

                                   int ret = SetLiveShowAddress(city, address);

                                   if(ret == 0){

                                       isSetAddress = TRUE;

                                       [self.locationManager stopUpdatingLocation];

                                   }

                                   NSLog(@"SetLiveShowAddress end");

                               });

                           }

                       }];

    }

     

    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

    {

        NSLog(@"error: %@",error);

    }

    @end

  • 相关阅读:
    Java 位运算
    Java 自增运算
    Java 变量命名规范
    Java 数据类型
    Java 环境配置
    SQL Server-语句类别、数据库范式、系统数据库组成(一)
    Socket连接时,端口是怎么分配的
    【转载】SQL执行计划
    前端页面播放 rtmp 流与 flv 格式视频文件
    C# Winform Soket 网络编程 多个客户端连接服务器并返回客户端操作请求
  • 原文地址:https://www.cnblogs.com/runner42/p/4638836.html
Copyright © 2020-2023  润新知