跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端java

基于 Leaflet Trackplayer 的 WebGIS 高速轨迹可视化实战

利用 Leaflet-Trackplayer 插件结合 WebGIS 技术,实现湖南首条免费高速(长永高速)的轨迹可视化。通过天地图和百度地图接口获取起止点坐标、AOI 及 POI 数据,调用驾车规划服务生成路径。实战演示了道路渲染、兴趣点标注以及车牌信息跟随车辆移动的效果,为交通数据展示提供了参考方案。

雪落无声发布于 2026/3/21更新于 2026/10/2384 浏览
基于 Leaflet Trackplayer 的 WebGIS 高速轨迹可视化实战

基于 Leaflet Trackplayer 的 WebGIS 高速轨迹可视化实战

在交通基础设施数字化进程中,如何直观展示高速公路的运行轨迹是一个常见需求。将 WebGIS 技术与 Leaflet-Trackplayer 结合,能高效实现轨迹回放与监控。本文以湖南首条免费高速——长永高速为例,演示如何利用天地图和百度地图接口获取数据,并通过 Leaflet 插件完成轨迹的动态呈现。

背景与工具

长永高速概况

1994 年 12 月 28 日通车的长永高速(长沙—永安),全长 27 公里,连接黄花机场与长沙市区。作为湖南第一条高速公路,其收费期将于 2025 年 11 月到期并转为'零费率'。

除长永高速外,省内还有多条高速运营年限接近或超过 30 年,例如长潭高速(29 年)、长沙 - 益阳高速(27 年)等。这些路段的数字化管理对交通规划具有重要意义。

序号高速名称起止地点通车年限
1长潭高速长沙市长沙县和湘潭市岳塘区29 年
2长沙 - 益阳高速公路长沙与益阳27 年
3益常高速阳市资阳区与常德市武陵区26 年
4潭耒高速湘潭市岳塘区和衡阳市耒阳市25 年

Leaflet-Trackplayer 简介

Leaflet-Trackplayer 是基于 Leaflet 的轨迹回放插件,支持播放、暂停、速度调整及进度条控制。它能自动跟随地图视图,并根据轨迹方向旋转标记图标,非常适合物流跟踪、运动记录等场景。

基础数据准备

要实现轨迹展示,核心在于获取准确的地理空间信息。我们主要涉及起止点坐标、途径兴趣点(AOI/POI)以及道路路径规划。

1. 起止点地理编码

模拟从长沙收费站到永安收费站的轨迹,使用天地图地理编码接口获取坐标。天地图的优势在于坐标系兼容性好,可直接叠加到底图。

@Test public void benzeneToLocation() { 
    String target = "长沙市马栏山财富广场"; 
    String keyWord = "%7B'keyWord':'" + target + "'%7D" ; 
    HttpResponse<String> resp = tdtOptService.getGeocoder(keyWord, TDT_SERVER_KEY); 
    System.out.println(resp.getBodyResult()); 
}

返回结果中包含经纬度:

{"msg":"ok",  
"location"
:
{
"lon"
:
"113.03667"
,
"lat"
:
"28.23593"
}
,
"status"
:
"0"
}

2. 途径重要 AOI 和 POI

为了丰富地图信息,我们引入了 7 个关键 AOI(如月湖公园、星沙服务区等)以及沿途的 POI 点位。这些数据可以直接从百度地图获取。

var jdsq = [ 
    {"name":"月湖公园", children:[{lat:28.237564, lon:113.033027}]}, 
    {"name":"长沙世界之窗", children:[{lat:28.23595, lon:113.046658}]}, 
    // ... 其他 AOI 数据
]; 

// 辅助 POI 信息
var dataJson = [
    {lat:28.23457, lon:113.035247, p_name:"马栏山"}, 
    {lat:28.237538, lon:113.043587, p_name:"湖南广播电视局"}, 
    // ... 其他 POI 数据
];

3. 高速区间道路信息

调用天地图驾车规划服务获取路径坐标。这里选择最短路线模式。

@Test public void xml2JavaBean() { 
    String origInfo = "113.03667,28.23593"; 
    String destInfo = "113.285187,28.209144"; 
    String postStr = "%7B'orig':'" + origInfo + "','dest':'" + destInfo + "','style':'1'%7D" ; 
    HttpResponse<String> resp = tdtOptService.drivePlan(postStr,"search",TDT_SERVER_KEY); 
    // 解析响应获取路径坐标...
}

实战开发

1. 行驶道路生成与设置

获取到的路径字符串需要转换为 Leaflet 可识别的坐标数组。注意处理分隔符和经纬度顺序。

var routelatlonArray = new Array(); 
var routelatlonTarget = routelatlon.split(";"); 
for(var i=0; i < routelatlonTarget.length; i++){ 
    var _tempVal = routelatlonTarget[i].split(","); 
    routelatlonArray.push({lat:_tempVal[1], lng:_tempVal[0]}); 
} 
const path = routelatlonArray; 
map.fitBounds(path);

绑定 TrackPlayer 组件时,可以自定义车辆图标和初始速度。演示中为了快速预览效果,车速设置为 800km/h,实际生产环境需根据真实路况调整。

let track = new L.TrackPlayer(path, { 
    markerIcon: L.icon({ 
        iconSize: [27, 54], 
        iconUrl: "./lib/assets/bus_online.png", 
        iconAnchor: [13.5, 27], 
    }), 
    speed: 800, 
}); 
track.addTo(map);

2. 标注 AOI 和 POI

遍历数据源,为每个兴趣点添加 Marker。对于 AOI,还可以绘制多边形区域。

for(var i=0; i<jdsq.length; i++){ 
    for(var j = 0; j<jdsq[i].children.length; j++){ 
        var tempInfo = jdsq[i].children; 
        var marker = L.marker([tempInfo[j].lat, tempInfo[j].lon], { 
            icon: L.divIcon({ 
                popupAnchor:[5,5], 
                html: buildHtml(jdsq[i].name) 
            }) 
        }).addTo(collisionLayer); 
    } 
    L.polygon([convertStr2DataArrayTrans(jdsq[i].aoi)], style).addTo(map); 
}

3. 车牌信息模拟跟随

为了让演示更生动,我们在车辆上叠加了一个显示车牌信息的 Marker,并监听 TrackPlayer 的进度事件来同步位置。

首先定义静态 Marker:

var carNo = "湘 A32MH6/张三"; 
var sourceMarker = L.marker([28.235638, 113.036629], { 
    icon: L.divIcon({ 
        html: "<div animation-spaceInDown><div>"+carNo +"</div></div>" 
    }) 
}).addTo(map);

监听 progress 事件更新坐标:

track.on("progress", (progress, { lng, lat }, index) => { 
    console.log(`progress:${progress} - position:${lng},${lat}`); 
    sourceMarker.setLatLng([lat, lng]); 
    control.progress = progress * 100; 
});

4. 成果展示

最终效果展示了车辆从马栏山出发,途经星沙服务区、长沙黄花机场,最终到达永安收费站的完整过程。地图会自动跟随车辆移动,且车牌信息始终悬浮于车辆上方。

文章配图 文章配图 文章配图

总结

通过本案例,我们完成了利用 Leaflet-Trackplayer 进行 WebGIS 轨迹可视化的全流程。从后端数据接口调用到前端轨迹渲染与交互,这套方案不仅适用于高速公路监控,也可扩展至物流配送、户外运动等多种场景。在实际应用中,建议根据网络状况优化数据加载策略,并合理设置回放速度以提升用户体验。

目录

  1. 基于 Leaflet Trackplayer 的 WebGIS 高速轨迹可视化实战
  2. 背景与工具
  3. 长永高速概况
  4. Leaflet-Trackplayer 简介
  5. 基础数据准备
  6. 1. 起止点地理编码
  7. 2. 途径重要 AOI 和 POI
  8. 3. 高速区间道路信息
  9. 实战开发
  10. 1. 行驶道路生成与设置
  11. 2. 标注 AOI 和 POI
  12. 3. 车牌信息模拟跟随
  13. 4. 成果展示
  14. 总结

更多推荐文章

查看全部
  • 万维网(WWW)发展历史与核心技术解析
  • 数据结构与算法:单链表综合练习(删除节点、反转、找中间节点)
  • AI 产品经理的 10 大核心技能
  • C/C++ 输入输出实战:OJ 场景与性能优化
  • OpenClaw 龙虾机器人本地部署与配置指南
  • Python 属性描述符:从原理到 ORM 实践详解
  • 大型语言模型 (LLM) 入门与实践指南
  • Stable Diffusion 三种安装部署方案详解
  • AI 安全实战:基于 PGD 的 Stable Diffusion 视觉提示词注入攻击分析
  • Java 服务端核心技术面试核心知识点清单
  • VS Code 远程连接服务器后 GitHub Copilot 无法使用问题排查
  • VSCode 精准控制 Copilot 补全:按语言与场景灵活配置
  • VSCode Copilot 无法登录原因分析及快速恢复指南
  • 基于 LangChain 与 Ollama 构建本地 LLM 应用实战
  • 任意版本 GitLens VSCode 插件代码修改方法
  • ESP32 小智 AI 机器人语音对话系统设计与云端部署
  • Java 反射机制详解:从原理到实践
  • Qwen3-VL与ComfyUI联动实现AI绘画工作流自动标注
  • Python 副业渠道推荐与接单注意事项
  • AI 辅助开发:使用 DeepSeek 构建贪吃蛇游戏

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online