百度地图点聚合功能php,iOS-百度地图(增加点聚合功能)

47ab31eb33bc

百度地图点聚合和自定义标注

扩展-点聚合功能

在地图改变的时候传入坐标模型数组,使用百度地图的点聚合算法

- (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];

}

//添加模型数组

- (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];

}

//更新聚合状态

- (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(), ^{

//聚合后的数组

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];

});

});

}

}

}

在JavaScript中使用百度地图API实现聚合样式更换,通常需要使用百度地图聚合层(MarkerClusterer)插件。这个插件可以将地图上的多个标记进行聚合,在缩放级别较高时,显示为单个标记,而在缩放级别较低时,则会显示出聚合后的多个聚合样式可以通过插件提供的参数或者API进行自定义。 以下是一个简单的示例代码,展示如何使用百度地图的MarkerClusterer插件更换聚合的样式: ```javascript // 创建地图实例 var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.404, 39.915), 12); // 初始化地图,设置中心坐标和地图级别 // 创建标记数组 var markers = []; for (var i = 0; i < 100; i++) { var pt = new BMap.Point(116.404 + Math.random() * 0.01, 39.915 + Math.random() * 0.01); markers.push(new BMap.Marker(pt)); } // 创建聚合对象 var markerCluster = new BMap.MarkerClusterer(map, { grid Size: 60, // 聚合半径 max Zoom: 11 // 聚合最大层级 }); // 设置聚合后显示的单个标记样式 markerCluster.setStyles([ { "markerColor": "#ff0000", // 设置聚合的颜色 "markerSize": new BMap.Size(36, 36), // 设置聚合的大小 "markerSymbol": BMap.PinSymbol.RED // 设置聚合的图标样式 }, { "markerColor": "#00ff00", "markerSize": new BMap.Size(24, 24), "markerSymbol": BMap.PinSymbol.BLUE } ]); // 将标记添加到聚合对象中 markerCluster.add(markers); // 将聚合对象添加到地图上 markerCluster.addToMap(); ``` 在上述代码中,通过`markerCluster.setStyles`方法,可以设置不同缩放级别下的聚合样式,包括颜色、大小和图标等。注意,需要在调用`addToMap`方法之前设置聚合样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值