iOS开发中使用CoreLocation框架处理地理编码的方法

雨涵大爱豪仔仔

雨涵大爱豪仔仔

2016-02-19 09:39

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的iOS开发中使用CoreLocation框架处理地理编码的方法,手机电脑控们准备好了吗?一起看过来吧!

一、简介

1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如

(1)导航:去任意陌生的地方

(2)周边:找餐馆、找酒店、找银行、找电影院

2.在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发

(1)Map Kit :用于地图展示

(2)Core Location :用于地理定位 

3.两个热门专业术语

(1)LBS :Location Based Service(基于定位的服务)

(2)SoLoMo :Social Local Mobile(索罗门)

二、CoreLocation框架的使用

1.CoreLocation框架使用前提

(1)导入框架

说明:在Xcode5以后,不再需要我们手动导入

(2)导入主头文件

  代码如下:
#import CoreLocation/CoreLocation.h

2.CoreLocation框架使用须知

CoreLocation框架中所有数据类型的前缀都是CL

CoreLocation中使用CLLocationManager对象来做用户定位

三、经纬度等地理信息扫盲

1.示意图

2.本初子午线:穿过英国伦敦格林文治天文台

往东边(右边)走,是东经(E)

往西边(左边)走,是西经(W)

东西经各180°,总共360°

3.赤道:零度维度

往北边(上边)走,是北纬(N)

往南边(下边)走,是南纬(S)

南北纬各90°,总共180°

提示:横跨经度纬度越大(1° ≈ 111km),表示的范围就越大,在地图上看到的东西就越小

4.我国的经纬度:

(1)中国的经纬度范围

纬度范围:N 3°51′ ~  N 53°33′

经度范围:E 73°33′ ~  E 135°05′

(2)部分城市的经纬度

四、模拟位置

说明:在对程序进行测试的时候,设置手机模拟器的模拟位置(经纬度)

CoreLocation地理编码
一、简单说明

CLGeocoder:地理编码器,其中Geo是地理的英文单词Geography的简写。

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

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

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

(1)地理编码方法
代码如下:

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

(2)反地理编码方法
代码如下:

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

 
2.CLGeocodeCompletionHandler

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

这个block传递2个参数

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

placemarks :里面装着CLPlacemark对象

3.CLPlacemark

说明: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;

二、代码示例:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

在storyboard中搭建界面如下:

实现代码:
代码如下:

  YYViewController.m文件
//
//  YYViewController.m
//  19-地理编码
//
//  Created by apple on 14-8-11.
//  Copyright (c) 2014年 yangyong. All rights reserved.
//

#import "YYViewController.h"
#import CoreLocation/CoreLocation.h

@interface YYViewController ()
@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 *longitudeField;
@property (weak, nonatomic) IBOutlet UITextField *latitudeField;
@property (weak, nonatomic) IBOutlet UILabel *reverdeDetailAddressLabel;
@end

代码如下:

@implementation YYViewController

#pragma mark-懒加载
-(CLGeocoder *)geocoder
{
    if (_geocoder==nil) {
        _geocoder=[[CLGeocoder alloc]init];
    }
    return _geocoder;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
}
/**
 *  地理编码:地名—经纬度坐标
 */
- (IBAction)geocode {
    //1.获得输入的地址
    NSString *address=self.addressField.text;
    if (address.length==0) return;
   
    //2.开始地理编码
    //说明:调用下面的方法开始编码,不管编码是成功还是失败都会调用block中的方法
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
        //如果有错误信息,或者是数组中获取的地名元素数量为0,那么说明没有找到
        if (error || placemarks.count==0) {
            self.detailAddressLabel.text=@"你输入的地址没找到,可能在月球上";
        }else   //  编码成功,找到了具体的位置信息
        {
            //打印查看找到的所有的位置信息
                /*
                    name:名称
                    locality:城市
                    country:国家
                    postalCode:邮政编码
                 */
            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];
        }
    }];
}

/**
 *  反地理编码:经纬度坐标—地名
 */
- (IBAction)reverseGeocode {
    //1.获得输入的经纬度
    NSString *longtitudeText=self.longitudeField.text;
    NSString *latitudeText=self.latitudeField.text;
    if (longtitudeText.length==0||latitudeText.length==0) return;
   
    CLLocationDegrees latitude=[latitudeText doubleValue];
    CLLocationDegrees longitude=[longtitudeText doubleValue];
   
    CLLocation *location=[[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
    //2.反地理编码
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error||placemarks.count==0) {
            self.reverdeDetailAddressLabel.text=@"你输入的地址没找到,可能在月球上";
        }else//编码成功
        {
            //显示最前面的地标信息
            CLPlacemark *firstPlacemark=[placemarks firstObject];
            self.reverdeDetailAddressLabel.text=firstPlacemark.name;
            //经纬度
            CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
            CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
            self.latitudeField.text=[NSString stringWithFormat:@"%.2f",latitude];
            self.longitudeField.text=[NSString stringWithFormat:@"%.2f",longitude];
        }
    }];
}

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

实现效果:

(1)地理编码:(地名-经纬度坐标)

打印输出:

(2)反地理编码:(经纬度—地名)

(3)注意:调整键盘

点击经纬度textField进行输入的时候,弹出的键盘如下

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

(4)注意:搜索的所有结果都是在中国境内的,因为苹果在中国的地图服务商是高德地图。

展开更多 50%)
分享

猜你喜欢

iOS开发中使用CoreLocation框架处理地理编码的方法

编程语言 网络编程
iOS开发中使用CoreLocation框架处理地理编码的方法

iOS开发中使用NSURLConnection类处理网络请求的方法

编程语言 网络编程
iOS开发中使用NSURLConnection类处理网络请求的方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

iOS开发中使用屏幕旋转功能的相关方法

编程语言 网络编程
iOS开发中使用屏幕旋转功能的相关方法

iOS多线程应用开发中使用NSOperation类的基本方法

编程语言 网络编程
iOS多线程应用开发中使用NSOperation类的基本方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

详解iOS开发中使用storyboard创建导航控制器的方法

编程语言 网络编程
详解iOS开发中使用storyboard创建导航控制器的方法

iOS开发中使用cocos2d添加触摸事件的方法

编程语言 网络编程
iOS开发中使用cocos2d添加触摸事件的方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10家庭版Windows聚焦功能怎么玩?

Win10家庭版Windows聚焦功能怎么玩?

win10家庭版怎么关闭商店应用自动更新

win10家庭版怎么关闭商店应用自动更新
下拉加载更多内容 ↓