• 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:定位失败。

  • 相关阅读:
    Linux设备树(四 中断)
    Linux设备树(三 属性)
    Linux设备树(二 节点)
    责任链设计模式
    获取服务器内存和可用线程
    秒杀抢购思路解析
    Hystrix 用法及注解用法
    object is not an instance of declaring class
    sqlserver 截取字符串
    sqlserver 转化函数
  • 原文地址:https://www.cnblogs.com/yaoxc/p/3721686.html
Copyright © 2020-2023  润新知