開放平台:百度地圖 for iOS 使用相關

來源:互聯網
上載者:User

今天開始使用百度地圖的API實現相關的地理位置功能

在根據官方文檔: http://developer.baidu.com/map/sdkiosdev-2.htm

進行一系列的引入後,還需要注意以下兩個細節,否則編譯和運行時都會出錯:

1:讓XCode 處於 Objective - C++ 混編模式進行編譯: 最簡單方法就是:隨便更改工程檔案中的某一個,將.m更改為.mm .

2:由於靜態庫裡麵包含類別條目(第四點),所以需要讓工程支援類別的編譯: Project->Build Settings->Other Linker Flags   添加值:
 -all_load

3:關於 setPaopaoView 警告 臨時解決方案如下: 在 Other Linker Flags新增一個
-w 

4:建議合并靜態庫

接下來開始記錄具體用到的功能點:

第一個:成功載入地圖後,開啟定位功能,確認當前使用裝置所在的地理位置,代碼如下:

1: 開發定位功能,允許地圖應用時時擷取地理位置資訊,並觸發委託.

_mapView.showsUserLocation = YES;//開啟定位服務

所觸發的委託:

- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation{  }

2:如果以上委託被調用,說明位置資訊已經成功擷取,接下來需要將地圖位置,移動到定位所在的位置,代碼如下:

_mapView.userLocation //記錄裝置當前所在位置

NSLog(@"!latitude!!!  %f",userLocation.location.coordinate.latitude);//經度NSLog(@"!longtitude!!!  %f",userLocation.location.coordinate.longitude);//緯度

//傳入經緯度,將baiduMapView 鎖定到以當前經緯度為中心點的顯示地區和合適的顯示範圍- (void)setMapRegionWithCoordinate:(CLLocationCoordinate2D)coordinate{    BMKCoordinateRegion region;    if (!_isSetMapSpan)//這裡用一個變數判斷一下,只在第一次鎖定顯示地區時 設定一下顯示範圍 Map Region     {        region = BMKCoordinateRegionMake(coordinate, BMKCoordinateSpanMake(0.05, 0.05));//越小地圖顯示越詳細        _isSetMapSpan = YES;        [baiduMapView setRegion:region animated:YES];//執行設定顯示範圍    }    _currentSelectCoordinate = coordinate;    [baiduMapView setCenterCoordinate:coordinate animated:YES];//根據提供的經緯度為中心原點 以動畫的形式移動到該地區}

執行 setCenterCoordinate:coordinate   以後開始移動,當移動完成後,會執行以下委託:

- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{    [baiduMapView.annotations enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {        BMKPointAnnotation *item = (BMKPointAnnotation *)obj;        if (item.coordinate.latitude == _currentSelectCoordinate.latitude && item.coordinate.longitude == _currentSelectCoordinate.longitude )        {            [baiduMapView selectAnnotation:obj animated:YES];//執行之後,會讓地圖中的標註處於彈出氣泡框狀態            *stop = YES;        }    }];}

注:0.05 表示顯示地區的詳細程度,設定的值最小,其顯示的地圖地區也就更詳細,這個自己試試吧. 幾句話也描述不清楚.

另外位置資訊擷取到以後,會不停的去擷取,所以不需要使用的時候,把_mapView.showsUserLocation 設定為NO;

第二個:給指定的位置加入標註.

BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];item.coordinate = coordinate;//經緯度item.title = titleString;    //標題item.subtitle = subTitleString;//子標題[baiduMapView addAnnotation:item];

注:為地圖類引用 添加一個 標註 執行 addAnnotation 以後 baiduMapView為觸發以下委託,此委託可以定製化標註視圖

//原理類似 UITableView 迴圈委託載入 CellforRowWithIndexPath- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation{    static NSString *AnnotationViewID = @"annotationViewID";    BMKAnnotationView *annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];    if (annotationView == nil) {        annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];((BMKPinAnnotationView*)annotationView).animatesDrop = YES;        annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_location.png"]];//氣泡框左側顯示的View,可自訂                UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeCustom];        [selectButton setFrame:(CGRect){260,0,50,annotationView.Help_height}];        [selectButton setTitle:@"確定" forState:UIControlStateNormal];        annotationView.rightCalloutAccessoryView =selectButton;//氣泡框右側顯示的View 可自訂        [selectButton setBackgroundColor:[UIColor redColor]];        [selectButton setShowsTouchWhenHighlighted:YES];        [selectButton addTarget:self action:@selector(Location_selectPointAnnotation:) forControlEvents:UIControlEventTouchUpInside];    }    //以下三行代碼用於將自訂視圖和標記綁定,一一對應,目的是當點擊,右側自訂視圖時,能夠知道點擊的是那個標記    annotationView.rightCalloutAccessoryView.tag = _cacheAnnotationTag;    [_cacheAnnotationMDic setObject:annotation forKey:[NSNumber numberWithInteger:_cacheAnnotationTag]];    _cacheAnnotationTag++;        //如果是我的位置標註,則允許使用者拖動改標註視圖,並賦予綠色樣式 處於    if ([annotation.title isEqualToString:String_myLocation]) {        ((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorGreen;//標註呈綠色樣式        [annotationView setDraggable:YES];//允許使用者拖動        [annotationView setSelected:YES animated:YES];//讓標註處於彈出氣泡框的狀態    }else    {        ((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorRed;    }        annotationView.centerOffset = CGPointMake(0, -(annotationView.frame.size.height * 0.5));//不知道幹什麼用的    annotationView.annotation = annotation;//綁定對應的標點經緯度    annotationView.canShowCallout = TRUE;//允許點擊彈出氣泡框    return annotationView;}

如果使用者手動在地圖中點擊標註視圖或者是 為 標註視圖  BMKAnnotationView setSelect:YES 那麼會觸發以下委託:

- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view{    _currentSelectCoordinate = view.annotation.coordinate;}

再當點擊彈出的氣泡框時亦會觸發以下委託:

- (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view;

如果要刪除標註:

NSMutableArray *annotationMArray = [[NSArray arrayWithArray:baiduMapView.annotations] mutableCopy];[baiduMapView removeAnnotations:annotationMArray];

第三個就是開始POI檢索

初始化:

baiduMapSearch = [[BMKSearch alloc] init];baiduMapSearch.delegate =self;[BMKSearch setPageCapacity:10]; //設定每次搜尋多少頁

開始搜尋: 提供 搜尋 城市 和關鍵字

BOOL flag = [baiduMapSearch poiSearchInCity:_currentCity withKey:_searchKeywordString pageIndex:_searchPageIndex];

搜尋委託

- (void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error{       //這裡判斷表示順利搜尋成功    if (error == BMKErrorOk) {BMKPoiResult* result = [poiResultList objectAtIndex:0];//如果有表示搜尋到資料for (int i = 0; i < result.poiInfoList.count; i++) {BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];        }    }}

注:BMKPoiResult 裡面展示當前搜尋情況,如下:總共搜尋到多少條資料,本次搜尋到多少條資料,當前搜尋到第幾頁等

     BMKPoiInfo 是每一個搜尋結果,裡面有電話 ,地址,經緯度 等

最多附上相關資源套件: http://www.kuaipan.cn/file/id_10716325655621670.htm

密碼:QNWNaf

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.