An interactive geospatial timeline analyzer built with Vue 3. Upload CSV files with BLE beacon tracking data and visualize movement trajectories on a map with statistics, filtering, and activity heatmaps.
- CSV Import with flexible column matching and batch processing (handles 250k+ records)
- Interactive Map using Leaflet/OpenStreetMap with color-coded markers and polylines
- Timeline Filtering by custom date/time ranges
- Statistics Dashboard per tracked device: record count, distance traveled, duration, RSSI analysis
- Activity Heatmap GitHub-style calendar view (daily, monthly, yearly)
- Performance Controls configurable sampling intervals and point limits
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewUpload a CSV file with the following columns (flexible matching, case-insensitive):
| Column | Aliases | Description |
|---|---|---|
ident |
id |
Device/beacon identifier |
timestamp |
time, datetime |
Record timestamp |
position_latitude |
lat |
Latitude coordinate |
position_longitude |
lon, lng |
Longitude coordinate |
ble_beacon_rssi |
rssi, signal |
Signal strength (dBm), optional |
ble_receiver_ident |
receiver, beacon |
Receiver identifier, optional |
ident,timestamp,position_latitude,position_longitude,ble_beacon_rssi,ble_receiver_ident
DC0D30213485,2025-03-31 07:41:56,49.4875,8.4660,-72,1001
DC0D30213485,2025-03-31 07:42:30,49.4876,8.4662,-68,1001- Color-coded markers for each tracked device
- Polylines showing movement trajectories
- Popups with timestamp, coordinates, signal strength, and receiver info
- Auto-fit bounds to selected devices
- Per-device summary: record count, time span, max distance (km), duration (hours)
- RSSI statistics: min, max, average signal strength
- Associated receiver identifiers
- GitHub-style calendar grid with 5 intensity levels
- Toggle between daily, monthly, and yearly views
- Summary: total messages, unique devices, active periods
Large datasets are handled through:
- Batch processing (10,000 lines per batch) to keep UI responsive
- Configurable sampling (time-based or step-based point reduction)
- Max points per device (default: 1,000, adjustable 10 - 10,000)
- Sampling interval (default: 30s, adjustable 1 - 3,600s)
- Vue 3 (Composition API,
<script setup>) - TypeScript
- Vite (build tool)
- PrimeVue 4 (UI components, Aura theme)
- Leaflet + vue-leaflet (mapping)
- Prettier (code formatting)
MIT
