CLGeocoder基本使用

//
//  HMViewController.m
//  02-地理编码
//
//  Created by apple on 14-8-7.
//  Copyright (c) 2014年 heima. All rights reserved.
//

#import "HMViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface HMViewController ()
@property (nonatomic, strong) CLGeocoder *geocoder;

#pragma mark - 地理编码
- (IBAction)geocode;
@property (weak, nonatomic) IBOutlet UITextField *addressField;
@property (weak, nonatomic) IBOutlet UILabel *longitudeLabel;
@property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;
@property (weak, nonatomic) IBOutlet UILabel *detailAddressLabel;

#pragma mark - 反地理编码
- (IBAction)reverseGeocode;
@property (weak, nonatomic) IBOutlet UITextField *longtitudeField;
@property (weak, nonatomic) IBOutlet UITextField *latitudeField;
@property (weak, nonatomic) IBOutlet UILabel *reverseDetailAddressLabel;
@end

@implementation HMViewController

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

}

 - (void)viewDidLoad
{
    [super viewDidLoad];

}

/**
 *  地理编码:地名 -> 经纬度
 */
- (void)geocode
{
    // 1.获得输入的地址xx
    NSString *address = self.addressField.text;
    if (address.length == 0) return;

    // 2.开始编码
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error || placemarks.count == 0) {
            self.detailAddressLabel.text = @"你输入的地址找不到,可能在火星上";
        } else { // 编码成功(找到了具体的位置信息)
            // 输出查询到的所有地标信息
            for (CLPlacemark *placemark in placemarks) {
                // 名字, 城市,国家,邮政编码
                NSLog(@"name=%@ locality=%@ country=%@ postalCode=%@", placemark.name, placemark.locality, placemark.country, placemark.postalCode);
            }

            // 显示最前面的地标信息
            CLPlacemark *firstPlacemark = [placemarks firstObject];
            self.detailAddressLabel.text = firstPlacemark.name;
            // 纬度
            CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude;
            // 经度
            CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude;
            self.latitudeLabel.text = [NSString stringWithFormat:@"%.2f", latitude];
            self.longitudeLabel.text = [NSString stringWithFormat:@"%.2f", longitude];
        }
    }];
}

/**
 *  反地理编码:经纬度 -> 地名
 */
- (void)reverseGeocode
{
    NSString *longtitudeText = self.longtitudeField.text;
    NSString *latitudeText = self.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) {
            self.reverseDetailAddressLabel.text = @"你输入的经纬度找不到,可能在火星上";
        } else { // 编码成功(找到了具体的位置信息)
            // 输出查询到的所有地标信息
            for (CLPlacemark *placemark in placemarks) {
                NSLog(@"name=%@ locality=%@ country=%@ postalCode=%@", placemark.name, placemark.locality, placemark.country, placemark.postalCode);
            }

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

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

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}

@end
时间: 2024-10-13 21:24:24

CLGeocoder基本使用的相关文章

地图:CLGeocoder地址解析与反地址解析

1.导入系统框架 /** *  界面效果1 实现定位到输入的地址,并且提示出地址的经纬度 */        2.viewcontroller.h #import <UIKit/UIKit.h>#import <MapKit/MapKit.h>@interface ViewController : UIViewController @property (strong, nonatomic) IBOutlet UISearchBar *searchBar;@property (str

【iOS开发-109】CoreLocation框架的两个主要类CLLocationManager和CLGeoCoder介绍

CoreLocation框架主要由两个常用的类,一个是CLLocationManager,一个是CLGeoCoder. (1)CoreLocation的使用,先导入CoreLocation框架. (2)一般是利用位置管理器来操作,即CLLocationManager --开启,就是startUpdatingLocation:关闭,就是stopUpdatingLocation --可以先判断位置服务是否开启locationServicesEnabled,如果没开启,直接返回空,不操作. --iOS

[IOS地图开发系类]2、位置解码CLGeocoder

  接第一步的操作,获取到地址信息经纬度后,我们可以对其进行解码,解码采用的CLGeocoder这个类,使用方式如下: 1.在ViewControlelr.m文件中声明一个CLGeocoder的属性,给页面加一个button,然后在处理方法中,对上一篇获取的地址坐标进行解码, code如下 #import "ViewController.h" #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h&

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

CLGeocoder 地理编码和反地理编码

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

定位 -CLGeocoder - 编码

#import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewController () /**  地理编码对象 ***/ @property (nonatomic, strong) CLGeocoder *geocoder; @property (weak, nonatomic) IBOutlet UITextField *addressField; // 地址 @prope

简易地图(MKMapView,CLLocationManagerDelegate,CLGeocoder)

概要 本章主要简示了IOS里面位置服务的使用,包括定位,地图,地图标记以及地图定位.由于现在的地图开发和以前的差别比较大,而且地图涉及的东西相对而言复杂点,所以本实验耗时比较多,有的地方还存在一些问题. 结果展示 注意文本框的两个数字是当前的经纬度,地图视图切换是切换到该经纬度的位置,最后红色的那个标注即为地图中的经纬度,不过由于经纬度解析部分有问题,所以未能显示经纬度的对应地址是什么.(示例里面不是使用代理来解析经纬度的,使用的是CLGeocoder,因为以前使用的代理官方建议不再使用了.)

地图、定位 CLLocationManager CLGeocoder CLPlacemark

地图.定位 一.基本知识点 定位: 1.info.plist文件设置 ios8以后,使用定位需要在info.plist文件中添加两个字段NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription 2.导入CoreLocation.framework框架并导入头文件 #import <CoreLocation/CoreLocation.h> 3.判断定位服务是否打开 if (![CLLocationManager lo

iOS开发之 使用CLGeocoder实现经纬度和地址互查

添加CoreLocation.framework框架 导入#import <CoreLocation/CoreLocation.h> 通过地址查询经纬度方法:     CLGeocoder *geocoder = [[CLGeocoder alloc] init];     [geocoder geocodeAddressString:@"湖北襄阳" completionHandler:^(NSArray* placemarks, NSError* error){