iOS开发第三方工具——如何调用百度地图API

BaiduMapKit for ios 下载

一、路线搜索

IOS开发之百度地图API应用

二、调用百度地图的导航
//latitude-纬度  longitude-经度
NSString *stringURL = [NSString stringWithFormat:@"baidumap://map/direction?origin=%f,%f&destination=%f,%f&mode=driving",self.myCoordinate.latitude,self.myCoordinate.longitude,
                           self.sellerCoordinate.latitude,self.sellerCoordinate.longitude];
    NSURL *url = [NSURL URLWithString:stringURL];
    if (![[UIApplication sharedApplication] openURL:url]) {
        MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];
        hud.labelText = @"本机没有安装百度地图";
        [hud hide:YES afterDelay:0.5];
    }

三、注意细节

1. self.mapView.showsUserLocation = YES;//放在ViewDidLoad方法里一般不起作用,原因是mapView在Load的时候需要一段时间。设置该参数的意思是马上启动定位回调功能,并在地图上把自己的位置标注出来,正确的做法是放到ViewDidAppear方法里,如下代码:

- (void)viewDidAppear:(BOOL)animated{
    self.mapView.showsUserLocation = YES;
    [super viewDidAppear:animated];
}

另外还要注意两点:(1)设置showsUserLocation=YES后,mapView并不会自己移动好合适的位置,需要自己写代码来移动。

    //放一个Annotation
    RouteAnnotation* item = [[RouteAnnotation alloc]init];
    item.coordinate = self.myCoordinate;// 我的经纬度信息
    item.title = @"我的位置";
    item.type = 1;
    [_mapView addAnnotation:item]; // 添加起点标注
    //移动地图的大小,把自己的位置放在mapView的中心点
    BMKCoordinateSpan span = BMKCoordinateSpanMake(0.01, 0.01);
    BMKCoordinateRegion viewRegion = BMKCoordinateRegionMake(self.myCoordinate,span);//以自己的位置为中心
    [self.mapView setRegion:[self.mapView regionThatFits:viewRegion] animated:NO];

                          (2)设置showsUserLocation=YES后,会一直不停的回调didUpdateUserLocation方法,如果想关闭定位功能,只需设置didUpdateUserLocation=NO即可。
2. 改变搜索线路的颜色

- (BMKOverlayView*)mapView:(BMKMapView *)map viewForOverlay:(id<BMKOverlay>)overlay{
    HRLOG(@"- (void)mapView:viewForOverlay:->param:%@,%@", map, overlay);
    if ([overlay isKindOfClass:[BMKPolyline class]]) {
        BMKPolylineView* polylineView = [[BMKPolylineView alloc] initWithOverlay:overlay];
        polylineView.fillColor = BMKPOLYLINE_FILL_COLOR;    //填充颜色
        polylineView.strokeColor = BMKPOLYLINE_STROKE_COLOR;//画笔颜色
        polylineView.lineWidth = 3.0;//线条宽度
        return polylineView;
    }
    return nil;
}

3. onGetDrivingRouteResult和onGetWalkingRouteResult方法里的业务逻辑一样的
4. 计算任意两个经纬度之间的距离(详细讲解根据两点经纬度计算距离

//计算两个经纬度之间的距离
double GetDistance(double lat1, double lng1, double lat2, double lng2){
    double EARTH_RADIUS = 6378.137;
    double radLat1 = (lat1 * M_PI) / 180.0;
    double radLat2 = (lat2 * M_PI) / 180.0;
    double a = radLat1 - radLat2;
    double b = (lng1 * M_PI) / 180.0  - (lng2 * M_PI) / 180.0 ; 
    double s = 2 * sin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
    s = s * EARTH_RADIUS;
    s = round(s * 10000) / 10000;
    return s;
}

 

 
 
 
posted @ 2013-06-28 15:58  yshch  阅读(2408)  评论(0编辑  收藏  举报