Spatial Intelligence: Three dimensions for every observation

- Semantic: What is the object?
- Spatial: Exactly where?
- Temporal: When observed and how changed?

Rich geometry support from start:
- SpatialContext: facade, floor, zone, height, lane, direction
- Geometry: point, polygon, line with coordinates
- CameraPose: position, heading, pitch, roll

Precision in 4 steps: GPS -> triangulation -> 3D -> history

Stronger Decision Cases with exact location

Vision: Continuously updated georeferenced knowledge model

Next: Pilot 001
This commit is contained in:
Bernt
2026-07-02 17:21:31 +00:00
parent 167def5a61
commit 9883b2c787
2 changed files with 145 additions and 0 deletions
+110
View File
@@ -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
@@ -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 {