日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于CLGeocoder - 地理编码

發布時間:2024/1/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于CLGeocoder - 地理编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS中CoreLocatio框架中的CLGeocoder為我們提供了地理編碼方法:
首先需要導入框架
#import <CoreLocation/CoreLocation.h>
地理編碼方法有三種:

- (void)geocodeAddressDictionary:(NSDictionary *)addressDictionary completionHandler:(CLGeocodeCompletionHandler)completionHandler; - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler; - (void)geocodeAddressString:(NSString *)addressString inRegion:(nullable CLRegion *)region completionHandler:(CLGeocodeCompletionHandler)completionHandler;

下面簡單的介紹其中一種常用的方法:步驟:
1、獲取用戶輸入的地理位置
2、創建地理編碼對象<CLGeocoder對象>
3、利用地理編碼對象編碼
3.1、當編碼完成時,會調用?completionHandler對象,該對象類型為?CLGeocodeCompletionHandler,實際上是一個 block 對象
這個對象中傳遞了2個參數,其中placemark:里面裝了CLPlacemark對象

根據文檔,可以知道CLPlacemark對象中包含了?該位置的經緯度以及城市/區域/國家代碼/郵編等等...信息
由此我們可以根據返回參數placemark獲取到我們需要的數據
< Demo如下 >:

@interface ViewController () #pragma mark - 地理編碼 //監聽地理編碼點擊事件 - (IBAction)geocodeBtnClick;// 需要編碼的地址 @property (weak, nonatomic) IBOutlet UITextField *addressField;//經度 @property (weak, nonatomic) IBOutlet UILabel *longitudeLabel;//緯度 @property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;//詳情 @property (weak, nonatomic) IBOutlet UILabel *detailAddressLabel;//地理編碼對象 @property (nonatomic ,strong) CLGeocoder *geocoder;@end #pragma mark - 地理編碼響應 - (void)geocodeBtnClick {// 0.獲取用戶輸入的位置NSString *addressStr = self.addressField.text;if (addressStr == nil || addressStr.length == 0) {NSLog(@"請輸入地址");return;}// 1.創建地理編碼對象// 2.利用地理編碼對象編碼// 根據傳入的地址獲取該地址對應的經緯度信息[self.geocoder geocodeAddressString:addressStr completionHandler:^(NSArray *placemarks, NSError *error) {if (placemarks.count == 0 || error != nil) {return ;}// placemarks地標數組, 地標數組中存放著地標, 每一個地標包含了該位置的經緯度以及城市/區域/國家代碼/郵編等等...// 獲取數組中的第一個地標CLPlacemark *placemark = [placemarks firstObject];self.latitudeLabel.text = [NSString stringWithFormat:@"%f", placemark.location.coordinate.latitude];self.longitudeLabel.text = [NSString stringWithFormat:@"%f", placemark.location.coordinate.longitude];NSArray *address = placemark.addressDictionary[@"FormattedAddressLines"];NSMutableString *strM = [NSMutableString string];for (NSString *str in address) {[strM appendString:str];}self.detailAddressLabel.text = strM;}];}#pragma mark - 懶加載, 1.創建地理編碼對象 - (CLGeocoder *)geocoder {if (!_geocoder) {_geocoder = [[CLGeocoder alloc] init];}return _geocoder; }

效果圖如下:


轉載于:https://www.cnblogs.com/knightguang/p/9605822.html

總結

以上是生活随笔為你收集整理的基于CLGeocoder - 地理编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。