feat: add mapped ALPR cameras with bounded source loading

Adapt the ALPR camera contribution to reusable layer components, retaining source attribution, bounded queries, selection and voice controls.

Co-authored-by: Bilawal Sidhu <[email protected]>
This commit is contained in:
Tom-NeverwinterandBilawal Sidhu authored and Sameh Khamis committed 2026-09-13 17:21:42 -07:00
1 parent ba7fda74d7
commit 4374c0fa60
28 files changed
+2358 -100

No files matched your search

+9 -1
View File
@@ -455,5 +455,13 @@
"src/layers/cctv/ground.js",
"src/layers/cctv/health.js",
"src/data/cctv.js",
"src/layers/cctv/source.test.mjs"
"src/layers/cctv/source.test.mjs",
"src/data/alprCameras.js",
"src/data/alprCameras.test.mjs",
"src/layers/alpr/index.js",
"src/layers/alpr/model.js",
"src/layers/alpr/policy.js",
"src/layers/alpr/presentation.js",
"src/layers/alpr/source.js",
"src/layers/alpr/source.test.mjs"
]
+290 -89
View File
@@ -10,27 +10,47 @@
"src/data/localGeojsonCore.js",
"src/data/localGeojsonLod.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"application": {
"exports": ["./application"],
"modules": ["src/app/application.js"],
"exports": [
"./application"
],
"modules": [
"src/app/application.js"
],
"external": []
},
"viewer": {
"exports": ["./application/viewer"],
"modules": ["src/app/viewer.js"],
"external": ["cesium"]
"exports": [
"./application/viewer"
],
"modules": [
"src/app/viewer.js"
],
"external": [
"cesium"
]
},
"vite-build": {
"runtime": "node",
"exports": ["./build/vite"],
"modules": ["build/vite.js"],
"external": ["vite-plugin-cesium"]
"exports": [
"./build/vite"
],
"modules": [
"build/vite.js"
],
"external": [
"vite-plugin-cesium"
]
},
"live-providers": {
"runtime": "node",
"exports": ["./server/providers/live"],
"exports": [
"./server/providers/live"
],
"modules": [
"server/providers/live.js",
"server/providers/common/http.js",
@@ -45,16 +65,24 @@
"src/data/aisStreamAdapter.js",
"src/data/aisWatchdog.js"
],
"external": ["ws"]
"external": [
"ws"
]
},
"adsb-lol-source": {
"exports": ["./sources/adsb-lol"],
"modules": ["src/data/adsbLolFallback.js"],
"exports": [
"./sources/adsb-lol"
],
"modules": [
"src/data/adsbLolFallback.js"
],
"external": []
},
"place-providers": {
"runtime": "node",
"exports": ["./server/providers/places"],
"exports": [
"./server/providers/places"
],
"modules": [
"server/providers/places.js",
"server/providers/places/google.js",
@@ -69,13 +97,19 @@
"external": []
},
"place-payloads": {
"exports": ["./sources/places"],
"modules": ["src/data/placeProviderPayloads.js"],
"exports": [
"./sources/places"
],
"modules": [
"src/data/placeProviderPayloads.js"
],
"external": []
},
"space-providers": {
"runtime": "node",
"exports": ["./server/providers/space"],
"exports": [
"./server/providers/space"
],
"modules": [
"server/providers/space.js",
"server/providers/space/celestrak.js",
@@ -86,13 +120,19 @@
"external": []
},
"space-requests": {
"exports": ["./sources/space"],
"modules": ["src/data/spaceProviderRequests.js"],
"exports": [
"./sources/space"
],
"modules": [
"src/data/spaceProviderRequests.js"
],
"external": []
},
"terrain-provider": {
"runtime": "node",
"exports": ["./server/providers/terrain"],
"exports": [
"./server/providers/terrain"
],
"modules": [
"server/providers/terrain.js",
"src/data/terrainHeightsProxy.js"
@@ -100,30 +140,50 @@
"external": []
},
"terrain-source": {
"exports": ["./sources/terrain"],
"modules": ["src/data/terrainHeightsProxy.js"],
"exports": [
"./sources/terrain"
],
"modules": [
"src/data/terrainHeightsProxy.js"
],
"external": []
},
"traffic-provider": {
"runtime": "node",
"exports": ["./server/providers/traffic"],
"modules": ["server/providers/traffic.js", "src/data/tomtomTiles.js"],
"exports": [
"./server/providers/traffic"
],
"modules": [
"server/providers/traffic.js",
"src/data/tomtomTiles.js"
],
"external": []
},
"traffic-source": {
"exports": ["./sources/traffic"],
"modules": ["src/data/tomtomTiles.js"],
"exports": [
"./sources/traffic"
],
"modules": [
"src/data/tomtomTiles.js"
],
"external": []
},
"firms-provider": {
"runtime": "node",
"exports": ["./server/providers/firms"],
"modules": ["server/providers/firms.js", "src/data/firmsCsv.js"],
"exports": [
"./server/providers/firms"
],
"modules": [
"server/providers/firms.js",
"src/data/firmsCsv.js"
],
"external": []
},
"gbfs-provider": {
"runtime": "node",
"exports": ["./server/providers/gbfs"],
"exports": [
"./server/providers/gbfs"
],
"modules": [
"server/providers/gbfs.js",
"server/providers/common/http.js",
@@ -132,13 +192,19 @@
"external": []
},
"gbfs-source": {
"exports": ["./sources/gbfs"],
"modules": ["src/data/gbfsSource.js"],
"exports": [
"./sources/gbfs"
],
"modules": [
"src/data/gbfsSource.js"
],
"external": []
},
"cctv-provider": {
"runtime": "node",
"exports": ["./server/providers/cctv"],
"exports": [
"./server/providers/cctv"
],
"modules": [
"server/providers/cctv.js",
"server/providers/cctv/catalog.js",
@@ -155,7 +221,9 @@
},
"radio-provider": {
"runtime": "node",
"exports": ["./server/providers/radio"],
"exports": [
"./server/providers/radio"
],
"modules": [
"server/providers/radio.js",
"server/providers/radio/catalog.js",
@@ -169,7 +237,9 @@
},
"overpass-provider": {
"runtime": "node",
"exports": ["./server/providers/overpass"],
"exports": [
"./server/providers/overpass"
],
"modules": [
"server/providers/common/geo.js",
"server/providers/common/http.js",
@@ -188,7 +258,9 @@
},
"military-installations-provider": {
"runtime": "node",
"exports": ["./server/providers/military-installations"],
"exports": [
"./server/providers/military-installations"
],
"modules": [
"server/providers/common/http.js",
"server/providers/common/query.js",
@@ -205,7 +277,9 @@
},
"regional-provider": {
"runtime": "node",
"exports": ["./server/providers/regional"],
"exports": [
"./server/providers/regional"
],
"modules": [
"server/providers/common/http.js",
"server/providers/common/query.js",
@@ -224,7 +298,9 @@
},
"openai-provider": {
"runtime": "node",
"exports": ["./server/providers/openai"],
"exports": [
"./server/providers/openai"
],
"modules": [
"server/providers/common/rate-limit.js",
"server/providers/common/request.js",
@@ -244,7 +320,9 @@
},
"standalone-key-setup": {
"runtime": "node",
"exports": ["./server/standalone/key-setup"],
"exports": [
"./server/standalone/key-setup"
],
"modules": [
"scripts/pinokio-environment.mjs",
"server/providers/common/source-root.js",
@@ -255,7 +333,9 @@
"external": []
},
"place-search": {
"exports": ["./search"],
"exports": [
"./search"
],
"modules": [
"src/search/index.js",
"src/search/placeSearch.js",
@@ -265,17 +345,27 @@
"external": []
},
"panel-disclosure": {
"exports": ["./ui/panels"],
"modules": ["src/ui/panelDisclosure.js"],
"exports": [
"./ui/panels"
],
"modules": [
"src/ui/panelDisclosure.js"
],
"external": []
},
"surface-keyboard": {
"exports": ["./ui/surfaces"],
"modules": ["src/ui/surfaceKeyboard.js"],
"exports": [
"./ui/surfaces"
],
"modules": [
"src/ui/surfaceKeyboard.js"
],
"external": []
},
"panel-rail-layout": {
"exports": ["./ui/layout"],
"exports": [
"./ui/layout"
],
"modules": [
"src/ui/panelRails.js",
"src/ui/leftPanelRail.js",
@@ -287,7 +377,9 @@
"external": []
},
"visual-input": {
"exports": ["./ui/input"],
"exports": [
"./ui/input"
],
"modules": [
"src/ui/visualInput.js",
"src/ui/applicationShortcuts.js",
@@ -296,12 +388,19 @@
"external": []
},
"display-controls": {
"exports": ["./ui/display"],
"modules": ["src/ui/displayControls.js"],
"exports": [
"./ui/display"
],
"modules": [
"src/ui/displayControls.js"
],
"external": []
},
"visual-effects": {
"exports": ["./ui/effects", "./ui/effects/bloom"],
"exports": [
"./ui/effects",
"./ui/effects/bloom"
],
"modules": [
"src/ui/effects.js",
"src/ui/visualEffects.js",
@@ -314,10 +413,14 @@
"src/styles/noir.js",
"src/styles/snow.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"map-source-controls": {
"exports": ["./ui/maps"],
"exports": [
"./ui/maps"
],
"modules": [
"src/ui/mapSource.js",
"src/ui/mapSourceControls.js",
@@ -327,7 +430,10 @@
"external": []
},
"layer-panel": {
"exports": ["./ui/layers", "./ui/layers/feedback"],
"exports": [
"./ui/layers",
"./ui/layers/feedback"
],
"modules": [
"src/ui/layers.js",
"src/ui/layerPanel.js",
@@ -338,7 +444,9 @@
"external": []
},
"location-controls": {
"exports": ["./ui/location"],
"exports": [
"./ui/location"
],
"modules": [
"src/ui/location.js",
"src/ui/locationControls.js",
@@ -349,7 +457,9 @@
"external": []
},
"radio-controls": {
"exports": ["./ui/radio"],
"exports": [
"./ui/radio"
],
"modules": [
"src/ui/radio.js",
"src/ui/radioControls.js",
@@ -360,7 +470,9 @@
"external": []
},
"cctv-controls": {
"exports": ["./ui/cctv"],
"exports": [
"./ui/cctv"
],
"modules": [
"src/ui/cctv.js",
"src/ui/cctvBindings.js",
@@ -372,7 +484,10 @@
"external": []
},
"context-controls": {
"exports": ["./ui/context", "./ui/context/policy"],
"exports": [
"./ui/context",
"./ui/context/policy"
],
"modules": [
"src/ui/context.js",
"src/ui/contextActions.js",
@@ -414,10 +529,14 @@
"src/cockpitVisionPolicy.js",
"src/ui/panelRailGeometry.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"scene-controls": {
"exports": ["./ui/scenes"],
"exports": [
"./ui/scenes"
],
"modules": [
"src/ui/scenes.js",
"src/ui/sceneControls.js",
@@ -426,7 +545,9 @@
"external": []
},
"ui-shell": {
"exports": ["./ui/shell"],
"exports": [
"./ui/shell"
],
"modules": [
"src/bloom.js",
"src/cctvFocusPolicy.js",
@@ -523,10 +644,14 @@
"src/app/stateChannel.js",
"src/ui/frameRateMonitor.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"ui-styles": {
"exports": ["./ui/styles"],
"exports": [
"./ui/styles"
],
"modules": [
"src/ui/styles.js",
"style.css",
@@ -553,7 +678,9 @@
"external": []
},
"scenes": {
"exports": ["./scenes"],
"exports": [
"./scenes"
],
"modules": [
"src/scenes/director.js",
"src/scenes/recipes.js",
@@ -565,10 +692,14 @@
"src/ui/scenePresentation.js",
"src/contextModePolicy.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"live-observations": {
"exports": ["./sources/live"],
"exports": [
"./sources/live"
],
"modules": [
"src/sources/live/aircraft.js",
"src/sources/live/contract.js",
@@ -579,7 +710,9 @@
"external": []
},
"civil-flights": {
"exports": ["./layers/flights"],
"exports": [
"./layers/flights"
],
"modules": [
"src/data/aircraftClass.js",
"src/data/aircraftIcons.js",
@@ -610,10 +743,14 @@
"src/layers/flights/testing.js",
"src/layers/flights/tracking.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"military-flights": {
"exports": ["./layers/military"],
"exports": [
"./layers/military"
],
"modules": [
"src/data/aircraftClass.js",
"src/data/aircraftIcons.js",
@@ -641,10 +778,14 @@
"src/layers/military/testing.js",
"src/layers/military/tracking.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"aircraft-mechanics": {
"exports": ["./aircraft"],
"exports": [
"./aircraft"
],
"modules": [
"src/data/aircraftClass.js",
"src/data/aircraftIcons.js",
@@ -664,10 +805,14 @@
"src/layers/aircraft/classification.js",
"src/layers/aircraft/index.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"vessel-layer": {
"exports": ["./layers/vessels"],
"exports": [
"./layers/vessels"
],
"modules": [
"src/layers/vessels/cards.js",
"src/layers/vessels/evidence.js",
@@ -685,19 +830,27 @@
"src/data/iconOrientation.js",
"src/data/vesselLabels.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"earthquakes": {
"exports": ["./layers/earthquakes"],
"exports": [
"./layers/earthquakes"
],
"modules": [
"src/layers/earthquakes/index.js",
"src/layers/earthquakes/model.js",
"src/layers/earthquakes/source.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"fire-layer": {
"exports": ["./layers/firms"],
"exports": [
"./layers/firms"
],
"modules": [
"src/data/firmsAdapt.js",
"src/data/firmsLabels.js",
@@ -716,10 +869,14 @@
"src/layers/firms/state.js",
"src/layers/firms/viewport.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"satellites-layer": {
"exports": ["./layers/satellites"],
"exports": [
"./layers/satellites"
],
"modules": [
"src/data/issPass.js",
"src/data/satelliteClass.js",
@@ -738,10 +895,15 @@
"src/layers/satellites/testing.js",
"src/layers/satellites/tracking.js"
],
"external": ["cesium", "satellite.js"]
"external": [
"cesium",
"satellite.js"
]
},
"launches-layer": {
"exports": ["./layers/launches"],
"exports": [
"./layers/launches"
],
"modules": [
"src/layers/launches/camera.js",
"src/layers/launches/controls.js",
@@ -763,10 +925,14 @@
"src/layers/launches/state.js",
"src/layers/launches/testing.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"installations-layer": {
"exports": ["./layers/installations"],
"exports": [
"./layers/installations"
],
"modules": [
"src/data/installationFeedback.js",
"src/data/militaryInstallationData.js",
@@ -782,10 +948,14 @@
"src/layers/installations/state.js",
"src/layers/installations/viewport.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"awareness-layer": {
"exports": ["./layers/awareness"],
"exports": [
"./layers/awareness"
],
"modules": [
"src/cockpitMath.js",
"src/data/iconOrientation.js",
@@ -808,10 +978,14 @@
"src/layers/awareness/testing.js",
"src/ui/panelRailGeometry.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"traffic-layer": {
"exports": ["./layers/traffic"],
"exports": [
"./layers/traffic"
],
"modules": [
"src/data/flowMatch.js",
"src/data/tomtomTiles.js",
@@ -836,10 +1010,16 @@
"src/layers/traffic/timing.js",
"src/layers/traffic/viewport.js"
],
"external": ["cesium", "pbf", "@mapbox/vector-tile"]
"external": [
"cesium",
"pbf",
"@mapbox/vector-tile"
]
},
"bikeshare-layer": {
"exports": ["./layers/bikeshare"],
"exports": [
"./layers/bikeshare"
],
"modules": [
"src/layers/bikeshare/controls.js",
"src/layers/bikeshare/index.js",
@@ -856,10 +1036,14 @@
"src/layers/bikeshare/testing.js",
"src/layers/bikeshare/viewport.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"cctv-layer": {
"exports": ["./layers/cctv"],
"exports": [
"./layers/cctv"
],
"modules": [
"src/data/cctvCards.js",
"src/data/cctvGizmo.js",
@@ -892,6 +1076,23 @@
"src/layers/cctv/testing.js",
"src/overlays/worldOverlayTokens.js"
],
"external": ["cesium"]
"external": [
"cesium"
]
},
"alpr-cameras": {
"exports": [
"./layers/alpr"
],
"modules": [
"src/layers/alpr/index.js",
"src/layers/alpr/model.js",
"src/layers/alpr/policy.js",
"src/layers/alpr/presentation.js",
"src/layers/alpr/source.js"
],
"external": [
"cesium"
]
}
}