CLLocation类代表三个地方消息,一 、获取当前稳定公海赌船网址

回调的方式有:
-(void)reverseGeocoder:(MKReverseGeocoder *) geocoded
didFindPlacemark:(MKPlacemark *)placemark;  //转换到功
-(void)reverseGeocoder : (MKReverseGeocoder *)geocoded
didFailWithError:(NSError *)error; //转换战败

是CLLocation的属性表明:

————CLLocation
CLLocation类代表2个地方消息,其中还包含了种类化和速度。比如本身在长安街188号以5英里/小时的速度往东走。CLLocation具有上面的质量和艺术:
@property  CLLocationCoordinate2D coordinate;
//以经度和纬度表示的义务消息
@property CLLocationDistance altitude;  //海拔
@property CLLocationAccuracy horizontalAccuracy;
//水平精度(如:精确到米)
@property CLLocationAccuracy verticalAccuracy; //垂直精度
@property CLLocationDirection course; //方向
@property CLLocationSpeed speed; //速度
-(NSDate *)timeStamp;
//三个岗位之间的离开
-(CLLocationDistance)distanceFromLocation:(CLLocation *)location;

20           placemark.subLocality,

MapKit框架:
    
首要提供了七个职能:显示地图、CLLocation和地址之间的转移、支持在地形图上做标记(比如标记新加坡崇文门广场)、把贰个职位解析成地址(比如小编在水立方,想要知道适当的地址新闻)。
 MKMapView类:重若是形成下述功效:
——-突显地图,比如:突显香江市的地形图;
——-提供八种突显方式,比如标准地图格式,卫星地形图等;
——-协助地图的拓宽裁减;
——-支持在地图上做标记,比如标记神武门广场;
——-在地形图上显示手机所在的脚下岗位。
MKMapView类的天性有:
@property MKCoordinateRegin region; //地图所突显的区域
@property CLLocationCoordinate2D centerCoordinate;
//经度和纬度分明的主干岗位
@property MKMapView mapType; //地图的来得档次,如:卫星地形图
@property NSArray *annotations; //地图上的标记
@property MKUserLocation userLocation; //用户位置
@property id <MKMapViewDelegate>delegate; //委托类

18}

装载地图时的回调方法有:
-(void)mapViewWillStartLocationMap:(MKMapView *) mapView;
//开首装载地图
-(void)mapViewDidFinishLocationMap:(MKMapView  *)mapView;
//截至装载地图
-(void)mapVewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError
*)error; //装载失利

09

————-CLLocationManager
CLLocationManager类管理和提供地点服务。它的性质和情势有:
@property CLLocation *location; //位置
@property id<CLLocationManagerDelegate> delegate;
@property CLLocationDistance distanceFilter; //距离过滤,比如:500以内
@property CLlocationAccuracy verticalAccuracy; //垂直精度
-(void) startUpdatingLocation;
//开端更新地方(比如:你在往有些地点走)
-(void)stopUpdatingLocation; //为止更新地点
-(void)startUpdatingHeading; //起初更新方向(比如:你改向东走)
-(void)stopUpdatingHeading; //甘休更新方向
CLLocationManagerDelegate是一个委托类。你的应用程序必要运用那几个委托类。当用户改变地方的时候,CLLocationManager回调的措施是:
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation
*)oldLocation;
当用户改变方向的时候,所调用的格局是:
-(void)locationManager:(CLLocationManager *)manager
didUpdateHeading:(CLLHeading *)newHeading;
当Samsung无法得到当前岗位的消息时,所回调的办法是:
-(void)locationManager: (CLLocationManager *)manager
didFailLoadWithError:(NSError *)error;

04        manager.distanceFilter = kCLDistanceFilterNone;

=========================================================================
上边大家来看多少个地点类的为主步骤:
① 、运维定位服务
CLLocationManager *locManager = [[CLLocationManager alloc] init];
locManager.delegate = self;
[locManager startUpdatingLocation];
② 、拿到地点消息
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation fromLocation: (CLLocation
*)oldLocation
{
NSTimeInterval howRecent = [newLocation.timestamp
timeIntervalSinceNow];
if(howRecent < -10) return ; //离上次立异的时刻少于10秒
if(newLocation.horizontalAccuracy > 100) return; //精度> 100米
//经度和纬度
double lat = newLocation.coordinate.latitude;
double lon = newLocation.coordinate.longitude;
}
叁 、拿到方向消息(比如向西走)
-(void)locationManager:(CLLocationManager *)manager
didUpdateHeading:(CLHeading *)newHeading
{
//拿到方向
CLLocationDirection heading = newHeading .trueHeading;
}
四 、截止定位
[locManager stopUpdatingLocation];
你可以安装你想要的精度和离开过滤:
locManager.desiredAccuracy = kLLocationAccuracyBest;
locManager.distanceFilter = 1000;

15        _coordinate=coordinate;

One plus SDK提供了八个类来治本岗位音讯:CLLocation CLLocationManager 和
CLLHeading(不常用)。除了利用GPS来收获当前的地点音讯外,一加也足以依据WiFi基站和无线发射塔来得到地方音信。GPS的精度
最高,可以准确到米级别,然则也最功耗。

20-(void)setCoordinate:(CLLocationCoordinate2D)newCoordinate{

当地方发生变更时的回调方法:
-(void)mapView:(MKMapView *)mapView
region威尔ChangeAnimated:(BOOL)animated; //将要更改
-(void)mapView: (MKMapView *)mapView
regionDidChangeAnimated:(BOOL)animated; //已经更改

行驶速度

MKPlacemark、MKUserLocation和MKReverseGeocoder
在地图上做标记是因而MKPlacemark类来成功的。那几个类应用(符合)MKAnnotation协议。MKAnnotation包蕴了三个特性,如:地点(经纬度,CLLocationCoordinate2D类型)、文字标记新闻(NSString类型)等。
MKPlacemark保存了义务(经纬度)和地点(字典类)之间的映照。下边是它的起先化方法:
-(void)initWithCoordinate:(CLLocationCoordinate2D *)coordinate
addressDictionary:(NSDictionary *)dictionary;
MKUserLocation
就是指手机的当前义务,它是MKAnnotation的2个专门案例(因为MKAnnotation可以是地图上的其余标记,而
MKUserLocation只是标志了地图上手机所在的近年来地方)。那些类富含了多个属性:手机的地点(类型为CLLocation)、地方文字新闻(类型为NSString)等。
MKPlacemark保存了义务(经纬度)和地点之间的映射。那么,有没有工具在这两者之间做转换呢?这就是MKRecerseGeocoder.给定二个岗位音信,这一个类可以回到相应的地点音讯。MKReverseGeocoder的伊始化方法为:
-(void)initWithCoodinate:(CLLocationCoordinate2D)coordinate;
下边是MKReverseGeocoder常用的片段性质和艺术:
@property id <MKReverseGeocoderDelegate>delegate; //委托
-(void)start; //开端更换
-(void)cancel; //裁撤转换

01-  (void)locationManager:(CLLocationManager *)manager

01-  (MKAnnotationView *)mapView:(MKMapView *)mapView

26        didFailWithError:(NSError *)error

02             viewForAnnotation:(id )annotation

31

05-(id)initWithCoordinate:(CLLocationCoordinate2D)coordinate;

03            fromLocation:(CLLocation *)oldLocation

06        manager.delegate = self;

29    return nil;

地方的商事格局就是MapView告诉你他要求出示哪个annotation,然后展现的样式由用户你协调主宰,但必须求继承MKAnnotationView类。

25    return @”作者的地点”;

21    _coordinate=newCoordinate;

接下去要改写一下获取一定打响后的艺术,等待获取一定打响后把经纬度设置到地图上浮现。完成代码如下:

Speed

度,kCLLocationAccuracyBest表示最标准,但也预示着索要消耗越来越多的日子和电量,所以应当依据须求设定。

03               completionHandler:^(NSArray *placemarks,

12}

17    return self;

13                              placemark.inlandWater,

4        MKMapView *mapView=[[MKMapView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 460.0)];

11                              placemark.ISOcountryCode,

02    CLLocationCoordinate2D _coordinate;

03            fromLocation:(CLLocation *)oldLocation

24-(NSString *)title{

12{

07@end

24

02     didUpdateToLocation:(CLLocation *)newLocation

17       didFailWithError:(NSError *)error

AnnotationView设置其canShowCallout属性为YES时,则当用户点击AnnotationView时会弹出二个Callout

18{

08    {

08}

回到了三个地标地方,然而CLGeocoder则赶回了3个暗含七个地标地方的数组,但这几个数组在平时意况下是只有2个因素,如若存在两个因素那表达了给

上述代码中加粗部分的代码就是把经纬度消息打包到刚刚概念好的对象中。然后通过addAnnotation方法传递给MapView;那里的

20}

05    DemoAnnotation *annotation = [[DemoAnnotation alloc] initWithCoordinate:newLocation.coordinate];

01-  (void)locationManager:(CLLocationManager *)manager

5        mapView.delegate = self;

12{

地区、街道等)。

29}

04{

07    if (annotationView==nil)

13-(id)initWithCoordinate:(CLLocationCoordinate2D)coordinate{

10- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder

08                              placemark.name,

14    [manager stopUpdatingLocation];

01CLGeocoder *geocoder=[[CLGeocoder alloc] init];

10    annotationView.canShowCallout = YES;

定点准确度。其中代码中的distanceFilter表示更新位置的相距,假诺超过设定值则开展定位更新,否则不改进。代码中的

6        [self.view addSubview:mapView];

32@end

16    }

14                              placemark.administrativeArea,

15                              placemark.subAdministrativeArea,

coordinate

_mapView是把在此之前viewDidLoad方法中的一时半刻变量改变为类属性以高达跨方法引用的目的。经过地点步骤已经把本身的职位引入到地图里面了,但

19           placemark.locality,

05    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)

体制来突显地点。如下:

图中呈现后都对应一个MKAnnotationView,而MKAnnotationView又承担解析了多个达成MKAnnotation协议的数码对

笔直方向的精确度

时间戳

23

25-  (void)reverseGeocoder:(MKReverseGeocoder *)geocoder

01if([CLLocationManager locationServicesEnabled]){

26}

10

21           placemark.thoroughfare,

12

水平方向的精确度

09@implementation DemoAnnotation

27{

09    MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate];

如下面代码所示CLLocationManager就是用于获取一定音讯对象类,在骨子里运用中可以依据自身的内需来设置一定的创新频率以及

19    [manager stopUpdatingLocation];

19                              placemark.subThoroughfare);

17                              placemark.subLocality,

经纬度

timestamp

03}

loctionManager:didUpdateToLocation:fromLocation;委托方法来通告委托对象的,因此委托对象必须贯彻

那么CLLocationManager是透过哪些点子来打开定位的啊?他是因此调用startUpdatingLocation开启定位

19

18                              placemark.thoroughfare,

7        [mapView release];

地点的代码是在拿到到经纬度后,立时展开反向地理地方分析的。其实MKReverseGeocoder用法也比较简单,通过经纬度早先化后直接调用

② 、获取地理地方音讯

kCLDistanceFilterNone代表不设置距离过滤,即随时更新地理地点。desiredAccuracy属性表示收获一定的精

07                       NSLog(@”name:%@\n country:%@\n postalCode:%@\n ISOcountryCode:%@\n ocean:%@\n inlandWater:%@\n locality:%@\n subLocality:%@\n administrativeArea:%@\n subAdministrativeArea:%@\n thoroughfare:%@\n subThoroughfare:%@\n”,

iOS提供了一个叫作CoreLocation.framework的框架。使用他得以取到自身的稳定音讯(经纬度)。请参见下边代码片段:

功能,然后采用stopUpdatingLocation截至定位,其中固定消息是因而

2{

但从iOS5过后MKReverseGeocoder成为了不引进应用的类。因而有2个新的类取代了她的意义,那就是CLGeocoder类,使用该类举行反向解析也非凡不难,请看下边代码:

10        geocoder.delegate = self;

属性

11    }

http://hi.baidu.com/wolf\_childer/item/cc7c2bf7a2b88311fe3582f8

10                              placemark.postalCode,

视图,用于显示title和subtitle,假若设置title为nil那么固然canShowCallout为YES也不会弹出Callout视图。

描述

明日还不会显示在地形图上,因为还亟需完结MapView中的协议,告诉MapView如何显示你Annotation。以下代码应用iOS中暗中同意的大头针

09                              placemark.country,

06    geocoder.delegate = self;

verticalAccuracy

06                       CLPlacemark *placemark=[placemarks objectAtIndex:0];

14    if (self = [super init]) {

11        [geocoder start];

04

03        CLLocationManager *manager = [[CLLocationManager alloc] init];

15}

08

06

10    didUpdateToLocation:(CLLocation *)newLocation

MKReverseGeocoderDelegate委托。解析成功后会再次来到多个MKPlacemark的靶子里面富含了相关的地理地方音讯(包括国家、

07    [geocoder start];

06    [_mapView addAnnotation:annotation];

04                                   NSError *error)

horizontalAccuracy

18           placemark.subAdministrativeArea,

16           placemark.ISOcountryCode,

图封装到SDK里面了,我们得以用很少的代码来促成无数在地图上的操作(如标记地方、绘画线路等)。下边的代码是生成一张地图并呈现到界面上:

想进一步形象地显现出地方音讯靠文字的讲述是遥远不够的,因为运用地图来展现地理地方将会给用户带来崭新的经验。在iOS里面早已将谷歌地

当您取到了1个经纬度消息时,或许还有如此的贰个须求,那就是当前的经纬度所对应的地理地点音讯是何许。那么此时大家必要用到框架来为大家贯彻

01@interface  DemoAnnotation : NSObject {

看一下代码:

11       didFindPlacemark:(MKPlacemark *)placemark

07        [manager startUpdatingLocation];

23}

CLLocationManagerDelegate委托。在回到定位音讯委托方法中重点的多少个参数是newLocation和

08}

13     NSLog(@”\n country:%@\n postalCode:%@\n ISOcountryCode:%@\n locality:%@\n subLocality:%@\n administrativeArea:%@\n subAdministrativeArea:%@\n thoroughfare:%@\n subThoroughfare:%@\n”,

12    return annotationView;

28    NSLog(@”reverse geocoder fail!!”);

30}

到此处对于一向和地图的施用就为止了,当然关于MKMapView还有一些更是高档的性格

定解析的经纬度被解析到七个区其余地标新闻。假设条分缕析错误大概调用cancel方法则此参数为nil。

05    MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate];

上边的类只是简单地保留了经纬度消息。记得注意的是MKAnnotation协议中的title和subtitle的成效,假诺你在显示

altitude

03{

这一意义,那就是MapKit.framework。在这几个框架中有五个叫MKReverseGeocoder的类可以扶助大家贯彻反向解析地理地方。请

14           placemark.country,

16- (void)locationManager:(CLLocationManager *)manager

02        //定位功用开启的情形下开展固化

04    NSString *annotationViewId=@”CurrentUserAnnotationView”;

从代码来看,CLGeocoder类没有动用委托的方式文告重返状态,而是经过block的格局开展回调,而且MKReverseGeocoder委托只

09- (void)locationManager:(CLLocationManager *)manager

海拔高度

一 、获取当前稳住

行驶方向

22}

象。由此大家先是要做的业务就是把取到的中纬度转换为MKAnnotation协议对象。先定义八个兑现MKAnnotation协议的类:

16                              placemark.locality,

02[geocoder reverseGeocodeLocation:newLocation

07    [annotation release];

09        annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewId] autorelease];

11           fromLocation:(CLLocation *)oldLocation

start方法就足以兑现反向解析了,然后等待重回,其回来是透过委托格局通告的。所以委托对象必须贯彻

04{

3    [super viewDidLoad];

15           placemark.postalCode,

02     didUpdateToLocation:(CLLocation *)newLocation

20              }];

28-(NSString *)subtitle{

27

17           placemark.administrativeArea,

22           placemark.subThoroughfare);

8}

叁 、地图展现

06    [mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewId];

12                              placemark.ocean,

那够简单吗,上边的设置地图委托对象是因为在下边要标记地理地方时索要采取的。那么怎么着把取到的经纬度消息显示到地图上吧?其实各种坐标音信在地

1-  (void)viewDidLoad

05        manager.desiredAccuracy = kCLLocationAccuracyBest;

08

13

13}

course

oldLocation,newLocation表示最新定位,oldLocation代表上三遍的定势音讯。那八个都以CLLocation对象。以下

05               {

11@synthesize coordinate=_coordinate;

相关文章