地理编码和反地理编码

一、基本概念

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

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

  编码器CLGeocoder的每个实例,同时只能处理一个任务,异步执行。

二、基本方法

 1. 地理编码方法

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

 2. 反地理编码方法

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

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

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

   这个block传递2个参数  error :当编码出错时(比如编码不出具体的信息)有值    placemarks :里面装着CLPlacemark对象

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

 3.1 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;城市

三、地理编码与反地理编码实现

  1. 首先导入 <CoreLocation/CoreLocation.h>框架,然后导入#import <CoreLocation/CoreLocation.h>头文件

  2. 创建编码器对象,并进行懒加载

@property(nonatomic,strong) CLGeocoder *geocoder;

- (CLGeocoder *)geocoder{
    if (!_geocoder) {
        self.geocoder = [[CLGeocoder alloc] init];
    }
    return _geocoder;
}

  

  3. 编码方法实现

- (void)geocod{
    NSLog(@"ddddd");
    //1. 获得输入的地址
    NSString *address = _addressField.text;
    if (address.length == 0) return;

    //2.开始编码
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error || placemarks.count == 0) {
            _detailAddressLabel.text = @"您输入的地址找不到";
        } else{ //编码成功(找到了具体的位置信息)
            //输出找的所有地标信息
            for (CLPlacemark *placeM in placemarks) {
                NSLog(@"name:%@  locality:%@  country:%@  postalCode:%@",placeM.name, placeM.locality,placeM.country, placeM.postalCode);
            }

            //显示最前面的地标信息
            CLPlacemark *firstPlacemark = [placemarks firstObject];
            _detailAddressLabel.text = firstPlacemark.name;

            CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude;
            CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude;
            _latitudeLabel.text = [NSString stringWithFormat:@"%.2f",latitude];
            _longgitudeLable.text = [NSString stringWithFormat:@"%.2f",longitude];
        }
    }];
}

  4. 反地理编码实现

   NSString *longTitudeText = _longgitudeField.text;
    NSString *latitudeText = _latitudeField.text;
    if (longTitudeText.length == 0 || latitudeText.length == 0) return;

    CLLocationDegrees latitude = [latitudeText doubleValue];
    CLLocationDegrees longtitude = [longTitudeText doubleValue];

    //开始反向编码
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longtitude];
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error || placemarks.count == 0) {
            _reverseDetailAddressLabel.text = @"您输入的地址找不到";
        } else{
            for (CLPlacemark *placeM in placemarks) {
                NSLog(@"name:%@  locality:%@  country:%@  postalCode:%@",placeM.name, placeM.locality,placeM.country, placeM.postalCode);
            }

            CLPlacemark *firstPlacemark = [placemarks firstObject];
            _reverseDetailAddressLabel.text = firstPlacemark.name;

            CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude;
            CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude;
            self.latitudeField.text = [NSString stringWithFormat:@"%.2f", latitude];
            self.longgitudeField.text = [NSString stringWithFormat:@"%.2f", longitude];
        }
    }];

效果图:

  

时间: 2024-09-29 18:57:00

地理编码和反地理编码的相关文章

(七十七)地理编码与反地理编码

所谓地理编码,指的是通过地名获取位置信息,例如经纬度.详细地址等. 所谓反地理编码,指的是通过经纬度.海拔等信息获取地理位置信息. 在iOS上使用地理编码和反地理编码,如果是手动输入经纬度,是不需要获取用户授权的,但是一般是获取用户的经纬度,然后再通过地理编码实现精确定位,因此需要授权,本文因为是单独讲解地理编码的相关知识,因此采用手动输人经纬度,不再赘述授权的代码. ①导入框架: #import <CoreLocation/CoreLocation.h> ②新建CLGeocoder对象: @

百度地图开发(二)之添加覆盖物 + 地理编码和反地理编码

之前写过一篇关于百度地图开发的blog,主要介绍了百度地图的基本地图的显示. 详见:Android百度地图开发(一)之初体验 下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造OverlayOptions(地图覆盖物选型基类). 3. 在地图上添加覆盖物. 4. 添加相应的监听事件. 在API中可以看到,BaiDuMap类中有一个方法: 这个方法就是用

CLGeocoder 地理编码和反地理编码

使用CLGeocoder可以完成“地理编码”和“反地理编码” 地理编码:根据给定的地名,获得具体的位置信息(比如经纬度.地址的全称等) 反地理编码:根据给定的经纬度,获得具体的位置信息 地理编码方法 - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler; 反地理编码方法 - (void)reverseGeocode

地理编码与反地理编码

#import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //地理编码 [self geocoder:nil]; //反地理编码; } //没联网,没办法执行 -(void)geocoder

CLGeocoder 地理编码和反地理编码 代码实战

////  MJViewController.m//  02-地理编码////  Created by apple on 14-5-29.//  Copyright (c) 2014年 itcast. All rights reserved.// #import "MJViewController.h"#import <CoreLocation/CoreLocation.h> @interface MJViewController ()@property (nonatomi

iOS 原生地图地理编码与反地理编码

当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 #import <CoreLocation/CoreLocation.h> 地理编码: /** 地理编码 */ - (void)geocoder { CLGeocoder *geocoder=[[CLGeocoder alloc]init]; NSString *addressStr = @&qu

猫猫学iOS 之CoreLocation反地理编码小Demo输入经纬度得到城市

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果 输入经纬度,能够得到相应的地名 二:思路 跟地里编码差点儿相同 1.获取用户输入的经纬度 2.依据用户输入的经纬度创建CLLocation对象 3.依据CLLocation对象获取相应的地标信息 三:代码 #import "ViewController.h" #import <CoreLocation/CoreLocation.h>

iOS地理反地理编码--CoreLocation

.sidebar{float:left;width:220px;} .container-fluid>.content{margin-left:240px;} a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;} .pull-right{float:right;} .pull-left{float

iOS 地理编码 / 反地理编码

一.CLGeocoder 地理编码 与 反地理编码 地理编码: 根据给定的地名,获得具体的位置信息(比如经纬度.地址的全称等) // 地理编码方法 -(void)geocodeAddressString:(NSString*)addressStringcompletionHandler:(CLGeocodeCompletionHandler)completionHandler; 反地理编码: 根据给定的经纬度,获得具体的位置信息 // 反地理编码方法 -(void)reverseGeocodeL