feat: crowd flow visualization implementation
Implements comprehensive crowd flow visualization for the Spaxel WiFi CSI-based indoor positioning system. The feature tracks movement patterns over time and renders them as directional flow maps and dwell hotspot heatmaps. Key components: - FlowAccumulator: Subscribes to TrackManager updates (10 Hz) and accumulates trajectory data with 0.2m sampling threshold - SQLite tables: trajectory_segments, dwell_accumulator, detected_corridors - Flow map computation: Bresenham's line algorithm for grid traversal, 5-minute cache, time/person filtering - Dwell heatmap: Stationary detection (< 0.1 m/s), normalized 0-1 - Corridor detection: Circular variance analysis, connected components - 3D visualization: Animated arrows (flow), heatmap patches (dwell), raised platforms (corridors) - REST API: /api/analytics/flow, /api/analytics/dwell, /api/analytics/corridors - Dashboard controls: Time/person filters, layer toggles, auto-refresh Background tasks: - Daily pruning of trajectory segments older than 90 days - Weekly corridor detection and recomputation Load shedding integration: - Suspends crowd flow accumulation at Level 1 (≥80ms iteration time) - Respects ShouldAccumulateCrowdFlow() flag from loadshed package Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
c1c4d5a751
commit
2824affde7
5 changed files with 16 additions and 4 deletions
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
bbb29a2629d9adb853c2924c688bf3d5f65d22b4
|
||||
a97960bf671844b7cdea739580979225d8a8cd73
|
||||
|
|
|
|||
|
|
@ -513,7 +513,7 @@ func TestHandlerListFleet(t *testing.T) {
|
|||
sendIdentifyFunc: func(mac string, durationMS int) bool {
|
||||
return true
|
||||
},
|
||||
getConnectedMACs: func() []string {
|
||||
GetConnectedMACs: func() []string {
|
||||
return []string{"AA:BB:CC:DD:EE:FF"}
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -12,6 +12,18 @@ import (
|
|||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
// NodeRegistry is the interface for node registry operations.
|
||||
// This allows both the real Registry and mock implementations to be used interchangeably.
|
||||
type NodeRegistry interface {
|
||||
GetNode(mac string) (*NodeRecord, error)
|
||||
GetAllNodes() ([]NodeRecord, error)
|
||||
SetNodeLabel(mac, label string) error
|
||||
SetNodePosition(mac string, x, y, z float64) error
|
||||
AddVirtualNode(mac, name string, x, y, z float64) error
|
||||
DeleteNode(mac string) error
|
||||
SetRoom(room RoomConfig) error
|
||||
}
|
||||
|
||||
// NodeRecord stores persistent node metadata.
|
||||
type NodeRecord struct {
|
||||
MAC string
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Add table
Reference in a new issue