zoukankan      html  css  js  c++  java
  • CLGeocoder基本使用

    ////  02-地理编码
    //
    //  Created by apple on 14-8-7.
    //  Copyright (c) 2014年 CoderJee. 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
  • 相关阅读:
    斐波那契额数列
    Handler+Looper+MessageQueue深入详解
    Android中常见的设计模式
    Java的序列化与反序列化
    Fragment的生命周期(与Activity的对比)
    两步搞定Activity的向右滑动返回的功能
    BOM和DOM的联系和区别
    JavaScript 之 使用 XMLHttpRequest 预览文件(图片)
    JavaScript 之 使用 XMLHttpRequest 上传文件
    JavaScript 客户端JavaScript之脚本化HTTP(通过XMLHttpRequest)
  • 原文地址:https://www.cnblogs.com/Fc-ios/p/3945678.html
Copyright © 2011-2022 走看看