iOS定位服务与地图开发(1)---获取经纬度

这一生的挚爱 提交于 2020-03-07 07:35:08

定位服务是通过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:定位失败。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!