<< All versions
Skill v1.0.1
currentAutomated scan100/100lichtblick-suite/lichtblick/panel-map
+3 new
──Details
PublishedAugust 18, 2026 at 11:05 PM
Content Hashsha256:f7f2d820d3670ea6...
Git SHA355014d99402
Bump Typepatch
──Files
Files (1 file, 2.5 KB)
SKILL.md2.5 KBactive
SKILL.md · 71 lines · 2.5 KB
version: "1.0.1" name: "panel-map" description: "Deep Map panel knowledge: Leaflet lifecycle, NavSatFix/LocationFix/GeoJSON handling, tile layers, and the FilteredPointLayer pixel-deduplication grid that bounds rendering cost."
Panel Map Skill
A geographic visualization tool built on Leaflet for displaying GPS/NavSatFix data.
Structure
panels/Map/├── MapPanel.tsx # main panel, Leaflet lifecycle, PanelExtensionContext├── FilteredPointLayer.ts # performance-critical point deduplication├── support.ts # message type detection (NavSatFix, GeoJSON, GPS)└── config.ts # settings tree, tile layer config
Leaflet Integration
- Map instance created on mount, destroyed on unmount
- Tile layers configurable (OpenStreetMap default, custom tile servers)
- Markers use
FeatureGroupfor efficient bulk operations - View can follow the latest GPS point (auto-center)
FilteredPointLayer (Performance Critical)
Pixel-deduplication using a sparse 2D grid.
Problem
GPS at 10 Hz for 1 hour = 36,000 points. Rendering each as a Leaflet marker is prohibitively slow.
Solution
Screen space is divided into a sparse grid of pixel-sized cells.Each cell holds at most ONE marker.Points overlapping in screen space → only one is rendered.On zoom change → the grid is recalculated.
Implementation
- Sparse 2D grid indexed by `
${Math.floor(pixelX)},${Math.floor(pixelY)}` - A new point mapping to an occupied cell is skipped (deduplicated)
- Result:
O(visible pixels)markers instead ofO(data points) - Zoom in → more cells visible → more points; zoom out → heavy dedup → fast
Supported Message Types
| Message Type | Fields Used | |
|---|---|---|
sensor_msgs/NavSatFix | latitude, longitude, altitude | |
sensor_msgs/msg/NavSatFix | (ROS 2 variant) | |
foxglove.LocationFix | latitude, longitude, altitude | |
| GeoJSON | Feature / FeatureCollection geometry |
Performance Notes
FilteredPointLayeris the primary optimization — bounds rendering costFeatureGroupenables bulk add/remove (single DOM update)- Only the visible viewport bounds are processed
- Leaflet handles tile caching internally
- An upper bound on stored points prevents unbounded memory growth
Key Files
packages/suite-base/src/panels/Map/MapPanel.tsxpackages/suite-base/src/panels/Map/FilteredPointLayer.tspackages/suite-base/src/panels/Map/support.tspackages/suite-base/src/panels/Map/config.ts