地理编码

 

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

 

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

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

 

2、地理编码方法

 

(1)编码

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

(2)反编码

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

 

3、CLGeocodeCompletionHandler

 

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

   typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);

 

(2)这个block传递2个参数

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

  placemarks :里面装着CLPlacemark对象

 

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

 

(1)地理位置

@property (nonatomic, readonly) CLLocation *location;

 

(2)区域

@property (nonatomic, readonly) CLRegion *region;

 

(3)详细的地址信息

@property (nonatomic, readonly) NSDictionary *addressDictionary;

 

(4)地址名称

@property (nonatomic, readonly) NSString *name;

 

(5)城市

@property (nonatomic, readonly) NSString *locality;

 

 

5、示例代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#import "ViewController.h"
 
#import <CoreLocation/CoreLocation.h>
 
@interface ViewController ()
 
@property (nonatomic, strong) CLGeocoder *geocode;
 
@end
 
 
@implementation ViewController
 
#pragma mark - 懒加载
 
- (CLGeocoder *)geocode {
 
    if (!_geocode) {
 
        _geocode = [[CLGeocoder alloc]init];
 
    }
 
    return _geocode;
 
}
 
- (IBAction)geoCodeClick:(UIButton *)sender {
 //北京  经纬度
 
    [self.geocode geocodeAddressString:@"东莞" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
 
        //地标
 
        CLPlacemark *pl =  [placemarks firstObject];
 
        //经纬度
 
        CLLocationCoordinate2D coordinate = pl.location.coordinate;
 
        NSLog(@"%f  %f",coordinate.latitude,coordinate.longitude);
 
        for ( CLPlacemark *pl in placemarks) {
 
            NSLog(@"%@",pl.name);
 
        }
 
    }];
 
}
 
- (IBAction)unGeoClick:(UIButton *)sender {
 
    CLLocation *loction = [[CLLocation alloc]initWithLatitude:23 longitude:118];
 
    [self.geocode reverseGeocodeLocation:loction completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
 
        //地址  字符串
 
        NSLog(@"%@",error);
 
        CLPlacemark *pl = [placemarks firstObject];
 
        NSLog(@"%@,%@",pl.name,pl.locality);   
 
    }];
 
}
 
  
 
@end

 

posted @   执着的怪味豆  阅读(412)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示