iOS开发之CoreLocaiton框架使用(地理编码,反地理编码)

什么是地理编码和反地理编码?

地理编码

地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)。

反地理编码服务

反地理编码:根据给定的经纬度,获得具体的位置信息。

广州“市”天河“区”棠下“街”盛达商务园D座5楼------113.381048,23.138369: 地理编码

113.381048,23.138369------》广州“市”天河“区”棠下“街”盛达商务园D座5楼: 反地理编码

经纬度


经纬度介绍

本初子午线

穿过英国伦敦格林文治天文台 

往东边(右边)走,是东经(E)

往西边(左边)走,是西经(W)

东西经各180°,总共360°

赤道

往北边(上边)走,是北纬(N)

往南边(下边)走,是南纬(S)

南北纬各90°,总共180°

横跨经度\纬度越大(1°≈111km)

表示的范围就越大

在地图上看到的东西就越小

模拟位置

最好使用真机测试,如果是模拟器,需要设置模拟位置(经纬度)如下图:


设置经纬度

设置测试经纬度

提示:

帝都的经纬度是:北纬40°,东经116°

CLGeocoder

使用CLGeocoder可以完成“地理编码”和“反地理编码”

地理编码方法

-(void)geocodeAddressString:(NSString*)addressStringcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;

反地理编码方法

-(void)reverseGeocodeLocation:(CLLocation*)locationcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;

CLGeocodeCompletionHandler

当地理\反地理编码完成时,就会调用CLGeocodeCompletionHandler

typedefvoid(^CLGeocodeCompletionHandler)(NSArray*placemarks,NSError*error);

这个block传递2个参数

error:当编码出错时(比如编码不出具体的信息)有值

placemarks:里面装着CLPlacemark对象

CLPlacemark

CLPlacemark的字面意思是地标,封装详细的地址位置信息

@property(nonatomic,readonly)CLLocation*location; //地理位置

@property(nonatomic,readonly)CLRegion*region; //区域

@property(nonatomic,readonly)NSDictionary*addressDictionary; //详细的地址信息

@property(nonatomic,readonly)NSString*name; //地址名称

@property(nonatomic,readonly)NSString*locality; //城市

实例代码

 

/** 地理编码 */使用这个类来实现地理编码反地理编码转换

@property (nonatomic, strong) CLGeocoder *geoC;

懒加载

- (CLGeocoder *)geoC{
   if (!_geoC) {
  _geoC = [[CLGeocoder alloc] init];

}
  return _geoC;

}

地理编码

[self.geoC geocodeAddressString:城市名称 completionHandler:^(NSArray* _Nullable placemarks, NSError * _Nullable error) {

if(error == nil)

{

NSLog(@"%@", placemarks);

[placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

NSLog(@"%@", obj.name);

NSString *cityStr = obj.name;

NSString *latitudeStr = @(obj.location.coordinate.latitude).stringValue;

NSString *longitudeStr = @(obj.location.coordinate.longitude).stringValue;

}];

}else{

NSLog(@"cuowu--%@", error.localizedDescription);

}

}];

反地理编码

CLLocation *loc = [[CLLocation alloc] initWithLatitude:纬度 longitude:经度];
//注:传经纬度时候需要传 double类型
[self.geoC reverseGeocodeLocation:loc completionHandler:^(NSArray* _Nullable placemarks, NSError * _Nullable error) {

if(error == nil)

{

NSLog(@"%@", placemarks);

 

[placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

NSLog(@"%@", obj.name);

NSString *cityStr = obj.name;

NSString *latitudeStr = @(obj.location.coordinate.latitude).stringValue;

NSString *longitudeStr = @(obj.location.coordinate.longitude).stringValue;

}];

}else
{
NSLog(@"cuowu");

}

}];

转载于:https://www.cnblogs.com/carryC/p/5707536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值