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

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

基于 Leaflet-Trackplayer 插件实现高速轨迹 WebGIS 可视化,涵盖长永高速背景介绍、天地图数据获取、路径规划及前端轨迹回放开发。通过坐标转换、AOI/POI 标注及车牌模拟跟随功能,完成动态轨迹展示,为交通数据数字化提供参考方案。

链路追踪发布于 2026/3/24更新于 2026/10/2085 浏览
基于 Leaflet-Trackplayer 实现高速轨迹 WebGIS 可视化实战

前言

在交通数字化背景下,展示高速公路运行轨迹对规划和管理至关重要。本文将演示如何利用 WebGIS 技术与 Leaflet-Trackplayer 插件,将湖南首条免费高速(长永高速)的轨迹数据直观地呈现在网页上。这不仅涉及地图渲染,更是对空间数据价值的一次实践探索。

背景信息

长永高速概况

长永高速于 1994 年通车,连接黄花机场与长沙市区,全长 27 公里。它是湖南第一条高速公路。值得注意的是,'永'指浏阳永安镇,而非永州。该高速收费期将于 2025 年 11 月到期,之后实行'零费率'。

其他临近到期高速

省内还有多条运营近 30 年的高速即将到期,例如长潭高速、长沙 - 益阳高速等。具体列表如下:

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

技术选型

Leaflet-Trackplayer 是基于 Leaflet 的轨迹回放插件,支持播放控制、速度调整、地图跟随及方向旋转等功能,非常适合此类场景。

数据准备

地理编码

为了获取准确的起止点坐标,我们使用天地图的地理编码接口。选择天地图的优势在于其坐标系可直接叠加到天地图底图,无需二次转换。

@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()); 
}

返回结果包含经纬度信息,例如长沙马栏山财富广场和长沙永安收费站的具体坐标。

AOI 与 POI 数据

为了丰富地图展示,我们引入了途径的重要兴趣面(AOI)和兴趣点(POI)。

var jdsq = [ 
    {"name":"月湖公园",children:[{lat:28.237564,lon:113.033027}],"aoi":""}, 
    {"name":"长沙世界之窗",children:[{lat:28.23595,lon:113.046658}],"aoi":""}, 
    {"name":"金科公园",children:[{lat:28.231451,lon:113.064211}],"aoi":""}, 
    {"name":"香槟小镇",children:[{lat:28.235061,lon:113.078557}],"aoi":""}, 
    {"name":"星沙服务区",children:[{lat:28.240166,lon:113.117113}],"aoi":""}, 
    {"name":"鸽子湖公园",children:[{lat:28.243757,lon:113.162166}],"aoi":""}, 
    {"name":"长沙黄花国际机场",children:[{lat:28.211995,lon:113.223308}],"aoi":""}, 
]; 

这些数据可以直接从百度地图等来源获取,用于增强视觉参考。

路径规划

利用天地图驾车规划服务获取路线坐标。核心逻辑是解析返回的 XML 或 JSON 数据,提取路径点。

@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); 
    try { 
        JAXBContext context = JAXBContext.newInstance(TdtResult.class); 
        Unmarshaller unmarshaller = context.createUnmarshaller(); 
        TdtResult result = (TdtResult) unmarshaller.unmarshal(new StringReader(resp.getBodyResult())); 
        System.out.println("距离:" + result.getDistance()); 
        System.out.println("时长:" + result.getDuration()); 
        Gson gson = new Gson(); 
        System.out.println(gson.toJson(result)); 
    } catch (JAXBException e) { 
        e.printStackTrace(); 
    } 
}

提取出的坐标点构成了轨迹的基础骨架。

实战开发

轨迹初始化

在 Leaflet 中引入 Trackplayer 组件。我们需要将之前获取的路径坐标转换为 Leaflet 所需的格式。

var routelatlonArray = []; 
var routelatlonTarget = routelatlon.split(";"); 
for(var i=0;i < routelatlonTarget.length;i++){ 
    var routelatlonVal = routelatlonTarget[i]; 
    if("" != routelatlonVal){ 
        var _tempVal = routelatlonVal.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);

标注与交互

除了主轨迹,还需标注沿途的 AOI 和 POI。

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({ 
                iconSize: null, 
                className: '', 
                popupAnchor:[5,5], 
                shadowAnchor:[5,5], 
                html: buildHtml(jdsq[i].name) 
            }) 
        }).addTo(collisionLayer); 
    } 
    L.polygon([ convertStr2DataArrayTrans(jdsq[i].aoi) ],style).addTo(map); 
}

车牌信息的模拟跟随是一个亮点。我们定义一个独立的 Marker 显示车牌号,并通过监听 TrackPlayer 的进度事件实时更新其位置。

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

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

这样,车牌标签会始终跟随车辆模型移动,增强了交互的真实感。

效果展示

最终效果展示了车辆从马栏山出发,经过星沙服务区、黄花机场,最终到达永安收费站的完整过程。地图视图会自动跟随轨迹移动,确保关键节点始终在视野内。

文章配图

车辆从马栏山出发

文章配图

车辆经过星沙服务区

文章配图

途径长沙黄花机场

文章配图

到达永安收费站

总结

通过上述步骤,我们完成了长永高速轨迹的 WebGIS 可视化。结合基础数据清洗、路径规划以及 Leaflet-Trackplayer 的灵活配置,实现了动态轨迹回放功能。这种方案为交通数据的数字化展示提供了可行的参考路径。

目录

  1. 前言
  2. 背景信息
  3. 长永高速概况
  4. 其他临近到期高速
  5. 技术选型
  6. 数据准备
  7. 地理编码
  8. AOI 与 POI 数据
  9. 路径规划
  10. 实战开发
  11. 轨迹初始化
  12. 标注与交互
  13. 效果展示
  14. 总结

更多推荐文章

查看全部
  • JD-GUI 实战指南:Java 字节码反编译工具使用详解
  • Web 安全 SRC 漏洞挖掘与提交实战流程
  • FPGA Mezzanine Card (FMC) 接口标准与引脚定义
  • 6 款 AI 写作工具实测:网文创作哪款更顺手?
  • DB2 V9 数据库管理:数据放置与模式详解
  • 基于 STM32 的智能家居安防系统设计与实现
  • Node.js + uni-app 运动健康 App 计算机毕业设计
  • XRoboToolkit:基于 PICO 4 Ultra 的机器人遥操作方案(一)
  • IntelliJ IDEA 创建 Spring Boot Web 项目教程
  • OpenClaw 跨平台安装指南:Windows、macOS 及 Linux 环境配置
  • Python 项目标准目录结构详解
  • 去除 AI 写作痕迹的提示词技巧与优化流程
  • 大语言模型主流架构与训练技术详解
  • 基于FPGA调制信号模型的MATLAB/Simulink仿真设计
  • Hydro 系统本地部署指南与 CSP/GESP 题库导入
  • 近期大模型研究速览:从GUI智能体到多模态预测
  • Redis 与 Memcached 核心区别及性能分析
  • 亚马逊户外帐篷卖家真实吐槽:以前一张主图要等7天、烧3000块,现在用 Megick 5分钟出4K大片,月销量直接翻了2.8倍
  • Stable Diffusion 核心生成参数详解
  • Android 开发中创建 AVD 时指定 SD 卡镜像的方法

相关免费在线工具

  • 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

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online