iOS開發之百度地圖的集成——地圖標註&POI檢索

来源:http://www.cnblogs.com/Jepson1218/archive/2016/03/17/5288287.html
-Advertisement-
Play Games

本篇分為兩部分: 第一步:首先創建 BMKMapView 視圖 第二步:在視圖完全顯示出來後設置,並實現代理方法 第三步:運行程式,此時大頭針效果可以正常顯示 第一步:延時載入對象 第二步:實現BMKPoiSearchDelegate代理方法 第三步:實現 BMKPoiSearchDelegate


本篇分為兩部分:

一、地圖標註

  第一步:首先創建 BMKMapView 視圖

  第二步:在視圖完全顯示出來後設置,並實現代理方法

  第三步:運行程式,此時大頭針效果可以正常顯示

二、POI檢索

  第一步:延時載入對象

  第二步:實現BMKPoiSearchDelegate代理方法

  第三步:實現 BMKPoiSearchDelegate 處理回調結果

  第四步:運行程式,此時便可檢索到附近小吃相關標註


一、地圖標註

標註BMKAnnotation一定要實現為標註對應的protocal<BMKMapViewDelegate>

第一步:首先創建 BMKMapView 視圖

- (BMKMapView *)mapView {
    if (!_mapView) {
        _mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds];
        self.view = _mapView;
    }
    return _mapView;
}

 第二步:在視圖完全顯示出來後設置,並實現代理方法

- (void) viewDidAppear:(BOOL)animated {
    // 添加一個PointAnnotation
    BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
    CLLocationCoordinate2D coor;
    coor.latitude = 39.915;
    coor.longitude = 116.404;
    annotation.coordinate = coor;
    annotation.title = @"這裡是北京";
    annotation.subtitle = @"我為你無法呼吸~";
    [_mapView addAnnotation:annotation];
}

// 自定義添加大頭針方法
- (void)addAnnoWithPT:(CLLocationCoordinate2D)coor andTitle:(NSString *)title andAddress:(NSString *)address {
    // 添加一個PointAnnotation
    BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
    annotation.coordinate = coor;
    annotation.title = title;
    annotation.subtitle = address;
    [_mapView addAnnotation:annotation];
}
#pragma mark
#pragma mark - BMKLocationServiceDelegate 代理方法,用於添加大頭針
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation {
    static NSString *identifier = @"myAnnotation";
    if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
        BMKPinAnnotationView *newAnnotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
        if (!newAnnotationView) {
            newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
        }
        newAnnotationView.annotation = annotation;
        newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
        newAnnotationView.animatesDrop = YES;// 設置該標註點動畫顯示
        
        //添加按鈕監聽點擊事件
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
        newAnnotationView.rightCalloutAccessoryView = btn;
        [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
        
        return newAnnotationView;
    }
    return nil;
}

 

 第三步:運行程式,此時大頭針效果可以正常顯示

 


二、POI檢索

第一步:延時載入對象

- (BMKPoiSearch *)poiSearch {
    if (!_poiSearch) {
        _poiSearch = [[BMKPoiSearch alloc] init];
        _poiSearch.delegate = self;
    }
    return _poiSearch;
}

第二步:實現BMKPoiSearchDelegate代理方法

// 長按地圖時會調用此方法
- (void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate {
    //發起檢索
    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
    option.pageIndex = 0;
    option.pageCapacity = 20;
    option.location = coor;
    option.keyword = @"小吃";
    BOOL flag = [self.poiSearch poiSearchNearBy:option];
    if(flag) {
        NSLog(@"周邊檢索發送成功");
    } else {
        NSLog(@"周邊檢索發送失敗");
    }
    
    // 設置初始化區域
    CLLocationCoordinate2D center = option.location;
    BMKCoordinateSpan span;
    span.latitudeDelta = 0.016263;
    span.longitudeDelta = 0.012334;
    BMKCoordinateRegion region;
    region.center = center;
    region.span = span;
    [self.mapView setRegion:region animated:YES];
}

 第三步:實現 BMKPoiSearchDelegate 處理回調結果

- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error {
    if (error == BMK_SEARCH_NO_ERROR) {
        //在此處理正常結果
//        NSLog(@"成功:%@", poiResultList.poiInfoList);
        
        [poiResultList.poiInfoList enumerateObjectsUsingBlock:^(BMKPoiInfo * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//            NSLog(@"%@----%@", obj.name, obj.address);  // 由於設置檢索時,每頁指定了10條,所以此處檢索出10條相關信息
            [self addAnnoWithPT:obj.pt andTitle:obj.name andAddress:obj.address];
        }];
    }
    else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){
        //當在設置城市未找到結果,但在其他城市找到結果時,回調建議檢索城市列表
        // result.cityList;
        NSLog(@"起始點有歧義");
    } else {
        NSLog(@"抱歉,未找到結果, %zd", error);
    }
}

 第四步:運行程式,此時便可檢索到附近小吃相關標註

 註意:需要引入的頭文件

#import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地圖功能所有的頭文件

#import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入檢索功能所有的頭文件

#import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的頭文件

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇主要講述百度地圖的導航功能: 第一步:在使用百度導航之前,我們需要在百度地圖開放平臺上下載導航的 SDK,共85.8M,網速不好的同學可提前準備好。 第二步:引入導航所需的系統包 將AudioToolbox.framework、ImageIO.framework、CoreMotion.frame
  • 1.SQLite資料庫: SQLite 是一個開源的嵌入式關係資料庫,實現自包容、零配置、支持事務的SQL資料庫引擎。 其特點是高度便攜、使 用方便、結構緊湊、高效、可靠。 與其他資料庫管理系統不同,SQLite 的安裝和運行非常簡單,在大多數情況下 - 只要確保 SQLite的二進位文件存在即可開
  • 一般白色就是0,黑色就是1 單色點陣圖: 24位點陣圖 256色 安卓中預設使用32位的 將一個圖片放在SD卡上,使用BitmapFactory.decodeFile解析得Bitmap設置ImageView顯示 以上的圖片可以正常載入 異常現象 載入 的圖片過大,如2560*1520之類的,載入 時就會
  • 本文主要實現了微信的個人主頁的設置: 目錄文件如下: 實現代碼如下: RootTableViewController.h RootTableViewController.m AppDelegate.h AppDelegate.m 效果圖如下:
  • 主要在清單文件這樣配置: 2、那麼如何讓屏幕橫屏或者豎屏時對activity沒有影響呢?應當這樣配置:
  • 我們先看一下效果 代碼如下 首先是第一個頁面 rootTableViewController.h rootTableViewController.m 第二個頁面 cityTableViewController.h 第二個頁面 cityTableViewController.m 指定根目錄AppDel
  • 網路請求預設是get 網路請求有很多種:GET查 POST改 PUT增 DELETE刪 HEAD 在平時開發中主要用的 是 get 和 post. get 獲得數據 (獲取用戶信息) get 請求是沒有長度限制的,真正的長度限制是瀏覽器做的,限制長度一般2k get 請求是有緩存的,get 有冪等的
  • 字典 NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", @"One", @"4", nil]; //字典中的數據以鍵值對的方式進
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...