zoukankan      html  css  js  c++  java
  • iOS定位服务与地图开发(1)---获取经纬度

    定位服务是通过GPS等方式查找定位自己的位置的,再通过地图标注出来。

    在iOS中定位服务和地图开发是使用两套API分别完成的。

    1、定位服务:

    iOS系统提供3种不同定位途径:

    1>WiFi定位:通过查询一个WiFi路由器的地理位置信息,iPhone、iPod Touch、iPad都可以采用。

    2>蜂窝式移动电话基站定位:通过移动运营商基站定位

    3>GPS卫星定位:通过3~4颗GPS卫星位置定位,最为准确,但是耗电量大

    iOS不像Android系统在定位服务编程时可以指定采用哪种途径进行定位。iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备采用哪种方式进行定位,iOS系统会根据设备的情况和周围环境,采用一套最佳的解决方案。具体是:如果能够GPS信息,那么设备优先采用GPS定位,否则采用WiFi或蜂窝基站定位,在WiFi和蜂窝基站之间优先使用WiFi,如果无法连接到WiFi才使用蜂窝基站定位。

    1.1、定位服务编程

    在iOS 6之后,定位服务主要使用CoreLocaation框架,定位时主要使用CLLocationManager、CLLocationManagerDelegate和CCLocation。

    CLLocationManager类:定位服务管理类,它能够使我们获得设备的位置信息高度信息,也可以监控设备进入某个区域,还可以帮助我们获得设备的运行方向

    CLLocationManagerDelegate类:是CLLocationManager类的委托协议。

    CLLocation类:封装了位置和高度信息。

    下面具体操作:

        第一步,新建一个singleView的空白工程

        第二步:向工程中引入framework:CoreLocation.framework

    主界面的控制器 ViewController.h 文件中,我们啥也不做,.m文件中,我们需声明一个 CLLocationManager* locationManager的属性,我们让其实现CLLocationManagerDelegate的协议,并实现代理方法didUpdateLocations和didFailWithError,如下://// ViewController.m

    //  CLLocationManager
    //
    //  Created by apple on 14-5-11.
    //  Copyright (c) 2014年 姚新超. All rights reserved.
    //
    
    #import "ViewController.h"
    #import <CoreLocation/CoreLocation.h>
    @interface ViewController ()<CLLocationManagerDelegate>{
        
    }
    
    @property (nonatomic,strong) CLLocationManager* locationManager;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.
    // 定位服务管理对象初始化
      self.locationManager = [[CLLocationManager alloc] init];
    // 设置代理 self.locationManager.delegate = self; // 设置定位的精准度 self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    // 设置设备移动更新位置信息的最小距离,单位是米 self.locationManager.distanceFilter = kCLDistanceFilterNone; self.locationManager.purpose = @"To provide functionality based on user's current location."; } - (void)viewWillAppear:(BOOL)animated
    {
      [super viewWillAppear:animatted];
      // 开始定位
     
    [self.locationManager startUpdatingLocation];
    }

    - (void)viewWillDisappear:(BOOL)animated
    {
      [super
    viewWillDisappear:animated];
      // 停止定位
      
    [self.locationManager stopUpdatingLocation];
    }
    
    @end
    #pragma mark - 委托方法用于实现位置的更新
    // 实时调用的方法,调用频率为1s中一次 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { // 设备的当前位置 CLLocation *currLocation = [locations lastObject]; NSString *latitude = [NSString stringWithFormat:@"纬度:%3.5f",currLocation.coordinate.latitude]; NSString *longitude = [NSString stringWithFormat:@"经度:%3.5f",currLocation.coordinate.longitude]; NSString *altitude = [NSString stringWithFormat:@"高度值:%3.5f",currLocation.altitude]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"error : %@",error.localizedDescription); }

    locationManager: didUpdateLocations:iOS 6新增方法,定位成功时调用,用于替代之前的locationManager:didUpdateToLocation:fromLocation:方法。

    locationManager: didFailWithError:定位失败。

  • 相关阅读:
    .linearDrag on rigidbody / rigidbody2D in code?
    Unity5权威讲解+项目源码+MP4
    C#的扩展方法解说
    use crunch compression
    IIS服务命令
    使用批处理打开控制面板中的功能
    一次性在一个文件夹里建立多个文件夹
    bat 批处理切换到当前脚本所在文件夹
    %date~0,4%和 %time~0,2%等用法详解(转)
    DOS批处理高级教程(还不错)(转)
  • 原文地址:https://www.cnblogs.com/yaoxc/p/3721686.html
Copyright © 2011-2022 走看看