Core Location定位

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

时间: 2024-10-05 10:58:41

Core Location定位的相关文章

iOS Core Location 实现定位

在iphone中可以用core location功能来实现地理定位,并可用mapkit 框架加载google地图. 想得到定点的信息,其实 不难,只需要涉及到几个类,CLLocationManager, CLLocation, CLLocationManagerdelegate协 议,CLLocationCoodinate2D, CLLocationDegrees. <一>先实例化一个CLLocationManager,同时设置委托及精确度等. CCLocationManager *manag

Core Location :?用于地理定位

Core Location :?用于地理定位 在移动互联?网时代,移动app能解决?用户的很多?生活琐事,?比如 导航:去任意陌?生的地?方 周边:找餐馆.找酒店.找银?行.找电影院 在上述应?用中,都?用到了地图和定位功能,在iOS开发中,要想加?入这2?大功 能,必须基于2个框架进?行开发 Map Kit :?用于地图展?示 Core Location :?用于地理定位 2个热门专业术语 LBS :Location Based Service SoLoMo :Social Local Mob

关于Core Location-ios定位

IOS中的core location提供了定位功能,能定位装置的当前坐标,同一时候能得到装置移动信息.由于对定位装置的轮询是非常耗电的,所以最好仅仅在非常必要的前提下启动. 当中,最重要的类是CLLocationManager,定位管理. 其定位有3种方式: 1,GPS,最精确的定位方式,貌似iphone1是不支持的. 2,蜂窝基站三角定位,这样的定位在信号基站比較秘籍的城市比較准确. 3,Wifi,这样的方式貌似是通过网络运营商的数据库得到的数据,在3种定位种最不精确 使用方式: 1,引入Co

精通IOS开发-Core Location和Map Kit

一.Core Location确定物理位置 利用以下3种技术: 1.GPS(最精确的) 2.蜂窝基站ID定位(cell ID Location) 3.WPS(Wi-Fi Positioning Service,Wi-Fi定位服务) 这3种方法都很耗电,使用Core Location时要注意这一点,尽量只在必要时进行定位.使用时,我们可以根据需要指定精度.注意,在指定绝对最低精度级别时要谨慎,避免不必要的电力消耗. Core Location所依赖的技术对于应用来说是隐藏的.我们不需要指定哪种技术

Core Location in i?OS 8

自从 iPhone 存在以来,位置服务就一直处于非常重要的位置.Maps.app 是第一代 iPhone 里杀手锏的功能之一.Core Location API 也在 iPhone OS SDK 最初的公开版本里就存在了.每一次发布 iOS,Apple 都会给这个库逐步添加新功能,比如后台运行的位置服务,坐标化,以及室内定位( iBeacons ). iOS 8 仍然继续坚定的延续着这个进程.跟其他最新的更新类似,Core Location 被改动了不少,不管是允许开发者做之前并不被允许的开发,

IOS开发之Core Location

IOS 支持三种检测当前位置的方式:手机基站.Wi-Fi.和GPS,其中GPS是经度最高的,同时也是最耗费手机电量的.一般情况下在室内是无法通过GPS获 取位置信息的,通过Wi-Fi获取位置的原理是通过网络提供商的IP地址信息来获取位置,经度不是很高,最后是通过手机基站获取位置,手机开机后会连接附 近的基站塔获取信号,通过基站可以得到手机所在的位置信息,基站越密集,所获取的位置信息经度就越高. IOS SDK提供的Core Location能比较好的提供获取位置信息的功能,获取位置信息涉及如下几

selenium使用location定位元素坐标偏差

python+selenium+Chromedriver使用location定位元素坐标偏差使用xpath定位元素,用.location获取坐标值,截取网页截图的一部分出现偏差. 之所以会出现这个坐标偏差是因为windows系统下电脑设置的显示缩放比例造成的,location获取的坐标是按显示100%时得到的坐标,而截图所使用的坐标却是需要根据显示缩放比例缩放后对应的图片所确定的,因此就出现了偏差.解决这个问题有三种方法:1.修改电脑显示设置为100%.这是最简单的方法:2.缩放截取到的页面图片

iOS8后core location框架启动定位服务的步骤

1.在使用CoreLocation前需要调用如下函数[iOS 8专用]: iOS 8对定位进行了一些修改,其中包括定位授权的方法,CLLocationManager增加了下面的两个方法: (1)始终允许访问位置信息 - (void)requestAlwaysAuthorization; (2)使用应用程序期间允许访问位置数据 - (void)requestWhenInUseAuthorization; 示例如下: self.locationManager = [[CLLocationManage

iOS_mapKit与Core Location

目 录: 一.使用MKMap控件 二.根据地址定位 三.在地图上添加锚点 iOS从3.0版本开始提供了MapKit.frameword支持.该框架提供了一个可被嵌入到应用程序中的地图视图类MKMapView,该地图视图类包含一个可上下.左右滚动的地图视图,而且可以非常方便地在地图中添加定制消息,并可以将其嵌入到应用程序中,通过编程的方式设置地图的各种属性(包含当前地图显示的区域以及用户当前所在位置). iOS从4.0开始,MapKit框架支持可拖动标注和定制覆盖层.可拖动标注允许开发者以编程的方