iOS定位服务与地图开发(2)---地理信息反编码

上节我们通过定位获取了经度和纬度数值,但是一般人很难看懂这些数字。

地理信息反编码:就是根据这些经纬数字返回地点的相关文字描述信息,这些文字描述信息被封装在CLPlacemark类中,我们称这个类为“地标”类。

地理信息反编码使用CLGeocoder类实现,这个类能够实现在地理坐标与地理文字描述信息之间的转换。

CLGeocoder类中进行地理信息反编码的方法是:reverseGeocodeLocation: completionHandler:

location:是要定位的地理位置对象

completionHandler:指定了一个代码块,用于地理位置反编码之后的回调。


-(IBAction)reverseGeocode:(id)sender

{
CLGeocoder *geoCoder = [[CLGeocoder alloc] init];

[geoCoder reverseGeocodeLocation:_currLocation completionHandler:^(NSArray *placemarks, NSError *error)

{
//得到的数组placemarks就是CLPlacemark对象数组,这里只取第一个就行

CLPlacemark *mark = nil;

if([placemarks count] > 0){

id tempMark = [placemarks objectAtIndex:0];

if([tempMark isKindOfClass:[CLPlacemark class]])

{
mark = tempMark;
}

//具体业务逻辑,CLPlacemark的属性有很多,包括了街道名等相关属性
NSDictionary *addressDict = mark.addressDictionary;
NSString *address = [addressDict objectForKey:(NSString)kABPersonAddressStreetKey];
address = address == nil ? @"" : address;

NSString *state = [addressDict objectForKey:(NSString)kABPersonAddressStateKey];

state = state == nil ? @"" : state;

NSString *city = [addressDict objectForKey:(NSString)kABPersonAddressCityKey];

city = city == nil ? @"" : city;

// 获取地标对应的可读的文字信息,一般返回到UI显示
NSString *streetInfo = [NSString stringWithFormat:@"%@\n%@\n%@\n",state,address,city];
}
}];
}

【说明】:

_currLocation是CLLocation类型的成员变量,是在委托方法locationManager:didUpdateLocations:中获得的。

completionHandler:^(NSArray *plackmrks , NSError
*error)参数placemarks是反编码成功的地标集合。如果用户要查看所有的地标信息,需要循环遍历。

下面这些键是在AddressBook框架中定义的常量,需要引入AddressBook.framework框架:

kABPersonAddressStreetKey键:可以从字典中取出地标的街道信息

kABPersonAddressStateKey键:可以从字典中取出地标所在的州、省等信息

kABPersonAddressCityKey键:可以从字典中取出地标所在的城市等信息

iOS定位服务与地图开发(2)---地理信息反编码,布布扣,bubuko.com

时间: 2024-08-07 00:18:23

iOS定位服务与地图开发(2)---地理信息反编码的相关文章

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

定位服务是通过GPS等方式查找定位自己的位置的,再通过地图标注出来. 在iOS中定位服务和地图开发是使用两套API分别完成的. 1.定位服务: iOS系统提供3种不同定位途径: 1>WiFi定位:通过查询一个WiFi路由器的地理位置信息,iPhone.iPod Touch.iPad都可以采用. 2>蜂窝式移动电话基站定位:通过移动运营商基站定位 3>GPS卫星定位:通过3~4颗GPS卫星位置定位,最为准确,但是耗电量大 iOS不像Android系统在定位服务编程时可以指定采用哪种途径进行

iOS定位服务与地图开发(4)---显示地图

iOS 6之前,苹果使用的是谷歌地图,iOS 6之后,苹果使用了自己的地图(国内好像用的是高德地图),但是API编程接口与iOS 5相比没有太大变化. iOS 应用程序中使用Map Kit API开发地图应用程序,使用MKMapView类作为地图显示视图,其委托协议是MKMapViewDelegate. 1.显示地图: .h文件中代码 #import <MapKit/MapKit.h> @interface YXCViewController <MKMapViewDelegate>

iOS定位服务与地图开发(3)---地理信息编码查询

即根据一个NSString的文字描述对象获取相关的地理坐标. 采用CLGeocoder类操作,具体方法: 1>geocodeAddressDictionary:completionHandler: 通过指定一个地址信息字典对象参数进行查询 2>geocodeAddressString:completionHandler:通过指定一个地址信息字符串参数进行查询 3>geocodeAddressString:inRegion:completionHandler:通过制定地址信息字符串和查询范

iOS 开发指南 第16章 定位服务与地图应用

1 定位服务编码 使用Core Location框架 CLLocationManger:用于定位服务管理类,能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向等. CLLocation:封装了位置和高度信息. CLLocationMangerDelegate 准备:加载Core Location框架 修改工程配置:Supporting Files-Info.pist添加NSLocationAlwaysUSageDescription和NSLocation

iOS定位服务编程详解

现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 iOS 不像Android系统在定位服务编程时,可以指定采用哪种途径进行定位.iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备是采用 哪种方式进行定位的,iOS系统会根据设备的情况和周围的环境,采用一套最佳的解决方案.这个方案是这样的,如果能够接收GPS信息,那么设备优先采用 GP

ios地理信息反编码

通过定位我们可以获得经度和纬度,通过地理信息反编码可以通过地理坐标返回某个地点的相关文字描述.这些描述封装在CLPlacemark类中,它的属性为:1)addressDictionary,地理信息字典2)ISOcountryCode,ISO国家代号3)Country,国家信息4)postalCode,邮政编码5)adminisrativeArea,行政区域信息6)locality,指定城市信息个人认为,字典中存储的值 跟 CLPlacemark中其它的属性的值是相同的. 地理信息反编码使用CLG

位置与地图:几种位置反编码方式

位置反编码的基本概念 位置的编码就是将经纬度转换为具体的位置信息 ios5.0之后使用CLGeocoder类,用于反编码处理;ios5之前则使用MKReverseGeoCoder类进行反编码处理 1.CLGeocoder位置反编码 //-------------------CLGeocoder位置反编码 - 5.0之后使用------------------------- CLGeocoder *geocoder = [[CLGeocoder alloc]init]; [geocoder rev

iOS开发 定位服务与地图

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

iOS 开发指南 第16章 定位服务与地图应用之使用苹果地图

1 显示地图 MKMapView MKMapViewDelegate 准备:加载MapKit.framework 设置地图样式 代理-实现代理方法 - (void)viewDidLoad { [super viewDidLoad]; 设置样式,枚举类型MKMapType self.mapView.mapType = MKMapTypeStandard; // self.mapView.mapType = MKMapTypeSatellite; 将当前视图控制器赋值给地图视图的delegate属性