你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開辟中應用CoreLocation框架處置地輿編碼的辦法

iOS開辟中應用CoreLocation框架處置地輿編碼的辦法

編輯:IOS開發綜合

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)導入框架

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615464057.png (390×158)

解釋:在Xcode5今後,不再須要我們手動導入

(2)導入主頭文件

   #import <CoreLocation/CoreLocation.h>

2.CoreLocation框架應用須知

CoreLocation框架中一切數據類型的前綴都是CL

CoreLocation中應用CLLocationManager對象來做用戶定位

 

3、經緯度等地輿信息掃盲

1.表示圖

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615464092.png (426×346)

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)部門城市的經緯度

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615464078.png (637×232)

4、模仿地位

解釋:在對法式停止測試的時刻,設置手機模仿器的模仿地位(經緯度)

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615464055.png (438×306)

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615464053.png (392×208)

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

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615464070.png (637×133)

這個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中搭建界面以下:

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615464043.png (316×498)

完成代碼:

  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)地輿編碼:(地名->經緯度坐標)

20151225101817256.png (315×496)

打印輸入:

20151225101928782.png (841×85)

(2)反地輿編碼:(經緯度—>地名)

20151225101945462.png (314×498)

(3)留意:調劑鍵盤

20151225102000450.png (715×229)

點擊經緯度textField停止輸出的時刻,彈出的鍵盤以下

20151225102021300.png (317×495)

(4)留意:搜刮的一切成果都是在中國境內的,由於蘋果在中國的地圖辦事商是高德地圖。

【iOS開辟中應用CoreLocation框架處置地輿編碼的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved