iOS-百度地圖(增加點聚合功能)

基礎demo(可直接運行):
http://pan.baidu.com/s/1kVB7EK3
博文連接:
http://www.cnblogs.com/hxwj/p/5146090.html
http://www.cnblogs.com/hxwj/p/4761080.html

百度地圖點聚合和自定義標注

擴展-點聚合功能

在地圖改變的時候傳入坐標模型數(shù)組,使用百度地圖的點聚合算法

- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
    NSMutableArray *array = [NSMutableArray array];
    for (int i = 0; i < 5; i ++) {
        FateModel *model = [FateModel new];
        model.lon = 116.404;
        model.lat = 39.915+i*0.05;
        [array addObject:model];
    }
     [self addPointJuheWithCoorArray:array];
}
//添加模型數(shù)組
- (void)addPointJuheWithCoorArray:(NSArray *)array {
    _clusterCaches = [[NSMutableArray alloc] init];
    for (NSInteger i = 3; i < 22; i++) {
        [_clusterCaches addObject:[NSMutableArray array]];
    }
    //點聚合管理類
    _clusterManager = [[BMKClusterManager alloc] init];
    [array enumerateObjectsUsingBlock:^(FateModel *  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        BMKClusterItem *clusterItem = [[BMKClusterItem alloc] init];
        clusterItem.coor = CLLocationCoordinate2DMake(obj.lat, obj.lon);
        clusterItem.model = obj;
        [_clusterManager addClusterItem:clusterItem];
    }];
    [self updateClusters];
}

//更新聚合狀態(tài)
- (void)updateClusters {
    _clusterZoom = (NSInteger)self.mapView.zoomLevel;
    @synchronized(_clusterCaches) {
        __block NSMutableArray *clusters = [_clusterCaches objectAtIndex:(_clusterZoom - 3)];
        if (clusters.count > 0) {
            [self.mapView removeAnnotations:self.mapView.annotations];
            [self.mapView addAnnotations:clusters];
        } else {
            dispatch_async(dispatch_get_global_queue(0, 0), ^{
                
                ///獲取聚合后的標注
                __block NSArray *array = [_clusterManager getClusters:_clusterZoom];
                
                dispatch_async(dispatch_get_main_queue(), ^{
                    //聚合后的數(shù)組
                    for (BMKCluster *item in array) {
                        FateMapAnnotation *annotation = [[FateMapAnnotation alloc] init];
                        annotation.coordinate = item.coordinate;
                        annotation.size = item.size;
                        annotation.cluster = item;
                        annotation.title = [NSString stringWithFormat:@"我是%ld個", item.size];
                        [clusters addObject:annotation];
                    }
                    [self.mapView removeAnnotations:self.mapView.annotations];
                    [self.mapView addAnnotations:clusters];
                });
            });
        }
    }
}

demo連接:
https://pan.baidu.com/s/1qXLuMCk

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在此特此聲明:一下所有鏈接均來自互聯(lián)網(wǎng),在此記錄下我的查閱學習歷程,感謝各位原創(chuàng)作者的無私奉獻 ! 技術一點一點積...
    遠航的移動開發(fā)歷程閱讀 11,534評論 12 197
  • Auto import(自動導入)對于 Windows,請依次轉到“文件 (File)”>“設置 (Setting...
    acc8226閱讀 356評論 0 0
  • 今天是公元二零一七年農(nóng)歷九月十七日,習慣計算農(nóng)歷的日子記得還是我那騷年在故鄉(xiāng)的那些日子。今天雖一直呆在空間不...
    聚錦緣閱讀 418評論 0 1
  • 首先我們創(chuàng)建一個類:(以下是類的代碼) 這樣我們的調用類就完成了,接下來是如何調用這個類 這樣我們就可以推送了,我...
    浪子與渣男閱讀 5,232評論 17 15
  • 1.想想今天做的事: 六點起床發(fā)口頭祝福語,回復新年祝福,持續(xù)兩三小時。 看雙截棍教學視頻練習雙截棍。 去超多朋友...
    文建偉CZYH閱讀 351評論 1 0

友情鏈接更多精彩內容