iOS - GeoCoder 地理编码

简介: 前言 NS_CLASS_AVAILABLE(10_8, 5_0) @interface CLGeocoder : NSObject地理编码地名 -> 经纬度 等具体位置数据信息。

前言

    NS_CLASS_AVAILABLE(10_8, 5_0)
    @interface CLGeocoder : NSObject
  • 地理编码

    • 地名 -> 经纬度 等具体位置数据信息。根据给定的位置(通常是地名)确定地理坐标(经、纬度)。
  • 反地理编码

    • 经纬度 -> 地名。可以根据地理坐标(经、纬度)确定位置信息(街道、门牌等)。

1、GeoCoder 地理编码

  • 配置

        // 包含头文件
        #import <CoreLocation/CoreLocation.h>
  • 地理编码

        // 声明 CLGeocoder 对象
        @property (nonatomic, strong) CLGeocoder *geocoder;
    
        // 实例化 CLGeocoder 对象
        self.geocoder = [[CLGeocoder alloc] init];
    
        // 开始编码
        [self.geocoder geocodeAddressString:self.addressField.text 
                          completionHandler:^(NSArray *placemarks, NSError *error) {
    
            // 判断编码是否成功
            if (error || 0 == placemarks.count) {
    
                NSLog(@"erroe = %@, placemarks.count = %ld", error, placemarks.count);
                self.detailAddressLabel.text = @"你输入的地址找不到,可能在火星上";
    
            } else {  // 编码成功(找到了具体的位置信息)
    
                // 输出查询到的所有地标信息
                for (CLPlacemark *placemark in placemarks) {
    
                    NSLog(@"name = %@, locality = %@, country = %@", placemark.name, placemark.locality, placemark.country);
                }
    
                // 显示最前面的地标信息
                CLPlacemark *firstPlacemark = [placemarks firstObject];
    
                self.longitudeLabel.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.longitude];
                self.latitudeLabel.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.latitude];
    
                self.detailAddressLabel.text = [NSString stringWithFormat:@"%@,%@,%@", firstPlacemark.name, firstPlacemark.locality, firstPlacemark.country];
            }
        }];
  • 反地理编码

        // 声明 CLGeocoder 对象
        @property (nonatomic, strong)CLGeocoder *geocoder;
    
        // 实例化 CLGeocoder 对象
        self.geocoder = [[CLGeocoder alloc] init];
    
        // 创建 CLLocation 对象
        CLLocation *location = [[CLLocation alloc] initWithLatitude:[self.latitudeField.text doubleValue] 
                                                          longitude:[self.longtitudeField.text doubleValue]];
    
        // 开始反编码
        [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
    
            // 判断反编码是否成功
            if (error || 0 == placemarks.count) {
    
                NSLog(@"erroe = %@, placemarks.count = %ld", error, placemarks.count);
                self.reverseDetailAddressLabel.text = @"你输入的经纬度找不到,可能在火星上";
    
            } else {  // 反编码成功(找到了具体的位置信息)
    
                // 输出查询到的所有地标信息
                for (CLPlacemark *placemark in placemarks) {
    
                    NSLog(@"name=%@, locality=%@, country=%@", placemark.name, placemark.locality, placemark.country);
                }
    
                // 显示最前面的地标信息
                CLPlacemark *firstPlacemark = [placemarks firstObject];
    
                self.longtitudeField.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.longitude];
                self.latitudeField.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.latitude];
    
                self.reverseDetailAddressLabel.text = [NSString stringWithFormat:@"%@,%@,%@", firstPlacemark.name, firstPlacemark.locality, firstPlacemark.country];
            }
        }];
        地理编码信息:
    
            placemark.name,                                                    // 地名
            placemark.thoroughfare,                                            // 街道
            placemark.subThoroughfare,                                         // 街道相关信息,例如门牌等
            placemark.locality,                                                // 城市
            placemark.subLocality,                                             // 城市相关信息,例如标志性建筑
            placemark.administrativeArea,                                      // 州
            placemark.subAdministrativeArea,                                   // 其他行政区域信息
            placemark.postalCode,                                              // 邮编
            placemark.ISOcountryCode,                                          // 国家编码
            placemark.country,                                                 // 国家
            placemark.inlandWater,                                             // 水源、湖泊
            placemark.ocean,                                                   // 海洋
            placemark.areasOfInterest                                          // 关联的或利益相关的地标
    
            placemark.addressDictionary[@"City"]];                             // 城市
            placemark.addressDictionary[@"Country"]];                          // 国家
            placemark.addressDictionary[@"CountryCode"]];                      // 国家编码
            placemark.addressDictionary[@"FormattedAddressLines"][0]];         // 街道
            placemark.addressDictionary[@"Name"]];                             // 地名
            placemark.addressDictionary[@"State"]];                            // 州
            placemark.addressDictionary[@"SubLocality"]];                      // 城市相关信息
目录
相关文章
|
定位技术 API 开发工具
iOS开发-百度地图基本定位和罗盘跟随的使用,附加地理编码和反地理编码
iOS开发-百度地图基本定位和罗盘跟随的使用,附加地理编码和反地理编码
415 0
iOS开发-百度地图基本定位和罗盘跟随的使用,附加地理编码和反地理编码
|
API 开发工具 iOS开发
iOS定位的使用:地理/逆地理编码/判断目标经纬度是否在大陆
iOS定位的使用:地理/逆地理编码/判断目标经纬度是否在大陆
1053 0
iOS定位的使用:地理/逆地理编码/判断目标经纬度是否在大陆
|
定位技术 iOS开发
iOS开发拓展篇—CoreLocation地理编码
iOS开发拓展篇—CoreLocation地理编码 一、简单说明 CLGeocoder:地理编码器,其中Geo是地理的英文单词Geography的简写。 1.使用CLGeocoder可以完成“地理编码”和“反地理编码” 地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)...
836 0
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
948 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
500 66
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
605 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1844 11

热门文章

最新文章