iOS 學習筆記五 【2016年百度地圖定位詳細使用方法】

 

具體介和配置紹在此就不詳述了,詳情請看百度地圖API文檔,html

在這裏具體講解下,新版百度地圖的定位與反地理編碼的使用:git

 

一、導入頭文件github

#import <BaiduMapAPI_Map/BMKMapComponent.h>

#import <BaiduMapAPI_Location/BMKLocationComponent.h>

#import <BaiduMapAPI_Search/BMKSearchComponent.h>

 

 二、設置代理緩存

<

    BMKLocationServiceDelegate,

    BMKGeoCodeSearchDelegate

>

 

三、添加相關屬性網絡

@property (nonatomic, strong) BMKLocationService *locService;

@property (nonatomic, strong) BMKGeoCodeSearch *geoCode;        // 地理編碼

@property (nonatomic, assign) CGFloat longitude;  // 經度

@property (nonatomic, assign) CGFloat latitude; // 緯度

 

四、開始寫代碼了app

- (void)viewDidLoad {

    [super viewDidLoad];    

    [self startLocation];

}

 

- (void)startLocation
{
    NSLog(@"進入普通定位態");
    
    // 初始化BMKLocationService
    _locService = [[BMKLocationService alloc]init];
    _locService.delegate = self;
    //啓動LocationService
    [_locService startUserLocationService];
}

#pragma mark - CoreLocation 代理
#pragma mark 跟蹤定位代理方法,每次位置發生變化即會執行(只要定位到相應位置)
//實現相關delegate 處理位置信息更新
//處理方向變動信息
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
    NSLog(@"heading is %@",userLocation.heading);
}

//處理位置座標更新
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
    NSLog(@"當前位置信息:didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
    
    self.longitude = userLocation.location.coordinate.longitude;
    self.latitude = userLocation.location.coordinate.latitude;

    [self outputAdd];
    // 當前位置信息:didUpdateUserLocation lat 23.001819,long 113.341650
}

#pragma mark geoCode的Get方法,實現延時加載
- (BMKGeoCodeSearch *)geoCode
{
    if (!_geoCode)
    {
        _geoCode = [[BMKGeoCodeSearch alloc] init];
        _geoCode.delegate = self;
    }
    return _geoCode;
}

//#pragma mark 獲取地理位置按鈕事件
- (void)outputAdd
{
    // 初始化反地址編碼選項(數據模型)
    BMKReverseGeoCodeOption *option = [[BMKReverseGeoCodeOption alloc] init];
    // 將數據傳到反地址編碼模型
    option.reverseGeoPoint = CLLocationCoordinate2DMake(self.latitude, self.longitude);
    NSLog(@"%f - %f", option.reverseGeoPoint.latitude, option.reverseGeoPoint.longitude);
    // 調用反地址編碼方法,讓其在代理方法中輸出
    [self.geoCode reverseGeoCode:option];
}

#pragma mark 代理方法返回反地理編碼結果
- (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
    if (result) {
//        self.address.text = [NSString stringWithFormat:@"%@", result.address];
        NSLog(@"位置結果是:%@ - %@", result.address, result.addressDetail.city);
//        NSLog(@"經緯度爲:%@ 的位置結果是:%@", locationString, result.address);
        self.currentCityString = result.addressDetail.city;
        
        [self.cityButton setTitle:self.currentCityString forState:UIControlStateNormal];
        // 定位一次成功後就關閉定位
        [_locService stopUserLocationService];

    }else{
        NSLog(@"%@", @"找不到相對應的位置");
    }

}

#pragma mark 代理方法返回地理編碼結果
- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
    if (result) {
        NSString *locationString = [NSString stringWithFormat:@"經度爲:%.2f   緯度爲:%.2f", result.location.longitude, result.location.latitude];
        NSLog(@"經緯度爲:%@ 的位置結果是:%@", locationString, result.address);
//        NSLog(@"%@", result.address);
    }else{
//        self.location.text = @"找不到相對應的位置";
        NSLog(@"%@", @"找不到相對應的位置");
    }
}

 

 

最後打印結果:post

跟蹤定位代理方法編碼

當前位置信息:didUpdateUserLocation lat 23.001882,long 113.341635atom

2016-03-29 11:33:48.126 yrapp[5462:1995584] 23.001882 - 113.341635spa

 

代理方法返回地理編碼結果

位置結果是:廣東省廣州市番禺區漢溪大道東 -

 

好了,新版百度地圖API就這麼簡單,弄了半個小時才弄好,使用過程當中若有問題,請聯繫本人

最新demo:詳見:[『BABaseProject』](https://github.com/boai/BABaseProject)中的`tabbar 的 消息欄目

微博:@博愛1616

QQ:137361770

 

## 三、博愛極力推薦

序號 | 類庫 | 簡介及功能介紹 

:----------- | :-----------: | :-----------

3.1         | [『BAButton』](https://github.com/boai/BAButton)        | 徹底實現 UIButton 的自定義的類庫。pod 導入:`pod 'BAButton', '~> 1.0.1'`

3.2         | [pod安裝和使用方法](http://www.cnblogs.com/boai/p/4977976.html)        | 對pod仍是不熟的同窗,能夠看下個人博客,是最新的pod安裝和使用方法,一直更新!

3.3         | [『BASegmentControl』](https://github.com/boai/BASegmentControl)        | 新增網易新聞的滑動SegmentControl,基於[『HMSegmentedControl』](https://github.com/HeshamMegid/HMSegmentedControl)的完美二次封裝!

3.4         | [『BAReminderDemo』](https://github.com/boai/BAReminderDemo)        | 系統提醒和日曆提醒,最近作了一個預定功能,有用到系統提醒和日曆提醒,就寫了這個demo!

3.5         | [『BALocalNotification』](https://github.com/boai/BALocalNotification)        | 本地通知最新完美封裝,最近整理了下本地通知和極光推送,有不少坑都踩過了,剛剛整理出來的完美封裝,確定適合大部分場合,也能夠用此封裝寫鬧鐘,也提醒事件,均可以!若是喜歡,請在git上點個星吧!

3.6         | [『BANetManager』](https://github.com/boai/BANetManager)        | 基於[『AFNetworking 3.1』](https://github.com/AFNetworking/AFNetworking)!最新版本的封裝,集成了get/post 方法請求數據,單圖/多圖上傳,視頻上傳/下載,網絡監測 等多種網絡請求方式!

3.7         | [『APP中的文字和APP名字的國際化多語言處理』](http://www.cnblogs.com/boai/p/5337558.html)        | 最全、最貼心的國際化處理博客!

3.8         | 3D Touch 的純代碼實現方法        | 詳見:[『BABaseProject』](https://github.com/boai/BABaseProject)中的`appdelegate`!

3.9         | [『DSAlert』](https://github.com/DS-Team/DSAlert-OC](https://github.com/DS-Team/DSAlert-OC)       | 目前爲止,最爲精簡的 alert 和 actionSheet 封裝!DSAlert 讓你的彈框再也不孤單![『DSAlert』](https://github.com/DS-Team/DSAlert-OC](https://github.com/DS-Team/DSAlert-OC)!

3.10        | 最新、最全、最優美的友盟登陸和分享的封裝        | 詳見:[『BABaseProject』](https://github.com/boai/BABaseProject)中的`demo 4`!

3.11        | 最新、最全、最優美的 清理 APP 緩存的封裝        | 詳見:[『BABaseProject』](https://github.com/boai/BABaseProject)中的`demo 2`!

3.12        | 最新、最全、最優美的 漸變navi 的封裝        | 詳見:[『BABaseProject』](https://github.com/boai/BABaseProject)中的`tabbar 的 消息欄目`!

3.13        | 最新、最全、最優美的 獲取全部系統設置跳轉 的封裝        | 詳見:[『BABaseProject』](https://github.com/boai/BABaseProject)中的`tabbar 的 消息欄目中demo 3`!

相關文章
相關標籤/搜索