热力图是用不同颜色的区块叠加在地图上描述人群分布、密度和变化趋势的一个产品,百度地图sdk将绘制热力图的能力为广大开发者开放,帮助开发者利用自有数据,构建属于自己的热力图,提供丰富的展示效果。
大量自有坐标数据在地图打点,打点的越多,就会根据打点的密集程度,呈现热力图。
利用自有数据,构建属于自己的热力图,提供丰富的展示效果,添加自定义热力图请参考bmkheatmap类。关键代码示例如下:
//添加热力图-(void)addheatmap {//创建热力图数据类bmkheatmap* heatmap =[[bmkheatmap alloc] init];//读取数据nsdata*jsondata =[nsdata datawithcontentsoffile:[[nsbundle mainbundle] pathforresource:@"locations"oftype:@"json"]];nsarray*array =[nsjsonserializationjsonobjectwithdata:jsondata options:0error: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;
效果如下:
上一篇
下一篇
本篇文章对您是否有帮助?