今天使用百度地图的时候碰到了几个小问题,这里做下记录,注意下次不要再犯错。
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];
}
-(void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view
百度地图没有点击弹出框对应的代理方法,只是有设置左右侧view的方法,如果想要加点击事件的话除非自定义BMKAnnotationView,否则就是把事件写到左右的left/rightCalloutAccessoryView中了吧,我不知道这个地方有没有更好的解决方法,如果有,望各位不吝赐教。