• iPhone开发进阶(10) 在程序中使用GPS


  • 原文链接 : http://www.yifeiyang.net/iphone-developer-advanced-10-use-gps/
  • 转载请保留上面文字。


  • iPhone开发进阶(10)--- 在程序中使用GPS

    这一回简单地介绍一下GPS的使用方法。使用GPS大致分下面两步。

    1. 添加 CoreLocation.framework。
    2. 生成 CLLocationManager 测量位置。

    测试代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    // LocationViewCtrl.h
    #import <UIKit/UIKit.h>
    #import <CoreLocation/CoreLocation.h>
    @interface LocationViewCtrl : UIViewController <CLLocationManagerDelegate>{
      CLLocationManager *man;
    }
    @property(nonatomic, retain) CLLocationManager *man;
    @end
    
    LocationViewCtrl.m
    #import "LocationViewCtrl.h"
    #import <CoreLocation/CoreLocation.h>
    
    @implementation LocationViewCtrl
    @synthesize man;
    
    - (void)viewDidLoad {
      [super viewDidLoad];
      man = [[CLLocationManager alloc] init];
    
      // 如果可以利用本地服务时
      if([man locationServicesEnabled]){
        // 接收事件的实例
        man.delegate = self;
        // 发生事件的的最小距离间隔(缺省是不指定)
        man.distanceFilter = kCLDistanceFilterNone;
        // 精度 (缺省是Best)
        man.desiredAccuracy = kCLLocationAccuracyBest;
        // 开始测量
        [man startUpdatingLocation];
      }
    }
    
    // 如果GPS测量成果以下的函数被调用
    - (void)locationManager:(CLLocationManager *)manager
      didUpdateToLocation:(CLLocation *)newLocation
          fromLocation:(CLLocation *)oldLocation{
    
      // 取得经纬度
      CLLocationCoordinate2D coordinate = newLocation.coordinate;
      CLLocationDegrees latitude = coordinate.latitude;
      CLLocationDegrees longitude = coordinate.longitude;
      // 取得精度
      CLLocationAccuracy horizontal = newLocation.horizontalAccuracy;
      CLLocationAccuracy vertical = newLocation.verticalAccuracy;
      // 取得高度
      CLLocationDistance altitude = newLocation.altitude;
      // 取得时刻
      NSDate *timestamp = [newLocation timestamp];
    
      // 以下面的格式输出 format: <latitude>, <longitude>> +/- <accuracy>m @ <date-time>
      NSLog([newLocation description]);
    
      // 与上次测量地点的间隔距离
      if(oldLocation != nil){
        CLLocationDistance d = [newLocation getDistanceFrom:oldLocation];
        NSLog([NSString stringWithFormat:@"%f", d]);
      }
    }
    
    // 如果GPS测量失败了,下面的函数被调用
    - (void)locationManager:(CLLocationManager *)manager
         didFailWithError:(NSError *)error{
      NSLog([error localizedDescription]);
    }
    ...

    测量精度有以下几类,精度越高越消耗电力。

    kCLLocationAccuracyNearestTenMeters 10m
    kCLLocationAccuracyHundredMeters 100m
    kCLLocationAccuracyKilometer 1km
    kCLLocationAccuracyThreeKilometers 3km

    因为在模拟器上不能设置经纬度,所以只能在实际设备中测试你的GPS程序。

  • 相关阅读:
    Wappalyzer(chrome网站分析插件)
    轻松搞定项目中的空指针异常Caused by: java.lang.NullPointerException: null
    一则sql优化实现接口耗时降低30倍的优化案例
    测试环境部署之填坑记录-Expected one result (or null) to be returned by selectOne(), but found: 2
    性能优化案例(2019-案例78)-接口性能耗时问题分析
    Unitest自动化测试基于HTMLTestRunner报告案例
    scrapy实例:爬取天气、气温等
    Python3爬取豆瓣网电影信息
    Locust压测结果准确性验证
    jd-gui反编译报错// INTERNAL ERROR //
  • 原文地址:https://www.cnblogs.com/chen1987lei/p/1973184.html
  • Copyright © 2020-2023  润新知