最后更新时间:2025-03-25
瓦片热力图是一种瓦片覆盖层,它能够在地图上表达数据的密度和分布状况。下面是一张截图效果:
开发者可以通过自定义瓦片热力图的渐变颜色和其他属性,来调整自己需要的样式。下面我们将分三部分,帮助开发者熟悉瓦片热力图的配置:
为了添加一个简单的瓦片热力图,你需要提前准备好带有坐标分布的数据集。基本使用步骤如下:
准备热力节点需要的坐标分布数据,示例如下:
// 纬度 经度 权值
116.895579 24.306521 43
示例热力文件:热力图数据
遍历所有数据创建QHeatTileNode热力节点对象,保存在数组中,然后添加到mapView中,示例如下:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"heatTest_2" ofType:@"heat"];
NSString* fileContents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
// first, separate by new line
NSArray* allLinedStrings = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
self.nodes = [NSMutableArray array];
// 将所有的热力节点数据保存在数组中遍历
[dataStringArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSArray *ar = [obj componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// 纬度.
double lat = [ar[1] doubleValue];
// 经度.
double lon = [ar[0] doubleValue];
// 权值.
double val = [ar[2] doubleValue];
QHeatTileNode *node = [[QHeatTileNode alloc] init];
// 热力节点坐标
node.coordinate = CLLocationCoordinate2DMake(lat, lon);
// 热力节点权值
node.value = val;
[self.nodes addObject:node];
}];
QHeatTileOverlay *heat = [[QHeatTileOverlay alloc] initWithHeatTileNodes:self.nodes];
最后,实现<QMapViewDelegate>的mapView: viewForOverlay:方法,创建QHeatTileOverlayView,示例如下:
- (QOverlayView *)mapView:(QMapView *)mapView viewForOverlay:(id<QOverlay>)overlay
{
if ([overlay isKindOfClass:[QHeatTileOverlay class]]) {
QHeatTileOverlayView *render = [[QHeatTileOverlayView alloc] initWithTileOverlay:overlay];
return render;
}
return nil;
}
效果图如下
QHeatTileOverlay提供一些属性来满足自定义样式的热力效果,包括:衰变半径、透明度、颜色梯度。为了能够正常显示新的图层,改变样式之后需要重新reload图层。
QHeatTileOverlay为瓦片热力图的数据对象,下表为属性说明:
| 属性 | 说明 |
|---|---|
| NSInteger decayRadius | 衰变半径,单位:point。 范围越大计算耗时越长,默认20。建议100以内。 |
| CGFloat opacity | 透明度,默认为0.6,范围:0-1。 |
| QHeatTileGradient *gradient | 颜色梯度 |
QHeatTileGradient为瓦片热力图的颜色梯度对象,下表为属性说明:
| 属性 | 说明 |
|---|---|
| NSArray<UIColor *> *colors | 颜色变化数组 |
| NSArray<NSNumber *> *startPoints | 颜色变化节点,需为严格递增数组,区间为[0, 1.0] |
更改属性基本使用方法如下:
更改瓦片热力图颜色梯度
// 自定义的色值
self.heatTileOverlay.gradient = [[QHeatTileGradient alloc] initWithColor:@[[UIColor grayColor],[UIColor brownColor], [UIColor blueColor],[UIColor greenColor],[UIColor yellowColor],[UIColor redColor]] andWithStartPoints:@[@(0.1),@(0.3),@(0.5), @(0.6), @(0.8),@(0.9)]];
设置热力半径
// 设置瓦片热力图半径
[self.heatTileOverlay setDecayRadius:50];
调用QHeatTileOverlayView的reloadData方法,刷新瓦片热力图:
QHeatTileOverlayView *heatView = (QHeatTileOverlayView *)[self.mapView viewForOverlay:self.heatTileOverlay];
[heatView reloadData];
示例图如下:
有帮助
没帮助