zoukankan      html  css  js  c++  java
  • IOS开发之百度地图API应用

    目前我们在做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;

     

    转自:http://blog.csdn.net/sanpintian/article/details/7402853

  • 相关阅读:
    Oracle expdp impdp中 exclude/include 的使用
    Oracle表空间迁移Move Tablespace
    m2ewtp的作用
    有意思的排序算法合并排序
    有意思的排序算法插入排序
    equals与“==”之惑
    简化的打印语句静态导入
    有意思的排序算法堆排序
    博客开篇语
    MySQL 整理笔记 张大哥
  • 原文地址:https://www.cnblogs.com/huangh/p/4040586.html
Copyright © 2011-2022 走看看