最后更新时间:2025-03-25
腾讯地图SDK自4.4.7版本起支持散点图功能,该功能可以根据大量的点坐标在地图上展示散点效果,示例图如下:
为了添加一个简单的散点图,你需要提前准备好带有散点坐标的数据集。基本使用步骤如下:
准备轨迹点坐标和时间戳,示例如下:
// 散点坐标1
116.4151898097858 39.91718071931067
// 散点坐标2
116.4221401125229 39.90512390527111
// 散点坐标3,以此类推...
遍历所有数据并创建散点数据对象,保存在数组中:
self.node2 = [NSMutableArray array];
[allLinedStrings enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSArray *ar = [obj componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if (ar.count == 3)
{
// 纬度
double lat = [ar[1] doubleValue];
// 经度
double lon = [ar[0] doubleValue];
// 散点对象
QScatterNode *node = [[QScatterNode alloc] init];
node.coordinate = CLLocationCoordinate2DMake(lat, lon);
// 节点的类型,用于贴图散点的图片和点散点的颜色的映射关系
node.type = arc4random()%3;
[self.node2 addObject:node];
}
}];
通过散点数据对象创建散点图层对象,并配置散点图层的样式,添加到地图上:
QDotScatterOverlay *dotOverlay = [[QDotScatterOverlay alloc] init];
// 设置散点图节点数据
dotOverlay.nodes = self.nodes;
// 开启3D效果
dotOverlay.enable3D = YES;
// 单个散点的半径
dotOverlay.radius = 9;
// 将散点overlay添加到地图上
[self.mapView addOverlay:dotOverlay];
实现mapView的代理方法,将散点图层展示到地图上:
- (QOverlayView *)mapView:(QMapView *)mapView viewForOverlay:(id<QOverlay>)overlay
{
if ([overlay isKindOfClass:[QDotScatterOverlay class]])
{
QDotScatterOverlayView *view = [[QDotScatterOverlayView alloc] initWithOverlay:overlay];
return view;
}
return nil;
}
效果如下图所示:
QDotScatterOverlay散点图层对象常用属性如下表所示:
| 属性 | 说明 |
|---|---|
| NSArray <id |
散点图数据:原始的节点数据.。 数组每个元素符合 QScatterNodeProtocol 协议。 |
| NSArray <UIColor *> *colors | 散点颜色数据; 散点颜色与 QScatterNodeProtocol 中的type成映射关系。 |
| double radius | 散点半径,单位:point 默认 2。 |
| BOOL enable3D | 是否开启3D效果,默认为NO。 |
| BOOL animated | 是否开启动画辐射效果,默认NO。 |
QDotScatterOverlay中的 NSArray <UIColor *> *colors 属性用于设置散点图每个节点颜色,数组中的元素个数,要与QScatterNodeProtocol中的type形成映射关系,示例如下:
// 创建节点对象时,type取值范围为0-1
QScatterNode *node = [[QScatterNode alloc] init];
node.type = arc4random() % 2;
// 配置颜色时,要与type指定的数值一一对应,否则会使用默认透明色来渲染散点
dotOverlay.colors = @[color1,color2];
效果如下图所示:
散点图展示层级默认在楼块之上POI之下(QOverlayLevelAboveBuildings)。如果需要调整展示层级,可以通过如下方法:
QIconScatterOverlayView *hv = (QIconScatterOverlayView *) [self.mapView viewForOverlay:self.dotOverlay];
hv.displayLevel = QOverlayLevelAboveLabels;
散点图默认开启3D效果,当3D开启时,散点图在地图倾角任何角度下都展示为圆形。如果关闭了3D效果,散点图会表现为贴地效果:
散点图带有点扩散动画效果,该功能默认关闭,可通过QDotScatterOverlay的
animated 属性开启,效果图如下:
调用mapView的removeOverlay:即可将轨迹图移除:
[self.mapView removeOverlay:self.dotOverlay];
散点图颜色默认色对应type0-2分别为黄色、红色、紫色,如果指定了type而没有指定颜色的话,将会使用默认颜色:
// 指定type范围为0-2
QScatterNode *node = [[QScatterNode alloc] init];
node.type = arc4random() % 3;
// 颜色数组传入空数组
dotOverlay.colors = [NSArray array];
如果type的值超出了colors元素的索引最大值,则会以透明色渲染散点。下图中出现部分颜色缺失的散点,实际是被透明色的散点遮盖住导致:
// 指定type范围0-9
QScatterNode *node = [[QScatterNode alloc] init];
node.type = arc4random() % 10;
// 颜色数组长度为3
dotOverlay.colors = [NSArray array];
有帮助
没帮助