热力图是用不同颜色的区块叠加在地图上描述人群分布、密度和变化趋势的一个产品,百度地图SDK将绘制热力图的能力为广大开发者开放,帮助开发者利用自有数据,构建属于自己的热力图,提供丰富的展示效果。
大量自有坐标数据在地图打点,打点的越多,就会根据打点的密集程度,呈现热力图。
利用自有数据,构建属于自己的热力图,提供丰富的展示效果,添加自定义热力图请参考BMKHeatMap类。关键代码示例如下:
//添加热力图-(void)addHeatMap {//创建热力图数据类BMKHeatMap* heatMap = [[BMKHeatMap alloc] init];//读取数据NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"locations" ofType:@"json"]];NSArray *array = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];NSMutableArray* datas = [NSMutableArray array];// 创建60帧数据for (int i = 0; i < 60; i++) {//创建热力图数据数组NSMutableArray* data = [NSMutableArray array];if (jsonData) {for (NSDictionary *dic in array) {//创建BMKHeatMapNodeBMKHeatMapNode* heapmapnode_test = [[BMKHeatMapNode alloc] init];BMKGradient *graident = [[BMKGradient alloc] initWithColors:@[[UIColor blueColor], [UIColor redColor], [UIColor greenColor]] startPoints:@[@0.08, @0.4, @1.0]];heatMap.mGradient = graident;CLLocationCoordinate2D coor;coor.latitude = [dic[@"lat"] doubleValue] + 0.05 * i;coor.longitude = [dic[@"lng"] doubleValue] + 0.05 * i;heapmapnode_test.pt = coor;//随机生成点强度heapmapnode_test.intensity = arc4random() % 900;//添加BMKHeatMapNode到数组[data addObject:heapmapnode_test];}}[datas addObject:data];}//将点数据赋值到热力图数据类heatMap.mDatas = datas;heatMap.mMaxHight = 100;BMKAnimation *animation = [[BMKAnimation alloc] init];animation.duration = 600;animation.type = CosineCurve;heatMap.animation = animation;BMKAnimation *frameAnimation = [[BMKAnimation alloc] init];frameAnimation.duration = 3000;frameAnimation.type = InOutSine;heatMap.frameAnimation = frameAnimation;heatMap.delegate = self;//调用mapView中的方法根据热力图数据添加热力图[self.mapView addHeatMap:heatMap];}#pragma mark - BMKHeatMapDelegate- (void)onHandleCurrentHeatMapFrameAnimationIndex:(NSInteger)index {// 当前展示帧索引值}
Json数据样式可根据需求自定义,示例中的json数据样式如下:
[{"lng": 116.895579, "lat": 24.306521},{"lng": 113.951068, "lat": 22.772504},…{"lng": 110.00006, "lat": 40.603564},{"lng": 111.846788, "lat": 21.897821}]
自定义数据热力图效果如下:
地图SDK since 6.5.7 新增米单位半径热力图及热力图展示层级限制,更加适合局部场景热力图展示。修改关键代码示例如下:
/// 设置热力图点半径单位是否是米,默认为NO,since 6.5.7heatMap.mRadiusIsMeter = YES;/// 设置热力图点半径(米),默认为12米,当mRadiusIsMeter为YES时生效,范围[10~50],since 6.5.6heatMap.mRadiusMeter = 50;/// 设置热力图最大权重值,默认为1.0,since 6.5.0/// 建议根据自身需求设置最大权值heatMap.mMaxIntensity = 120;/// 设置热力图最大显示等级,默认为22,范围[4~22],since 6.5.7heatMap.mMaxShowLevel = 22;/// 设置热力图最大显示等级,默认为4,范围[4~22],since 6.5.7heatMap.mMinShowLevel = 19;
效果如下:
上一篇
下一篇
本篇文章对您是否有帮助?