最后更新时间:2025-03-25
腾讯地图SDK自4.4.7版本起支持轨迹图功能,该功能可以根据起点坐标和终点坐标在地图上展示轨迹效果,示例图如下:
为了添加一个简单的轨迹,你需要提前准备好带有轨迹点坐标及时间戳的数据集。基本使用步骤如下:
准备轨迹点坐标和时间戳,示例如下:
// 起点坐标,终点坐标,时间戳
39.792151 116.397607 14
遍历所有数据并创建轨迹点数据对象,保存在数组中:
NSMutableArray <QTrailNode *> *nodes = [NSMutableArray array];
[ar enumerateObjectsUsingBlock:^(id _Nonnull obj2, NSUInteger idx, BOOL * _Nonnull stop) {
NSArray *finalArray = [obj2 componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if ((int)finalArray.count >= 3)
{
// 纬度.
double lat = [finalArray[0] doubleValue];
// 经度.
double lon = [finalArray[1] doubleValue];
// 时间戳.
double val = [finalArray[2] doubleValue];
// 判断经纬度是否正确
if ( (lat >= -90) && (lat <= 90) && (lon >= -180) && (lon <= 180) ) {
QTrailNode *node = [[QTrailNode alloc] init];
node.coordinate = CLLocationCoordinate2DMake(lat, lon);
node.timeStamp = val;
// 判断时间戳是否为升序,轨迹线的数据点要按照升序排序
if (val > temp)
{
temp = val;
}
[nodes addObject:node];
}
}
}];
通过轨迹点数据对象创建轨迹线图层对象,并配置轨迹线图层的样式,添加到地图上:
// 单条线的数据
QTrailLine *singleLine = [[QTrailLine alloc] init];
// 设置轨迹线的数据点,数据点中的时间戳要保证升序排序
singleLine.nodes = nodes;
// 将轨迹线添加到数组中
[self.lines addObject:singleLine];
// 使用轨迹线数组创建轨迹Overlay
QTrailOverlay *trail = [[QTrailOverlay alloc] initWithTrailData:self.line];
// 设置轨迹Overlay的样式
QTrailLineStyle *style = [[QTrailLineStyle alloc] init];
style.width = 5;
// 将轨迹Overlay添加到地图中
[self.mapView addOverlay:trail];
实现mapView的代理方法,将轨迹图层展示到地图上:
- (QOverlayView *)mapView:(QMapView *)mapView viewForOverlay:(id<QOverlay>)overlay
{
if ([overlay isKindOfClass:[QTrailOverlay class]])
{
QTrailOverlayView *tv = [[QTrailOverlayView alloc] initWithTrailOverlay:overlay];
return tv;
}
return nil;
}
QTrailOverlay轨迹图层对象常用属性如下表所示:
| 属性 | 说明 |
|---|---|
| NSArray <QTrailLine *> *lines | 轨迹线数据 |
| QTrailLineStyle *style | 轨迹线样式 |
QTrailLineStyle对象用于配置轨迹线的样式,常用属性如下表所示:
| 属性 | 说明 |
|---|---|
| NSArray <UIColor *> *colors | 轨迹线的颜色数组,数组长度需大于0,且最大长度为3。 用法说明: 实现单色线,则colors数组为A。实现A-B的渐变线,则colors数组传入A, B。 |
| int highlightDuration | 轨迹高亮时间,单位:毫秒。取值大于等于0,等于0时无动画,默认200ms。 |
| CGFloat animateRatio | 动画速率,取值大于0,默认1。 |
| CGFloat width | 轨迹线线宽,单位:point,默认值2。 |
QHeatGradient对象为矢量热力图的颜色梯度对象,配置矢量热力图颜色方式如下:
NSArray<UIColor *> *colorDB = @[
[UIColor purpleColor],
[UIColor cyanColor],
[UIColor greenColor]
];
self.trail.style.colors = colorDB;
// 设置颜色后,要调用该方法刷新轨迹图
[self.trail setNeedsDisplay];
轨迹图展示层级默认在楼块之上POI之下(QOverlayLevelAboveBuildings)。如果需要调整展示层级,可以通过如下方法:
QTrailOverlayView *hv = (QTrailOverlayView *) [self.mapView viewForOverlay:self.trail];
hv.displayLevel = QOverlayLevelAboveLabels;
轨迹图支持配置动画速率、高亮时间两个动画效果,使用方法如下:
// 动画速率
self.trail.style.animateRatio = 10;
// 高亮时间
self.trail.style.highlightDuration = arc4random() % 2000 + 1000;
// 刷新样式需调用此接口,否则新样式不生效
[self.trail setNeedsDisplay];
调用mapView的removeOverlay:即可将轨迹图移除:
[self.mapView removeOverlay:self.trail];
有帮助
没帮助