Skip to main content

PlanObject

What we push out: a drawing a commander's plan puts on someone else's map. A COA sketch, a route, a control measure, an annotation.

PlanObject is the egress direction. Everything else in the CDM describes what arrived; this one describes what leaves.

Full field reference (generated from the published schema).

geometry is required here

Unlike on Event, where it is optional.

An overlay with no geometry cannot be drawn, so an egress adapter would have to either invent a location or silently drop the object — and a COA sketch that quietly fails to appear on the TAK client is the worst of the three outcomes, because everyone assumes it arrived. Making the field required moves that failure to the adapter, where somebody is looking.

style — hints, and nothing that carries meaning

style holds rendering hints: stroke, fill, opacity, dash. A receiving client is free to ignore every one of them.

That is exactly why nothing which changes meaning may live here. An affiliation belongs on the Entity, not in a colour — a client that ignores style, or a colour-blind operator, or a monochrome print of the overlay must not lose the difference between friendly and hostile. A meaning encoded in a hint is a meaning that can be dropped without anything failing.

label — never an empty string

None means unlabelled. "" is rejected (min_length=1), because an empty string renders as a blank callout — a visible box with nothing in it, which reads as a broken client rather than as an unlabelled object.

expires_at — and the decision hiding in null

When the drawing should disappear. CoT's @stale maps here on egress.

null means "until explicitly removed", and for a stale COA sketch on a live map that is a decision, not a default. An overlay from a plan that was superseded four hours ago is still sitting on somebody's screen looking current. So the field is optional but the choice is not invisible: an adapter that emits null is stating that this drawing outlives the plan.

object_type

ValueUse
COA_SKETCHthe course-of-action drawing itself
ROUTEa LineString a unit is to follow
CONTROL_MEASUREa boundary, a phase line, a restricted area
ANNOTATIONa note on the map

Why there is no GeoJSON Feature wrapper

PlanObject is the CDM's Feature-equivalent: geometry, plus style, plus label. A GeoJSON FeatureCollection is a list of PlanObjects.

Adding the GeoJSON wrappers would give two ways to say one thing, and then every consumer needs to handle both. This is recorded as a known gap in FORMAT_COVERAGE.md rather than treated as an oversight — the CDM's answer to Feature.properties is that properties is not one field: the parts that carry meaning belong on the object, and the parts that do not belong in style.