1、簡介
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(索羅門)
2、CoreLocation框架的應用
1.CoreLocation框架應用條件
(1)導入框架
解釋:在Xcode5今後,不再須要我們手動導入
(2)導入主頭文件
#import <CoreLocation/CoreLocation.h>
2.CoreLocation框架應用須知
CoreLocation框架中一切數據類型的前綴都是CL
CoreLocation中應用CLLocationManager對象來做用戶定位
3、經緯度等地輿信息掃盲
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)部門城市的經緯度
4、模仿地位
解釋:在對法式停止測試的時刻,設置手機模仿器的模仿地位(經緯度)
CoreLocation地輿編碼
1、簡略解釋
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;
2、代碼示例:
在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停止輸出的時刻,彈出的鍵盤以下
(4)留意:搜刮的一切成果都是在中國境內的,由於蘋果在中國的地圖辦事商是高德地圖。
【iOS開辟中應用CoreLocation框架處置地輿編碼的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!