跳到主要内容基于 Leaflet Trackplayer 的 WebGIS 高速公路轨迹可视化 | 极客日志JavaScript大前端java
基于 Leaflet Trackplayer 的 WebGIS 高速公路轨迹可视化
综述由AI生成介绍使用 Leaflet-Trackplayer 插件实现 WebGIS 高速公路轨迹可视化的方法。通过天地图 API 获取长永高速起止点坐标、途径 POI/AOI 及路线规划数据。在 Leaflet 地图上配置轨迹路径与车辆图标,实现行驶轨迹动态回放及车牌信息跟随功能。该方案展示了交通数据在 WebGIS 中的应用,为类似场景提供参考。
PentesterX25 浏览 前言
在交通基础设施建设与数字化技术发展的背景下,WebGIS 技术与 Leaflet-Trackplayer 的结合为展示高速公路运行轨迹提供了创新方案。WebGIS(Web 地理信息系统)基于互联网实现地理空间数据的存储、管理、分析和展示,具有强大的地图显示和空间查询功能。
一、相关背景
将高速轨迹数据通过 Leaflet-Trackplayer 嵌入到 WebGIS 系统中,可实现实时监控车辆运行轨迹,分析交通流量、车速分布等信息,为交通疏导和道路维护提供依据。
1、湖南首条免费高速 - 长永高速
长永高速公路于 1994 年 12 月 28 日建成通车,全长 27 公里,连接黄花机场和长沙市区。这是湖南的第一条高速公路。收费期将于 2025 年 11 月 1 日到期,到期后实行'零费率'方式终止收费。
2、还有哪些快到 30 年的高速
除长永高速外,以下高速运营期也即将达到 30 年:
| 序号 | 高速名称 | 起止地点 | 通车年限 |
|---|
| 1 | 长潭高速 | 长沙市长沙县和湘潭市岳塘区 | 29 年 |
| 2 | 长沙 - 益阳高速公路 | 长沙与益阳 | 27 年 |
| 3 | 益常高速 | 阳市资阳区与常德市武陵区 | 26 年 |
| 4 | 潭耒高速 | 湘潭市岳塘区和衡阳市耒阳市 | 25 年 |
3、leaflet-trackplayer 相关知识
Leaflet-Trackplayer 是一个基于 Leaflet 的轨迹回放插件,核心功能包括:
- 轨迹播放与暂停:支持轨迹的播放、暂停和继续。
- 动态速度调整:用户可实时调整轨迹播放速度。
- 进度条控制:支持拖动进度条跳转位置。
- 地图跟随移动:地图视图自动跟随轨迹移动。
- 轨迹方向旋转:标记根据轨迹方向自动旋转。
- 自定义设置:支持自定义标记图标、轨迹颜色等。
应用场景包括物流跟踪系统、运动轨迹记录及导航系统。
二、基础数据准备
为实现长永高速的通行道路展示,需要整理高速起始点、途径重要 AOI 和 POI 点和区间道路路线等空间信息。
1、高速起止点地理编码
使用天地图的地理编码接口获取坐标,无需转换即可叠加到天地图底图。示例代码如下:
@Test public void benzeneToLocation() {
String target = "长沙市马栏山财富广场";
String keyWord = "%7B'keyWord':'" + target + ;
HttpResponse<String> resp = tdtOptService.getGeocoder(keyWord, TDT_SERVER_KEY);
System.out.println(resp.getBodyResult());
}
"'%7D"
{"msg":"ok","location":{"score":71,"level":"区县及以上级行政区划","lon":"113.03667","lat":"28.23593","keyWord":"长沙市马栏山财富广场"},"searchVersion":"7.4.3V","status":"0"}
{"msg":"ok","location":{"score":100,"level":"兴趣点","lon":"113.285187","lat":"28.209144","keyWord":"长沙永安收费站"},"searchVersion":"7.4.3V","status":"0"}
2、途径重要 AOI 和 POI 信息
使用百度地图获取 AOI 数据,共 7 个兴趣面:
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":""}
];
var dataJson = [
{"lat":28.23457,"lon":113.035247,"p_name":"马栏山"},
{"lat":28.237538,"lon":113.043587,"p_name":"湖南广播电视局"},
{"lat":28.233681,"lon":113.048907,"p_name":"湖南省高速公路局"},
{"lat":28.234513,"lon":113.059526,"p_name":"长永佳苑"},
{"lat":28.233927,"lon":113.073449,"p_name":"长沙华夏医院"},
{"lat":28.234986,"lon":113.087125,"p_name":"东二路"},
{"lat":28.238332,"lon":113.096006,"p_name":"东家屋场"},
{"lat":28.237954,"lon":113.10586,"p_name":"东六路"},
{"lat":28.238218,"lon":113.126946,"p_name":"老屋冲"},
{"lat":28.239806,"lon":113.139774,"p_name":"闻家冲"},
{"lat":28.237878,"lon":113.149621,"p_name":"长沙绕城高速"},
{"lat":28.240846,"lon":113.156057,"p_name":"雷鸣城市绿地"},
{"lat":28.237973,"lon":113.183152,"p_name":"黄花镇人民政府"},
{"lat":28.223,"lon":113.208016,"p_name":"长沙工程职业技术学院"},
{"lat":28.211239,"lon":113.253263,"p_name":"瓢塘水库"},
{"lat":28.211353,"lon":113.275357,"p_name":"樟树坡"},
{"lat":28.210105,"lon":113.286124,"p_name":"金阳雅苑"}
];
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);
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());
} catch (JAXBException e) {
e.printStackTrace();
}
}
三、leaflet-trackplayer 实战
1、行驶道路生成和设置
var routelatlonArray = new Array();
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);
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
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);
}
3、车辆车牌信息模拟跟随
定义车牌信息 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}`)
});
4、成果展示
四、总结
本文详细介绍了利用 Leaflet-Trackplayer 实现 WebGIS 高速公路轨迹可视化的技术方案。围绕长永高速轨迹可视化,完成了基础数据准备处理,并基于 Leaflet-Trackplayer 进行了代码功能研发,成功实现了免费高速的道路可视化。
相关免费在线工具
- 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