A Java application that ingests live ADS-B aircraft data from the OpenSky Network and publishes it as Lattice entities using the Anduril Lattice SDK.
- Polls the OpenSky Network public API every 30 seconds for live aircraft positions over North America
- Maps each aircraft to a typed Lattice
Entitywith location, velocity, MilView, Ontology, Provenance, and transponder codes - Publishes entities via
latticeClient.entities().publishEntity()using the real Lattice Java SDK - Simulates 8 military aircraft tracks (C-130, F-16, F/A-18, B-52, KC-135, E-3, RC-135, AH-64) with realistic movement and
DISPOSITION_FRIENDLYclassification - Includes a mock Lattice server that implements the API contract so the SDK works without sandbox access
- Serves a live satellite map UI showing commercial aircraft in green and military in orange, updated in real time via SSE
OpenSky Network API ──► BridgeService ──► Lattice SDK ──► Mock Lattice Server
MilitarySimulator ──► Lattice SDK ──► Mock Lattice Server
│
SSE stream
│
Browser map UI
(MapLibre + ESRI satellite)
Requires Java 17+ and Maven. The Lattice SDK must be installed to your local Maven repository from lattice-sdk-java, along with its KMP runtime dependencies (okhttp-jvm, okio-jvm, kotlin-stdlib 2.x).
mvn clean package -DskipTests
java -jar target/lattice-adsb-bridge-1.0.0-SNAPSHOT.jarOpen http://localhost:8080 for the live map.
Status endpoint: http://localhost:8080/status
src/main/resources/application.properties:
| Property | Default | Description |
|---|---|---|
bridge.poll-interval-ms |
30000 |
OpenSky poll interval in milliseconds |
bridge.max-aircraft |
50 |
Maximum aircraft to publish per cycle |
bridge.opensky.bounding-box |
North America | Lat/lon bounding box query params |
The project uses com.anduril:lattice-sdk:5.3.1 and exercises the following:
Latticeclient builder with custom URL and bearer tokenEntitytyped builder withLocation,Position,Enu,MilView,Ontology,Provenance,TransponderCodesMilViewDispositionandMilViewEnvironmentenumsentities().publishEntity()for both real-time ingestion and simulated tracksLatticeExceptionhandling per-entity to isolate publish failures
The mock server implements PUT /api/v1/entities, POST /api/v1/oauth/token, POST /api/v1/entities/stream (SSE), and the long-poll events endpoint, faithfully following the Lattice API contract so the SDK client behaves identically to a production deployment.