你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS百度地圖復雜運用詳解

iOS百度地圖復雜運用詳解

編輯:IOS開發綜合

百度地圖 IOS SDK是一套基於IOS 5.0及以上版本設備的使用順序接口,不只提供展現地圖的根本接口,還提供POI檢索、途徑規劃、地圖標注、離線地圖、定位、周邊雷達等豐厚的LBS才能 。

明天次要引見以下接口

根底地圖 POI檢索 定位

首先配置環境

1.自動配置.framework方式開發包(運用CocoaPods)<引薦>

2.手動配置.framework方式開發包

特別留意:
(API裡有很多留意點,大家可以詳細去看.但是我說的後兩點少其中一個都會失敗,第一點是有需求的話,必需加上)

1、假如在IOS9中運用了調起百度地圖客戶端功用,必需在"Info.plist"中停止如下配置,否則不能調起百度地圖客戶端。

  <key>LSApplicationQueriesSchemes</key>
  <array>
    <string>baidumap</string>
  </array>

2、自iOS SDK v2.5.0起,為了對iOS8的定位才能做兼容,需求在info.plist裡添加(以下二選一,兩個都添加默許運用 NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允許在前台運用時獲取GPS的描繪
NSLocationAlwaysUsageDescription ,允許永世運用GPS的描繪

3、在運用Xcode6停止SDK開發進程中,需求在info.plist中添加:Bundle display name ,且其值不能為空(Xcode6新建的項目沒有此配置,若沒有會形成manager start fail

配置完成後

AppDelegate.m文件中添加對BMKMapManager的初始化,並填入請求的受權Key

#import "AppDelegate.h"
#import <BaiduMapAPI_Base/BMKMapManager.h>
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//創立並初始化一個引擎對象
  BMKMapManager *manager = [[BMKMapManager alloc] init];
//啟動地圖引擎
  BOOL success = [manager start:@"zBWLNgRUrTp9CVb5Ez6gZpNebljmYylO" generalDelegate:nil];

  if (!success) {
    NSLog(@"失敗");
  }
  // Override point for customization after application launch.
  return YES;
}

1.根底地圖

#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
@interface ViewController ()<BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
   //初始化地圖
  self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
  self.mapView.delegate =self;
  //設置地圖的顯示款式
  self.mapView.mapType = BMKMapTypeSatellite;//衛星地圖

  //設定地圖能否翻開路況圖層
  self.mapView.trafficEnabled = YES;

  //底圖poi標注
  self.mapView.showMapPoi = NO;

  //在手機受騙前可運用的級別為3-21級
  self.mapView.zoomLevel = 21;

  //設定地圖View能否支持旋轉
  self.mapView.rotateEnabled = NO;

  //設定地圖View能否支持用戶挪動地圖
  self.mapView.scrollEnabled = NO;

  //添加到view上
  [self.view addSubview:self.mapView];

  //還有很多屬性,依據需求檢查API
}

運轉效果入下;

2.定位

#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
#import <BaiduMapAPI_Location/BMKLocationService.h>
@interface ViewController ()<BMKLocationServiceDelegate,BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
@property (nonatomic,strong) BMKLocationService *service;//定位服務

@end

@implementation ViewController


- (void)viewDidLoad {
  [super viewDidLoad];

   //初始化地圖
  self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
  self.mapView.delegate =self;

  //添加到view上
  [self.view addSubview:self.mapView];

  //初始化定位
  self.service = [[BMKLocationService alloc] init];

  //設置代理
  self.service.delegate = self;

  //開啟定位
  [self.service startUserLocationService];


  // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------BMKLocationServiceDelegate 

/**
 *用戶地位更新後,會調用此函數
 *@param userLocation 新的用戶地位
 */
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {


  //展現定位
  self.mapView.showsUserLocation = YES;

  //更新地位數據
  [self.mapView updateLocationData:userLocation];

  //獲取用戶的坐標
   self.mapView.centerCoordinate = userLocation.location.coordinate;

   self.mapView.zoomLevel =18;

}

運轉後果

POI檢索

#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
#import <BaiduMapAPI_Location/BMKLocationService.h>
#import <BaiduMapAPI_Search/BMKPoiSearch.h>
#import <BaiduMapAPI_Map/BMKAnnotation.h>
#import <BaiduMapAPI_Map/BMKPointAnnotation.h>
#import <BaiduMapAPI_Map/BMKPinAnnotationView.h>


#define kWidth [UIScreen mainScreen].bounds.size.width
@interface ViewController ()<BMKLocationServiceDelegate,BMKPoiSearchDelegate,BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
@property (nonatomic,strong) BMKLocationService *service;//定位服務
@property (nonatomic,strong) BMKPoiSearch *poiSearch;//搜索服務

@property (nonatomic,strong) NSMutableArray *dataArray;
@end

@implementation ViewController

- (NSMutableArray *)dataArray {
  if (!_dataArray) {
    _dataArray = [NSMutableArray array];

  }
  return _dataArray;

}
- (void)viewDidLoad {
  [super viewDidLoad];

  //初始化地圖
  self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
  self.mapView.delegate =self;
//  //設置地圖的顯示款式
//  self.mapView.mapType = BMKMapTypeSatellite;//衛星地圖
//  
//  //設置路況
//  self.mapView.trafficEnabled = YES;
//  
//  //底圖poi標注
//  self.mapView.showMapPoi = NO;
//  
//  //在手機受騙前可運用的級別為3-21級
//  self.mapView.zoomLevel = 21;
//  
//  //旋轉
//  self.mapView.rotateEnabled = NO;
//  
//  //拖拽
//  self.mapView.scrollEnabled = NO;
//  

  [self.view addSubview:self.mapView];

  //初始化定位
  self.service = [[BMKLocationService alloc] init];

  //設置代理
  self.service.delegate = self;

  //開啟定位
  [self.service startUserLocationService];


  // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------BMKLocationServiceDelegate 


/**
 *用戶地位更新後,會調用此函數
 *@param userLocation 新的用戶地位
 */
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {


  //展現定位
  self.mapView.showsUserLocation = YES;

  //更新地位數據
  [self.mapView updateLocationData:userLocation];

  //獲取用戶的坐標
   self.mapView.centerCoordinate = userLocation.location.coordinate;

   self.mapView.zoomLevel =18;

 

  //初始化搜索
  self.poiSearch =[[BMKPoiSearch alloc] init];


  self.poiSearch.delegate = self;

 

  //初始化一個周邊雲檢索對象
  BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc] init];

  //索引 默許為0
  option.pageIndex = 0;

  //頁數默許為10
  option.pageCapacity = 50;

  //搜索半徑
  option.radius = 200;

  //檢索的中心點,經緯度
  option.location = userLocation.location.coordinate;

  //搜索的關鍵字
  option.keyword = @"小吃";

 

   //依據中心點、半徑和檢索詞發起周邊檢索
  BOOL flag = [self.poiSearch poiSearchNearBy:option];
  if (flag) {
    NSLog(@"搜索成功");
    //封閉定位
    [self.service stopUserLocationService];
  }
  else {

    NSLog(@"搜索失敗");
  }

}


#pragma mark -------BMKPoiSearchDelegate
/**
 *前往POI搜索後果
 *@param searcher 搜索對象
 *@param poiResult 搜索後果列表
 *@param errorCode 錯誤號,@see BMKSearchErrorCode
 */
- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {

   //若搜索成功
  if (errorCode ==BMK_SEARCH_NO_ERROR) {

    //POI信息類
    //poi列表
    for (BMKPoiInfo *info in poiResult.poiInfoList) {

      [self.dataArray addObject:info];

      //初始化一個點的正文 //只要三個屬性
      BMKPointAnnotation *annotoation = [[BMKPointAnnotation alloc] init];

      //坐標
      annotoation.coordinate = info.pt;

      //title
      annotoation.title = info.name;

      //子標題
      annotoation.subtitle = info.address;

      //將標注添加到地圖上
      [self.mapView addAnnotation:annotoation];
    }
  }


}

/**
 *前往POI概況搜索後果
 *@param searcher 搜索對象
 *@param poiDetailResult 概況搜索後果
 *@param errorCode 錯誤號,@see BMKSearchErrorCode
 */
- (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {

  NSLog(@"%@",poiDetailResult.name);

}


#pragma mark -------------BMKMapViewDelegate

/**
 *依據anntation生成對應的View
 *@param mapView 地圖View
 *@param annotation 指定的標注
 *@return 生成的標注View
 */
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {

  //假如是正文點
  if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {

    //依據正文點,創立並初始化正文點視圖
    BMKPinAnnotationView *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"];

    //設置大頭針的顏色
    newAnnotation.pinColor = BMKPinAnnotationColorRed;

    //設置動畫
    newAnnotation.animatesDrop = YES;

    return newAnnotation;

  }

  return nil;
}
/**
 *中選中一個annotation views時,調用此接口
 *@param mapView 地圖View
 *@param views 選中的annotation views
 */
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view {

  //poi概況檢索信息類
  BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init];


  BMKPoiInfo *info = self.dataArray.firstObject;

  //poi的uid,從poi檢索前往的BMKPoiResult構造中獲取
  option.poiUid = info.uid;

  /**
   *依據poi uid 發起poi概況檢索
   *異步函數,前往後果在BMKPoiSearchDelegate的onGetPoiDetailResult告訴
   *@param option poi概況檢索參數類(BMKPoiDetailSearchOption)
   *@return 成功前往YES,否則前往NO
   */
  BOOL flag = [self.poiSearch poiDetailSearch:option];

  if (flag) {
    NSLog(@"檢索成功");
  }
  else {

    NSLog(@"檢索失敗");
  }

 

}

運轉後果

總結

百度地圖的功用很弱小,還有很多檢索,都沒有寫.大家又興味可以研究下,畢竟第三方的接口文檔絕對比擬明了.以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持本站。

【iOS百度地圖復雜運用詳解】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

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