目前我们在做IOS开发中绝大多数用的是GoogleMap地图,IOS本身自带的也是googleMap,但是如果我们希望在地图上实时显示路况信息等部分功能,googlemap则没有,所以有时候我们可以应用百度地图做应用程序。下面我简单介绍一下BMapKit的应用:
一:首先我们有一点与用googlemap开发的不同,需要创建BMKMapManager管理应用程序的map,如果没有这个类,地图则不能够显示。
下面红色的字体是自己在百度官方申请的地图api——key;
BMKMapManager *_mapManager = [[BMKMapManageralloc] init];
BOOL ret = [_mapManagerstart:@"C3252C69EDB6D21A10B3FC96
if (!ret) {
NSLog(@"manager start failed!");
}
二:在view中添加BMKMapView,同时设置BMKMapViewDelegate,添加annotation(记录兴趣点,BMKAnnotation),同时每个兴趣点可以设置其title(设置annotation的标题),以及subtitle(子标题)。@interface MapBaiDu :UIViewController <</SPAN>BMKMapViewDelegate> { }
@property (nonatomic,strong) BMKMapView *_mapView;
@end
- (void)viewDidLoad {
_mapView = [[BMKMapViewalloc] initWithFrame:CGRectMake(0,39, 320,377)]; //创建MKMapView
[self.viewaddSubview:_mapView];
[_mapViewrelease];
_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 = [_mapViewregionThatFits:viewRegion];
[_mapViewsetRegion: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
- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
2:annotation*根据anntation生成对应的View
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <<SPAN class=s3>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 didDeselectAnnotationVie
BMKAnnotationView为标注点显示视图类,该类继承UIView,可以设置此view显示的图像,可以设置centerOffset(中心的位置,正的偏移使view超右下方移动,负的朝右上方移动,单位为像素),还可以设置calloutOffset改变淡出的气泡位置(正的偏移使view超右下方移动,负的朝左上方移动,单位是像素)。还可以设置其触摸事件,默认情况下为YES,可以选中,也可以是enabled = NO。其他的属性还有:selected,canShowCallout,leftCalloutAccessoryView
四:当地图view定位时调用函数:
*当取消选中一个annotation views时,调用此接口
- (void)mapView:(BMKMapView *)mapView didDeselectAnnotationVie
*在地图View将要启动定位时,会调用此函数
- (void)mapViewWillStartLocating
*在地图View停止定位后,会调用此函数
- (void)mapViewDidStopLocatingUs
*定位失败后,会调用此函数
- (void)mapView:(BMKMapView *)mapView didFailToLocateUserWithE
*用户位置更新后,会调用此函数
- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation;
五:当有overlay(阴影标示某一个区域)生成或者新添加的时候调用此接口*根据overlay生成对应的View
- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <<SPAN class=s3>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:(BMKAnnotationViewDragSta
fromOldState:(BMKAnnotationViewDragSta
enum {
BMKAnnotationViewDragSta
BMKAnnotationViewDragSta
BMKAnnotationViewDragSta
BMKAnnotationViewDragSta
BMKAnnotationViewDragSta
};
typedef NSUInteger BMKAnnotationViewDragSta