Implementing Trajectory Playback in Leaflet with Leaflet.TrackPlayer and Vue 3
This tutorial demonstrates how to set up a Vue 3 project, install the Leaflet.TrackPlayer plugin, define a simulated path, create a custom moving marker, and control playback on a Leaflet map, while also covering optional configurations such as disabling marker rotation.
The article explains how to use the Leaflet.TrackPlayer plugin to implement a simple and efficient trajectory playback feature on a Leaflet map, providing a basic demonstration and links to the plugin documentation.
1. Set up a basic Leaflet development environment – the example uses Vue 3. Create an index.vue file with the following content:
<template>
<div id="map"></div>
</template>
<script setup>
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import { onMounted } from "vue";
onMounted(() => {
let map = L.map("map", {
zoom: 14,
center: [34.27519341726532, 108.911884710754]
});
L.tileLayer("http://{s}.tile.osm.org/{z}/{x}/{y}.png").addTo(map);
});
</script>
<style scoped>
#map {
height: 800px;
width: 800px;
}
</style>2. Install and import Leaflet.TrackPlayer
npm install leaflet-trackplayer import "leaflet-trackplayer";3. Add the player object to the map
After the map object is created, define a simulated trajectory array and a moving marker icon, then create a TrackPlayer instance:
// Simulated trajectory data
let path = [
{ lat: 34.25615548523744, lng: 108.91164044842363 },
{ lat: 34.256155386830855, lng: 108.91179023713374 },
{ lat: 34.256155386830855, lng: 108.91179023713374 },
{ lat: 34.25607942383744, lng: 108.91177925878043 },
// ... (many more points omitted for brevity)
{ lat: 34.29496736180883, lng: 108.91578701078069 }
];
// Define the moving marker icon
let markerIcon = L.icon({
iconSize: [27, 54],
iconUrl: new URL("./assets/car.png", import.meta.url).href,
iconAnchor: [13.5, 27]
});
// Create the player and add it to the map
let track = new L.TrackPlayer(path, { markerIcon }).addTo(map);The result shows the trajectory player successfully added to the map.
4. Start playback
// Set an appropriate zoom level
map.setZoom(17, { animate: false });
// Start the playback
track.start();Calling the start() method begins the animation of the marker along the defined path.
5. Other scenarios
If you need a walking trajectory where the marker should not rotate with the direction of movement, modify the marker definition and disable rotation:
// Define a simple marker without rotation
let markerIcon = L.icon({
iconUrl: "https://unpkg.com/[email protected]/dist/images/marker-icon.png",
iconAnchor: [12.5, 41]
});
// Create the player with rotation disabled
let track = new L.TrackPlayer(path, { markerIcon, markerRotation: false }).addTo(map);This configuration keeps the marker upright while it follows the path.
6. Full code example
<template>
<div id="map"></div>
</template>
<script setup>
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import "leaflet-trackplayer";
import { onMounted } from "vue";
onMounted(() => {
let map = L.map("map", {
zoom: 14,
center: [34.27519341726532, 108.911884710754]
});
L.tileLayer("http://{s}.tile.osm.org/{z}/{x}/{y}.png").addTo(map);
// Simulated trajectory data (same as above)
let path = [
{ lat: 34.25615548523744, lng: 108.91164044842363 },
{ lat: 34.256155386830855, lng: 108.91179023713374 },
// ... (remaining points)
{ lat: 34.29496736180883, lng: 108.91578701078069 }
];
// Define the moving marker icon
let markerIcon = L.icon({
iconSize: [27, 54],
iconUrl: new URL("./assets/car.png", import.meta.url).href,
iconAnchor: [13.5, 27]
});
// Create the player and add to map
let track = new L.TrackPlayer(path, { markerIcon }).addTo(map);
// Adjust zoom and start playback
map.setZoom(17, { animate: false });
track.start();
});
</script>
<style scoped>
#map {
height: 800px;
width: 800px;
}
</style>Summary
The article demonstrates a basic trajectory playback implementation using the Leaflet.TrackPlayer plugin, and mentions that the plugin also supports custom line styles, speed adjustments, and event listeners; refer to the plugin documentation for advanced usage.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Rare Earth Juejin Tech Community
Juejin, a tech community that helps developers grow.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
