iOS開發(fā)中使用CoreLocation框架處理地理編碼的方法
一、簡(jiǎn)介
1.在移動(dòng)互聯(lián)網(wǎng)時(shí)代,移動(dòng)app能解決用戶的很多生活瑣事,比如
(1)導(dǎo)航:去任意陌生的地方
(2)周邊:找餐館、找酒店、找銀行、找電影院
2.在上述應(yīng)用中,都用到了地圖和定位功能,在iOS開發(fā)中,要想加入這2大功能,必須基于2個(gè)框架進(jìn)行開發(fā)
(1)Map Kit :用于地圖展示
(2)Core Location :用于地理定位
3.兩個(gè)熱門專業(yè)術(shù)語
(1)LBS :Location Based Service(基于定位的服務(wù))
(2)SoLoMo :Social Local Mobile(索羅門)
二、CoreLocation框架的使用
1.CoreLocation框架使用前提
(1)導(dǎo)入框架
說明:在Xcode5以后,不再需要我們手動(dòng)導(dǎo)入
(2)導(dǎo)入主頭文件
2.CoreLocation框架使用須知
CoreLocation框架中所有數(shù)據(jù)類型的前綴都是CL
CoreLocation中使用CLLocationManager對(duì)象來做用戶定位
三、經(jīng)緯度等地理信息掃盲
1.示意圖
2.本初子午線:穿過英國倫敦格林文治天文臺(tái)
往東邊(右邊)走,是東經(jīng)(E)
往西邊(左邊)走,是西經(jīng)(W)
東西經(jīng)各180°,總共360°
3.赤道:零度維度
往北邊(上邊)走,是北緯(N)
往南邊(下邊)走,是南緯(S)
南北緯各90°,總共180°
提示:橫跨經(jīng)度\緯度越大(1° ≈ 111km),表示的范圍就越大,在地圖上看到的東西就越小
4.我國的經(jīng)緯度:
(1)中國的經(jīng)緯度范圍
緯度范圍:N 3°51′ ~ N 53°33′
經(jīng)度范圍:E 73°33′ ~ E 135°05′
(2)部分城市的經(jīng)緯度
四、模擬位置
說明:在對(duì)程序進(jìn)行測(cè)試的時(shí)候,設(shè)置手機(jī)模擬器的模擬位置(經(jīng)緯度)
CoreLocation地理編碼
一、簡(jiǎn)單說明
CLGeocoder:地理編碼器,其中Geo是地理的英文單詞Geography的簡(jiǎn)寫。
1.使用CLGeocoder可以完成“地理編碼”和“反地理編碼”
地理編碼:根據(jù)給定的地名,獲得具體的位置信息(比如經(jīng)緯度、地址的全稱等)
反地理編碼:根據(jù)給定的經(jīng)緯度,獲得具體的位置信息
(1)地理編碼方法
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
(2)反地理編碼方法
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
2.CLGeocodeCompletionHandler
當(dāng)?shù)乩韁反地理編碼完成時(shí),就會(huì)調(diào)用CLGeocodeCompletionHandler
這個(gè)block傳遞2個(gè)參數(shù)
error :當(dāng)編碼出錯(cuò)時(shí)(比如編碼不出具體的信息)有值
placemarks :里面裝著CLPlacemark對(duì)象
3.CLPlacemark
說明:CLPlacemark的字面意思是地標(biāo),封裝詳細(xì)的地址位置信息
地理位置 @property (nonatomic, readonly) CLLocation *location;
區(qū)域 @property (nonatomic, readonly) CLRegion *region;
詳細(xì)的地址信息 @property (nonatomic, readonly) NSDictionary *addressDictionary;
地址名稱 @property (nonatomic, readonly) NSString *name;
城市 @property (nonatomic, readonly) NSString *locality;
二、代碼示例:
在storyboard中搭建界面如下:
實(shí)現(xiàn)代碼:
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];
}
/**
* 地理編碼:地名—>經(jīng)緯度坐標(biāo)
*/
- (IBAction)geocode {
//1.獲得輸入的地址
NSString *address=self.addressField.text;
if (address.length==0) return;
//2.開始地理編碼
//說明:調(diào)用下面的方法開始編碼,不管編碼是成功還是失敗都會(huì)調(diào)用block中的方法
[self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
//如果有錯(cuò)誤信息,或者是數(shù)組中獲取的地名元素?cái)?shù)量為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);
}
//取出獲取的地理信息數(shù)組中的第一個(gè)顯示在界面上
CLPlacemark *firstPlacemark=[placemarks firstObject];
//詳細(xì)地址名稱
self.detailAddressLabel.text=firstPlacemark.name;
//緯度
CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
//經(jīng)度
CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
self.latitudeLabel.text=[NSString stringWithFormat:@"%.2f",latitude];
self.longitudeLabel.text=[NSString stringWithFormat:@"%.2f",longitude];
}
}];
}
/**
* 反地理編碼:經(jīng)緯度坐標(biāo)—>地名
*/
- (IBAction)reverseGeocode {
//1.獲得輸入的經(jīng)緯度
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//編碼成功
{
//顯示最前面的地標(biāo)信息
CLPlacemark *firstPlacemark=[placemarks firstObject];
self.reverdeDetailAddressLabel.text=firstPlacemark.name;
//經(jīng)緯度
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
實(shí)現(xiàn)效果:
(1)地理編碼:(地名->經(jīng)緯度坐標(biāo))
打印輸出:
(2)反地理編碼:(經(jīng)緯度—>地名)
(3)注意:調(diào)整鍵盤
點(diǎn)擊經(jīng)緯度textField進(jìn)行輸入的時(shí)候,彈出的鍵盤如下
(4)注意:搜索的所有結(jié)果都是在中國境內(nèi)的,因?yàn)樘O果在中國的地圖服務(wù)商是高德地圖。
- iOS使用Charts框架繪制折線圖
- iOS使用Charts框架繪制餅狀圖
- IOS 陀螺儀開發(fā)(CoreMotion框架)實(shí)例詳解
- iOS中使用JSPatch框架使Objective-C與JavaScript代碼交互
- IOS框架Spring常用的動(dòng)畫效果
- 詳解iOS的Core Animation框架中的CATransform3D圖形變換
- iOS10語音識(shí)別框架SpeechFramework應(yīng)用詳解
- iOS + node.js使用Socket.IO框架進(jìn)行實(shí)時(shí)通信示例
- 深入理解IOS控件布局之Masonry布局框架
- iOS系統(tǒng)的底層通知框架庫示例詳解
相關(guān)文章
改變iOS應(yīng)用中UITableView的背景顏色與背景圖片的方法
這篇文章主要介紹了改變iOS應(yīng)用中UITableView的背景顏色與背景圖片的方法,將UITableView的header、footer設(shè)成clearColor時(shí)要注意實(shí)際效果是否真的變透明,需要的朋友可以參考下2016-03-03iOS開發(fā)之image圖片壓縮及壓縮成指定大小的兩種方法
這篇文章主要介紹了iOS開發(fā)之image圖片壓縮及壓縮成指定大小的兩種方法,需要的朋友可以參考下2017-11-11iOS實(shí)現(xiàn)文字水平無間斷滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)文字水平無間斷滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08IOS在SwiftUI中顯示模態(tài)視圖的實(shí)例代碼
這篇文章主要介紹了IOS在SwiftUI中顯示模態(tài)視圖的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02iOS中創(chuàng)建表格類視圖WBDataGridView的實(shí)例代碼
這篇文章主要介紹了iOS中創(chuàng)建表格類視圖WBDataGridView的實(shí)例代碼,需要的朋友可以參考下2017-02-02UITableViewCell在編輯狀態(tài)下背景顏色的修改方法
這篇文章主要給大家介紹了關(guān)于UITableViewCell在編輯狀態(tài)下背景顏色的修改方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-07-07詳解iOS中多個(gè)網(wǎng)絡(luò)請(qǐng)求的同步問題總結(jié)
這篇文章主要介紹了詳解iOS中多個(gè)網(wǎng)絡(luò)請(qǐng)求的同步問題總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05