IOS 百度地图实现动态添加多边形覆盖物

首先说下因为我从事的Android开发,百度地图jforAndroid在项目中接触过,没有细细研究过,一直用的高德,对于添加多边形覆盖物这个功能,我用的还是比较多的,对于Android版的高德地图,在API中已经完美集成了这个功能了,但是百度forIOS,用起来就没有那么方便了,只有静态的添加方法,没办法动态添加,得自己费一番功夫,国际惯例,先上动图,也许我的实现不是最好的,欢迎一起学习交流!


IOS 百度地图实现动态添加多边形覆盖物_第1张图片
aa.gif

要实现这个效果,最先要解决的就是地图的屏幕点击事件,看了API,发现百度屏幕点击事件有三个方法:

-(void)mapView:(BMKMapView *)mapView onClickedMapPoi:(BMKMapPoi *)mapPoi{}//点击地图POI的时候触发

-(void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate{}//点击地图空白区域的时候触发

-(void)mapView:(BMKMapView *)mapView onClickedBMKOverlayView:(BMKOverlayView *)overlayView{}//点击地图Overlay的时候触发

看了上面三个方法有点小崩溃,我们需要在onClickedMapPoi()和onClickedMapBlank()中分别实现我们的方法,这里不知道有没有更好方法,因为这么实现的话会有点小问题。

接着就是实现添加地理围栏的方法了,奉上官方的代码:

- (void)viewDidLoad {    
 
    [super viewDidLoad];     
    // 添加多边形覆盖物    
    CLLocationCoordinate2D coords[3] = {0};
    coords[0].latitude = 39;
    coords[0].longitude = 116;
    coords[1].latitude = 38;
    coords[1].longitude = 115;
    coords[2].latitude = 38; 
    coords[2].longitude = 117; 
    BMKPolygon* polygon = [BMKPolygon polygonWithCoordinates:coords count:3];
 
    [_mapView addOverlay:polygon];    
}    
// Override    
- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id )overlay{  
    if ([overlay isKindOfClass:[BMKPolygon class]]){    
        BMKPolygonView* polygonView = [[[BMKPolygonView alloc] initWithOverlay:overlay] autorelease];    
        polygonView.strokeColor = [[UIColor purpleColor] colorWithAlphaComponent:1];
        polygonView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; 
        polygonView.lineWidth = 5.0;
 
        return polygonView;    
    }    
    return nil;  
}
IOS 百度地图实现动态添加多边形覆盖物_第2张图片
2182D407-40A7-43DA-BEBF-1992B5875E74.png

这里最重要的是CLLocationCoordinate2D,只要能动态添加这个数组内的元素,那么一切就迎刃而解了。好的,来了,动态分配数组:

CLLocationCoordinate2D * coords = (CLLocationCoordinate2D *)malloc(sizeof(CLLocationCoordinate2D)*size);

好吧,直接上代码:



-(void)mapView:(BMKMapView *)mapView onClickedMapPoi:(BMKMapPoi *)mapPoi{

     CLLocationCoordinate2D coordinate = mapPoi.pt;//获取点击坐标
    [self addPointAnnotation:coordinate];
    if (self.array == nil) {
        self.array = [[NSMutableArray alloc] init];//初始化数组,用来存储坐标
    }
    CLLocation *location = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
    [self.array addObject:location];//坐标转换用,因为NSMutableArray无法直接存储 CLLocationCoordinate2D 
    
    NSInteger size = [self.array count];
    //大于三的时候才添加
    if (size >= 3) {
        NSArray *a =  [self.map overlays];
        [self.map removeOverlays:a];
        //动态分配数组
        CLLocationCoordinate2D * coords = (CLLocationCoordinate2D *)malloc(sizeof(CLLocationCoordinate2D)*size);//size就是数组的大小
        
        for (int i = 0; i < [self.array count]; i++) {
            CLLocation *location = [self.array objectAtIndex:i];
            coords[i].latitude = location.coordinate.latitude;
            coords[i].longitude = location.coordinate.longitude;
            
        }
        
        BMKPolygon *polygon2 = [BMKPolygon polygonWithCoordinates:coords count:size];
        [self.map addOverlay:polygon2];
        
    }
    
    [location release];

}

以上!

你可能感兴趣的:(IOS 百度地图实现动态添加多边形覆盖物)