diff --git a/docs/SPATIAL_INTELLIGENCE.md b/docs/SPATIAL_INTELLIGENCE.md new file mode 100644 index 000000000..c9a979863 --- /dev/null +++ b/docs/SPATIAL_INTELLIGENCE.md @@ -0,0 +1,110 @@ +# Spatial Intelligence + +> **LandveX bygger inte bara ett system som lagrar bilder. Ni bygger ett system som förstår: var något finns, vad det är, hur det förändras, hur säkra observationerna är, och vilka konsekvenser förändringen har.** + +--- + +## Tre Dimensioner + +Varje Observation har tre dimensioner: + +| Dimension | Fråga | Exempel | +|-----------|-------|---------| +| **Semantisk** | Vad är objektet? | Spricka, skylt, brunn | +| **Spatial** | Exakt var sitter den? | Östra fasaden, våning 3, 4.2m över mark | +| **Temporal** | När observerades den och hur har den förändrats? | 2026-07-02, ökat 12% sedan 2026-06-15 | + +--- + +## Precision i Steg + +### Steg 1 — GPS + Bild + +> "Skadan finns ungefär här." + +- GPS-koordinat +- En bild +- Ungefärlig position + +### Steg 2 — Flera Bilder + Triangulering + +> "Mycket troligt att skadan sitter på nordöstra hörnet." + +- Flera bilder från olika vinklar +- Triangulering +- Bättre positionering + +### Steg 3 — 3D-rekonstruktion eller Punktmoln + +> "Sprickan sitter 4,2 meter över mark på fasadens östra sida." + +- 3D-rekonstruktion +- Punktmoln +- Centimeterprecision + +### Steg 4 — Historik + +> Visa exakt hur samma skada utvecklats över tid. + +- Tidslinje +- Förändringsanalys +- Trendberäkning + +--- + +## Rikare Geometri från Början + +Varje Observation kan bära betydligt rikare geometri än bara en GPS-punkt. + +### Byggnad + +``` +Building +├── Facade: North +├── Floor: 3 +├── Zone: N-3-14 +├── Geometry: Polygon +├── Camera Pose +├── Confidence +└── Observations +``` + +### Väg + +``` +Road Segment +├── Start Position +├── End Position +├── Lane +├── Direction +├── Geometry +└── Findings +``` + +--- + +## Starkare Decision Cases + +**Istället för:** +> "Skada på byggnad." + +**Kan ni säga:** +> "Spricka identifierad på byggnad B-104, östra fasaden, våning 3, verifierad i tre oberoende observationer. Rekommenderad inspektion inom 14 dagar." + +**Det är en helt annan nivå av beslutsstöd.** + +--- + +## Långsiktig Vision + +> **En kontinuerligt uppdaterad, georefererad kunskapsmodell över fysisk infrastruktur där varje Observation, Evidence och Decision är kopplad till en exakt plats och en historik över tid.** + +Den formuleringen lovar inte mer precision än ni faktiskt kan leverera idag, men ger en tydlig riktning för hur plattformen kan utvecklas när ni får mer data, fler kameravinklar och bättre modeller. + +--- + +## Status + +- **Version:** 1.0 +- **Date:** 2026-07-02 +- **Complements:** Vision v2.0, Product Levels, Platform Architecture diff --git a/packages/domain/src/observation/observation.ts b/packages/domain/src/observation/observation.ts index 9100ede4b..fb35f39e6 100644 --- a/packages/domain/src/observation/observation.ts +++ b/packages/domain/src/observation/observation.ts @@ -9,6 +9,35 @@ import { ObservationId, MissionId, ArtifactId } from '../common/ids'; import { GeoLocation, Confidence, BoundingBox } from '../common/value-objects'; +/** + * Spatial Intelligence — Three Dimensions + * + * Semantic: What is the object? (crack, sign, manhole) + * Spatial: Exactly where is it? (east facade, floor 3, 4.2m above ground) + * Temporal: When observed and how has it changed? (2026-07-02, increased 12% since 2026-06-15) + */ + +export interface SpatialContext { + readonly facade?: string; // 'north' | 'south' | 'east' | 'west' + readonly floor?: number; // 3 + readonly zone?: string; // 'N-3-14' + readonly height?: number; // 4.2 (meters above ground) + readonly lane?: string; // 'left' | 'right' + readonly direction?: string; // 'northbound' +} + +export interface Geometry { + readonly type: 'point' | 'polygon' | 'line'; + readonly coordinates: number[] | number[][] | number[][][]; +} + +export interface CameraPose { + readonly position: GeoLocation; + readonly heading?: number; // degrees + readonly pitch?: number; // degrees + readonly roll?: number; // degrees +} + export interface Observation { readonly id: ObservationId; readonly missionId: MissionId; @@ -18,6 +47,9 @@ export interface Observation { readonly location: GeoLocation; readonly confidence: Confidence; readonly boundingBox?: BoundingBox; + readonly spatialContext?: SpatialContext; // Rich geometry support + readonly geometry?: Geometry; // Polygon, line, point + readonly cameraPose?: CameraPose; // Camera position and orientation readonly createdAt: Date; } @@ -30,6 +62,9 @@ export interface CreateObservationParams { readonly location: GeoLocation; readonly confidence: Confidence; readonly boundingBox?: BoundingBox; + readonly spatialContext?: SpatialContext; + readonly geometry?: Geometry; + readonly cameraPose?: CameraPose; } export class ObservationFactory {