iOS GPS定位開發基礎知識

jopen 10年前發布 | 99K 次閱讀 IOS iOS開發 移動開發

iOS -GPS定位服務和地圖應用是兩套完全不同的API。

iOS 7 的 四種定位服務

  • GPS衛星  優點最為準確,缺點 耗電量大,不能遮擋(建筑物內不行)
  • WI-FI通過WIFI路由器定位 優點比較省電,經濟實惠
  • 蜂窩式移動電話基站。通過移動運營商基站定位 誤差比較大
  • iBeacon微定位。 蘋果公司自己研發的iBeacon,使用低功耗的藍牙。
  • </ul>

    iOS 定位服務開發不需要指定定位途徑(除了微定位外)ios 會根據設備的情況采用最佳方案,如果能接受GPS優先采用GPS定位,次之是Wi-Fi ,最后是蜂窩式基站定位;


    iOS 7 定位服務使用Core Location框架


    • CLLocationManager 用于定位管理的類,他提供位置信息和高度信息,也可以監控設備進入或者離開某個區域,還可以獲得設備的運行方向;
    • CLLocationManagerDelegate。CLLocationManager類的委托協議;
    • CLLocation 封裝了位置和高度信息;
    • </ul>

      第一次請求定位信息時,系統會提示用戶是否允許開啟定位服務。
      </div>


       - (void)viewDidLoad
      {
          [super viewDidLoad];
          locationManager = [[CLLocationManager alloc]init];
          locationManager.delegate = self;
          locationManager.desiredAccuracy = kCLLocationAccuracyBest;
          locationManager.distanceFilter = 1000.f;
      } 
      初始化一個定位管理器 設置好代理 

      desireAccuracy這個屬性用來設置經度的

      kCLLocationAccuracyBest; 電池供電的最高精度
      kCLLocationAccuracyNearestTenMeters; 精確到10米
      kCLLocationAccuracyHundredMeters;精確到100米
      kCLLocationAccuracyKilometer;精確到1000米
      kCLLocationAccuracyThreeKilometers;精確到3000米

      經度越高獲得信息時間越短。耗電越多。

      distabceFilter 屬性定義了設備移動后獲得位置信息的最小距離,單位是米;

      設置距離篩選器distanceFilter,表示設備至少移動1000米,才通知委托更新

      在視圖展現的時候分別開啟和關閉定位服務

      - (void)viewWillAppear:(BOOL)animated
      {
          [super viewWillAppear:animated];
          [locationManager startUpdatingLocation];
      }

      • (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [locationManager stopUpdatingLocation]; }</pre>
        當獲取位置成功的時候進行調用代理來獲取數據

        - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
        {
          CLLocation * currentLocation = [locations lastObject];
          double  altitude = currentLocation.altitude;//高度
          double  latitude = currentLocation.coordinate.latitude;
          double  longitude = currentLocation.coordinate.longitude;
        }

        代理中得lication是位置數據數組,最后一個是當前位置 ;

        cllocation類

              初始化函數

          – initWithLatitude:longitude:
          – initWithCoordinate:altitude:horizontalAccuracy:verticalAccuracy:timestamp:
          – initWithCoordinate:altitude:horizontalAccuracy:verticalAccuracy:course:speed:timestamp:
          屬性:
             coordinate  property             地理坐標
             altitude  property               高度
             horizontalAccuracy  property     地圖中顯示圓的半徑
             verticalAccuracy  property       垂直高度的精確度
             timestamp  property              位置確定的時間
          – distanceFromLocation:   指定位置到當前位置的距離
             speed  property              運動的速度
             course  property         設備的方向
        
        

        CLLocation 封裝了位置、高度等信息

          altitude是高度值 coordinate是封裝的經緯度的結構體 CLLocationCoordinate2D
          typedef struct {
          CLLocationDegrees latitude;     //經度
          CLLocationDegrees longitude;    //緯度
          } CLLocationCoordinate2D;
        
          CLLocationDegrees 是double類型別名</pre><br />
     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!