百度地图使用笔记

今天使用百度地图的时候碰到了几个小问题,这里做下记录,注意下次不要再犯错。

1.给地图添加标注的时候,加完标注没有显示,百度了半天,原来是因为百度地图要加标注有两个步骤”

首先添加标注:

annotation = [[BMKPointAnnotation alloc]init];

        CLLocationCoordinate2D coor ;

        coor.latitude = [arrLocate[i][@"lat"] floatValue];

        coor.longitude = [arrLocate[i][@"lng"] floatValue];

        annotation.coordinate = coor;

        annotation.title = [NSString stringWithFormat:@"%d",i];

        [_mapView addAnnotation:annotation];

然后还要实现一个代理中,创建返回的BMKPinAnnotationView

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

{

    if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {

        NSString *AnnotationViewID = @"renameMark";

        BMKPinAnnotationView *annotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

        if (annotationView == nil) {

            annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];

            // 设置颜色

            annotationView.pinColor = BMKPinAnnotationColorPurple;

            // 从天上掉下效果

            annotationView.animatesDrop = YES;

            // 设置不可拖拽

            annotationView.draggable = NO;

        }

        return annotationView;

    }else{

        return nil;

    }

}

2.如果查询地图上的多个点,并添加标注的话,让地图显示所有标注点的范围的方法如下:

 NSArray * arrLocate = @[@{@"lat":@"34",

                              @"lng":@"108"},

                            @{@"lat":@"30",

                              @"lng":@"108"},

                            @{@"lat":@"32",

                              @"lng":@"100"}];

//    CGFloat maxDistance = 0;

    CGFloat minLat=90.0;

    CGFloat maxLat=-90.0;

    CGFloat minLon=180.0;

    CGFloat maxLon=-180.0;

    

    for (int i=0; i<arrLocate.count; i++) {

        annotation = [[BMKPointAnnotation alloc]init];

        CLLocationCoordinate2D coor ;

        coor.latitude = [arrLocate[i][@"lat"] floatValue];

        coor.longitude = [arrLocate[i][@"lng"] floatValue];

        annotation.coordinate = coor;

        annotation.title = [NSString stringWithFormat:@"%d",i];

        [_mapView addAnnotation:annotation];

        

        minLat = MIN(minLat, coor.latitude);

        maxLat = MAX(maxLat, coor.latitude);

        minLon = MIN(minLon, coor.longitude);

        maxLon = MAX(maxLon, coor.longitude);

//        CLLocation * current = [[CLLocation alloc]initWithLatitude:coor.latitude longitude:coor.longitude];

//        CLLocationDistance meters = [_userLocation distanceFromLocation:current];

//        maxDistance = maxDistance<meters ? meters :maxDistance;

    }

    //调整地图显示

    if (arrLocate.count) {

        //计算中心点

        CLLocationCoordinate2D centerCoor;

        centerCoor.latitude = (CLLocationDegrees)(maxLat+minLat)/2.0;

        centerCoor.longitude = (CLLocationDegrees)(maxLon+minLon)/2.0;

        //计算地理位置的跨度

        BMKCoordinateSpan span;

        span.latitudeDelta = maxLat-minLat;

        span.longitudeDelta = maxLon-minLon;

        //得出坐标区域

        BMKCoordinateRegion region = BMKCoordinateRegionMake(centerCoor, span);

        //百度地图的坐标范围转换成相对试图的位置

        CGRect fitRect = [_mapView convertRegion:region toRectToView:_mapView];

        //讲地图试图的位置转换成地图的位置

        BMKMapRect fitMapRect = [_mapView convertRect:fitRect toMapRectFromView:_mapView];

        //设置地图可视范围为数据所在地图的位置

        [_mapView setVisibleMapRect:fitMapRect animated:YES];

    }

3.我发现点击标注的方法是

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

百度地图没有点击弹出框对应的代理方法,只是有设置左右侧view的方法,如果想要加点击事件的话除非自定义BMKAnnotationView,否则就是把事件写到左右的left/rightCalloutAccessoryView中了吧,我不知道这个地方有没有更好的解决方法,如果有,望各位不吝赐教。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值