Model a Tracked Platform

A tracked platform is an Object because it has stable identity and state that can change independently of any task involving it. This example models an aircraft report from an ADS-B adapter.

Select the fields

Modeling need WDM fields

Preserve the source track across updates.

Use a stable id and put the source-issued Mode-S address in identities. Use transponderCodes for its typed numeric value and any reported alert or special position identification state.

Classify the real-world thing.

Set ontology.category to ONTOLOGY_CATEGORY_PLATFORM and describe the aircraft with ontology.type and typeInfo.aviation.

Report where and how it is moving.

Put position, altitude, heading, and position integrity in location. Put velocity, course over ground, and vertical rates in motion. Use the local east-north-up frame for the velocity vector.

Describe the surveillance report and its quality.

Use typeInfo.aviation.surveillanceSource to identify ADS-B as the report source. Use typeInfo.aviation.adsb for the reported ADS-B version, emitter category, quality indicators, and equipment state.

Preserve the operator’s interpretation.

Put assessed affiliation and operating environment in assessment. These fields describe an assessment, not ground truth.

Identify the source and adapter.

Use provenance.name for the operational source, provenance.producer for the publishing component, and provenance.updatedAt for the source update time.

ADS-B values do not all live in one nested block. WDM places shared concepts such as position, motion, and transponder state in their standard fields, while typeInfo.aviation.adsb holds ADS-B-specific metadata. This lets consumers work with common track data without knowing which surveillance system produced it.

Do not create a new Object for every sensor report about the same source track. Publish updates with the same id until the source declares a new track or loses continuity according to the integration’s identity rules.

Example Object

{
  "id": "adsb-780c5a",
  "security": {
    "raw": "U"
  },
  "name": "FLANKER 7",
  "status": "OBJECT_STATUS_ACTIVE",
  "identities": [
    {
      "system": "adsb",
      "identifier": "780C5A",
      "originType": "IDENTITY_ORIGIN_TYPE_BROADCAST"
    }
  ],
  "ontology": {
    "category": "ONTOLOGY_CATEGORY_PLATFORM",
    "type": "Su-35S"
  },
  "typeInfo": {
    "aviation": {
      "aircraftType": "Su-35S",
      "icaoType": "SU35",
      "verticalMode": "VERTICAL_MODE_LEVEL",
      "adsb": {
        "version": 2,
        "emitterCategory": "A3",
        "quality": {
          "navigationIntegrityCategory": 8,
          "navigationAccuracyCategoryPosition": 9,
          "navigationAccuracyCategoryVelocity": 2,
          "sourceIntegrityLevel": 3,
          "sourceIntegrityBasis": "ADSB_SOURCE_INTEGRITY_BASIS_PER_HOUR",
          "geometricVerticalAccuracy": 2,
          "systemDesignAssurance": 2
        },
        "acasOperational": true
      },
      "surveillanceSource": "AVIATION_SURVEILLANCE_SOURCE_ADSB_ICAO",
      "trueAirspeedMps": 240.5
    }
  },
  "location": {
    "position": {
      "latitudeDegrees": 36.12,
      "longitudeDegrees": 42.88,
      "altitudeHaeMeters": 11500.0,
      "altitudePressureMeters": 11390.0
    },
    "orientation": {
      "headingDegrees": 270.0
    },
    "positionSource": "POSITION_SOURCE_GNSS",
    "positionIntegrity": {
      "horizontalContainmentRadiusMeters": 185.2
    }
  },
  "motion": {
    "velocityEnuMps": {
      "x": -240.0,
      "y": 15.0,
      "z": 0.0
    },
    "speedMps": 240.5,
    "barometricVerticalRateMps": 0.0,
    "geometricVerticalRateMps": 0.0,
    "courseOverGroundDegrees": 273.6
  },
  "transponderCodes": {
    "modeSAddress": 7867482,
    "alert": false,
    "specialPositionIdentification": false
  },
  "assessment": {
    "affiliation": "AFFILIATION_HOSTILE",
    "environment": "ENVIRONMENT_HIGH_ALTITUDE"
  },
  "provenance": {
    "name": "ADS-B Feed",
    "producer": "adsb-adapter-v1",
    "updatedAt": "2026-09-14T18:33:36Z"
  }
}

The example omits fields the source does not provide. The full contract and enum definitions are in the public WDM module, primarily raft/wdm/v1/object.proto, aviation.proto, and spatial.proto.