Core Location主要应用了GPS, 蜂窝基站三角网以及Wi_Fi(WPS)三种技术。

  • 使用GPS定位系统,可以精确地定位你当前所在的地理位置,但由于GPS接收机需要对准天空才能工作,因此在室内环境基本无用。
  • 另一个找到自己所在位置的有效方法是使用手机基站,手机开机时,它会与周围的基站保持联系,如果你知道这些基站的身份,就可以使用各种数据库(包含基站的身份和它们的确切地理位置)计算出手机的物理位置。基站不需要卫星,和GPS不同,它对室内环境一样管用。但它没有GPS那样精确,它的精度取决于基站的密度,它在基站密集型区域的准确度最高。
  • 第三种方法是依赖Wi-Fi,使用这种方法时,设备连接到Wi-Fi网络,通过检查服务提供商的数据确定位置,它既不依赖卫星,也不依赖基站,因此这个方法对于可以连接到Wi-Fi网络的区域有效,但它的精确度也是这三个方法中最差的。

想得到定点的信息,需要涉及到几个类,CLLocationManager, CLLocation, CLLocationManagerdelegate协议,CLLocationCoodinate2D, CLLocationDegrees。

<一>先实例化一个CLLocationManager,同时设置委托及精确度等。

CCLocationManager *manager = [[CLLocationManager alloc] init];//初始化定位器
[manager setDelegate: self];//设置代理
[manager setDesiredAccuracy: kCLLocationAccuracyBest];//设置精确度


其中desiredAccuracy属性表示精确度,有5种选择如下:

desiredAccuracy属性

描述

kCLLocationAccuracyBest

精确度最佳

kCLLocationAccuracynearestTenMeters

精确度10m以内

kCLLocationAccuracyHundredMeters

精确度100m以内

kCLLocationAccuracyKilometer

精确度1000m以内

kCLLocationAccuracyThreeKilometers

精确度3000m以内

NOTE:精确度越高,用点越多,就要根据实际情况而定。

manager.distanceFilter = 250;//这个表示在地图上每隔250m才更新一次定位信息。

[manager startUpdateLocation]; 启动定位器,如果不用的时候就必须调用stopUpdateLocation以关闭定位功能。

<二>CCLocation对像中包含着定点的相关信息数据。其属性主要包括coordinate, altitude,horizontalAccuracy,verticalAccuracy, timestamp等,分别如下:

coordinate 用来存储地理位置的latitude和longitude,分别表示纬度和经度,都是float类型.如可这样: float latitude = location.coordinat.latitude; location是CCLocation的实例。这里也把上面提到的CLLocationDegrees,它其实是一个double类型,在core Location框架中是用来储存CLLocationCoordinate2D实例coordinate的latitude 和longitude,

typedef double CLLocationDegrees;

typedef struct 

  {CLLocationDegrees latitude; 

  CLLocationDegrees longitude}  CLLocationCoordinate2D;

altitude 表示位置的海拔高度,这个值是极不准确的。

horizontalAccuracy 表示水平准确度,这么理解,它是以coordinate为圆心的半径,返回的值越小,证明准确度越好,如果是负数,则表示core location定位失败。

verticalAccuracy表示垂直准确度,它的返回值与altitude相关,所以不准确。

Timestamp 返回的是定位时的时间,是NSDate类型。

<三>CLLocationMangerDelegate协议

我们只需实现两个方法就可以了,如下:

- (void)locationManager:(CLLocationManager *)manager 

didUpdateToLocation:(CLLocation *)newLocation 

   fromLocation:(CLLocation *)oldLocation ;

- (void)locationManager:(CLLocationManager *)manager 

   didFailWithError:(NSError *)error;

上面第一个是定位时候回访调,后者定位出错时被调。

<四>现在可以去实现定位了:

新建一个view-based application模板的工程,假设项目名称为coreLocation.我们在contronller的头文件和源文件中的代码大概有如下:

.h

#import <UIKit/UIKit.h>

#import <CoreLocation/CoreLocation.h>

@interface CoreLocationViewController : UIViewController 

<CLLocationManagerDelegate>{

 CLLocationManager *locManager;

}

@property (nonatomic, retain) CLLocationManager *locManager;

@end

.m

#import "CoreLocationViewController.h"

@implementation CoreLocationViewController

@synthesize locManager;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad {

locManager = [[CLLocationManager alloc] init];

locManager.delegate = self;

locManager.desiredAccuracy = kCLLocationAccuracyBest;

[locManager startUpdatingLocation];

    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning {

// Releases the view if it doesn't have a superview.

[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.

}

- (void)viewDidUnload {

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

}

- (void)dealloc {

[locManager stopUpdatingLocation];

[locManager release];

[textView release];

[super dealloc];

}

#pragma mark -

#pragma mark CoreLocation Delegate Methods

- (void)locationManager:(CLLocationManager *)manager 

didUpdateToLocation:(CLLocation *)newLocation 

   fromLocation:(CLLocation *)oldLocation {

CLLocationCoordinate2D locat = [newLocation coordinate];

float lattitude = locat.latitude;

float longitude = locat.longitude;

float horizon = newLocation.horizontalAccuracy;

float vertical = newLocation.verticalAccuracy;

NSString *strShow = [[NSString alloc] initWithFormat:

@"currentpos: 经度=%f 维度=%f 水平准确读=%f 垂直准确度=%f ",

lattitude, longitude, horizon, vertical];

UIAlertView *show = [[UIAlertView alloc] initWithTitle:@"coreLoacation"

message:strShow delegate:nil cancelButtonTitle:@"i got it"

otherButtonTitles:nil];

[show show];

[show release];

}

- (void)locationManager:(CLLocationManager *)manager 

   didFailWithError:(NSError *)error{

NSString *errorMessage;

if ([error code] == kCLErrorDenied){

errorMessage = @"你的访问被拒绝";}

if ([error code] == kCLErrorLocationUnknown) {

errorMessage = @"无法定位到你的位置!";}

UIAlertView *alert = [[UIAlertView alloc]

initWithTitle:nil  message:errorMessage

delegate:self  cancelButtonTitle:@"确定"  otherButtonTitles:nil];

[alert show];

[alert release];

}

@end

转载于:https://www.cnblogs.com/ylucy/archive/2011/08/30/2159924.html

Core Location定位相关推荐

  1. 《iPhone开发基础教程》第13章 我在哪里?使用Core Location定位功能

    Core Location可以利用三种技术实现定位:GPS.蜂窝基站三角网定位(cell tower triangulation)和Wi-Fi定位服务(WPS). GPS是最精确的,但在第一代iPho ...

  2. 简述Core Location定位功能

    移动设备的定位功能很强大,可以做很多有意思的应用,比如LBS,GPS等等. Core Location依赖于3种不同的方式,每种方式在给定的平台上可能可用,也可能不可用.这些方式受每种设备内置功能的限 ...

  3. iOS Core Location 实现定位

    在iphone中可以用core location功能来实现地理定位,并可用mapkit 框架加载google地图. 想得到定点的信息,其实 不难,只需要涉及到几个类,CLLocationManager ...

  4. Core Location :⽤用于地理定位

    Core Location :⽤用于地理定位 在移动互联⽹网时代,移动app能解决⽤用户的很多⽣生活琐事,⽐比如 导航:去任意陌⽣生的地⽅方 周边:找餐馆.找酒店.找银⾏行.找电影院 在上述应⽤用中, ...

  5. Core Location和MapKit的一些简单使用

    Core Location 1. 基本对象是CLLocation,有属性coordinate, altitude, horizontal/vertical Accuracy, timestamp, s ...

  6. location定位_旅游英语必备单词:location

    · ViTalk旅游英语原创文章,转载请联系我们授权 · 今日关键词: location /loʊˈkeɪʃ(ə)n/ 位置:地点 今天小学妹要和大家一起来学习一个在旅行中很有用的单词:locatio ...

  7. location定位_javascript自学记录:location对象

    8.2 location对象 window.location与document.location都可以访问,是指向的同一对象.下面是location的属性的示例: // 以下都以此url为例:http ...

  8. 高德地图api之location定位

    关于定位,分为GPS定位和网络定位.本文将详细描述的浏览器定位,属于网络定位.这是一种通过使用高德JS-API来实现位置定位.城市定位的方法,包含了IP定位,检索等多种网络定位方式.如果您的手机支持G ...

  9. 地图location定位

    2019独角兽企业重金招聘Python工程师标准>>> #import <UIKit/UIKit.h> @interface MapViewController : UI ...

最新文章

  1. [FaceBook]测试、发布和分享小游戏
  2. vim粘帖的一个问题分析(pastetoggle)
  3. 【 FPGA 】FIR 滤波器的架构
  4. 取代C语言标准输入输出:cin 和 cout【C++标准输入输出】
  5. 【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理
  6. boost::fusion::vector用法的测试程序
  7. asp.net导出Excel类库
  8. 医学专用计算机证,问一下,医学生考计算机2级证和心理咨询师证有用吗
  9. 定点乘法运算之原码一位乘法
  10. AZURE-百万像素定焦镜头
  11. python什么是交换算法_确定交换的算法
  12. C#与.NET程序员面试宝典 1.2.4 简历中的闪光点----突出可转移技能(可能是你忽略的优势)...
  13. 克莱姆法则(Cramer's Rule)
  14. 成为嵌入式高手,少不了这100多个软硬件开源项目!
  15. java题兔子第三个月生_JAVA编程之古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子...
  16. 划分训练集,验证集,测试集
  17. android 机器人绘制,Android绘制机器人小实例
  18. 流媒体服务器Darwin Streamer安装配置
  19. 低功耗、高性能智能开发主板MED3568
  20. 20194616 第一次作业

热门文章

  1. 详解语义分割评价指标
  2. 日常生活小技巧 -- SecureCRT上传和下载文件
  3. UNIX再学习 -- 文件描述符
  4. 怎么查看ftp服务器的版本信息,查看ftp服务器版本
  5. 一篇不一样的docker原理解析
  6. Tutorial on Variational AutoEncoders
  7. (原创)Android6.0亮屏流程之Keyguard Window绘制
  8. 在windows下将Tomcat设置为自动启动的服务
  9. 和nptf螺纹一样吗_摩托车火花塞长短不同,对发动机有影响吗?
  10. 在Ubuntu中使用OTB-50测试ECO模型