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

原文地址:https://www.cnblogs.com/yaoxc/p/3721686.html