IOS開發之百度地圖API應用

來源:互聯網
上載者:User

目前我們在做IOS開發中絕大多數用的是GoogleMap地圖,IOS本身內建的也是googleMap,但是如果我們希望在地圖上即時顯示路況資訊等部分功能,googlemap則沒有,所以有時候我們可以應用百度地圖做應用程式。下面我簡單介紹一下BMapKit的應用:

一:首先我們有一點與用googlemap開發的不同,需要建立BMKMapManager管理應用程式的map,如果沒有這個類,地圖則不能夠顯示。

下面紅色的字型是自己在百度官方申請的地圖api——key;

BMKMapManager  *_mapManager = [[BMKMapManager
alloc] init];

BOOL ret = [_mapManager
start:@"C3252C69EDB6D21A10B3FC9657FD1DDC7E0000**"
generalDelegate:self];

if (!ret) {

NSLog(@"manager start failed!");

}

二:在view中添加BMKMapView,同時設定BMKMapViewDelegate,添加annotation(記錄興趣點,BMKAnnotation),同時每個興趣點可以設定其title(設定annotation的標題),以及subtitle(子標題)。

@interface MapBaiDu :
UIViewController <BMKMapViewDelegate> {  }

@property (nonatomic,
strong) BMKMapView *_mapView;

@end


- (void)viewDidLoad {

    _mapView = [[BMKMapView
alloc] initWithFrame:CGRectMake(0,
39, 320,
377)];     //建立MKMapView

    [self.view
addSubview:_mapView];

    [_mapView
release];

    

    _mapView.delegate =
self;
                           //設定代理

    _mapView.showsUserLocation =
YES;                //設定為可以顯示使用者位置

    CLLocationCoordinate2D coordinate;                  //設定經緯度

    coordinate.latitude =
40.027283;         //緯度

    coordinate.longitude =
116.313217;      //經度

 BMKCoordinateRegion viewRegion =
BMKCoordinateRegionMake(coordinate, BMKCoordinateSpanMake(1.0,
1.0));

    BMKCoordinateRegion adjustedRegion = [_mapView
regionThatFits:viewRegion]; 

    [_mapView
setRegion:adjustedRegion animated:YES];

}

上面最後一行 :設定當前地圖的經緯度範圍,設定的該範圍可能會被調整為適合地圖視窗顯示的範圍。region是BMKMapView的一個屬性,類型BMKCoordinateRegion ,這行的意思是建立一個以coordinate為中心,上下左右個0.5個經(緯)度。但是這時我們需要注意一個問題就是,建立的地區是一個正方形,並不符合我們所需要的BMKMapView比例;之後用方法regionThatFits調整顯示範圍。


///表示一個經緯度地區

typedef struct {

CLLocationCoordinate2D center;
///< 中心點經緯度座標

BMKCoordinateSpan span;
///< 經緯度範圍

} BMKCoordinateRegion;

///表示一個經緯度範圍

typedef struct {

    CLLocationDegrees latitudeDelta;
///< 緯度範圍

    CLLocationDegrees longitudeDelta;
///< 經度範圍

} BMKCoordinateSpan;


三:下面我們簡單說一下delegate

1:地圖地區改變時候調用函數:

- (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;

- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;

2:annotation

 
*根據anntation產生對應的View

- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation;

 
*當mapView新添加annotation views時,調用此介面

- (void)mapView:(BMKMapView *)mapView didAddAnnotationViews:(NSArray *)views;

 
*當選中一個annotation views時,調用此介面

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

  *當取消選中一個annotation views時,調用此介面

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

而annotation分為兩部分:BMKAnotation該類為標註點的protocol,提供了標註類的基本資料函數,title和subtitle分別是標題和子標題;同時可以設定標註的左邊,在拖曳時候會被調用setCoordinate;

BMKAnnotationView為標註點顯示視圖類,該類繼承UIView,可以設定此view顯示的映像,可以設定centerOffset(中心的位置,正的位移使view超右下方移動,負的朝右上方移動,單位為像素),還可以設定calloutOffset改變淡出的氣泡位置(正的位移使view超右下方移動,負的朝左上方移動,單位是像素)。還可以設定其觸摸事件,預設情況下為YES,可以選中,也可以是enabled
= NO。其他的屬性還有:selected,canShowCallout,leftCalloutAccessoryView,rightCalloutAccessoryView。等等

四:當地圖view定位時調用函數:

  *當取消選中一個annotation views時,調用此介面

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

 *在地圖View將要啟動定位時,會調用此函數

- (void)mapViewWillStartLocatingUser:(BMKMapView *)mapView;

 *在地圖View停止定位後,會調用此函數

- (void)mapViewDidStopLocatingUser:(BMKMapView *)mapView;

 *定位失敗後,會調用此函數

- (void)mapView:(BMKMapView *)mapView didFailToLocateUserWithError:(NSError *)error;

 *使用者位置更新後,會調用此函數

- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation;

五:當有overlay(陰影標示某一個地區)產生或者新添加的時候調用此介面

  *根據overlay產生對應的View

- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay;

 *當mapView新添加overlay views時,調用此介面

- (void)mapView:(BMKMapView *)mapView didAddOverlayViews:(NSArray *)overlayViews;

六:當點擊annotation view彈出的泡泡時,調用此介面

*當點擊annotation view彈出的泡泡時,調用此介面

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

九:annotation view有許多不同的狀態,在不同狀態的時候我們都可以設定不同的操作,拖動annotation view時view的狀態變化

- (void)mapView:(BMKMapView *)mapView annotationView:(BMKAnnotationView *)view didChangeDragState:(BMKAnnotationViewDragState)newState 

   fromOldState:(BMKAnnotationViewDragState)oldState;

enum {

    BMKAnnotationViewDragStateNone = 0,     
///< 靜止狀態.

    BMKAnnotationViewDragStateStarting,      ///<
開始拖動

    BMKAnnotationViewDragStateDragging,      ///<
拖動中

    BMKAnnotationViewDragStateCanceling,     ///<
取消拖動

    BMKAnnotationViewDragStateEnding         ///<
拖動結束

};

typedef NSUInteger BMKAnnotationViewDragState;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.