Class DynamicFeature
- Namespace
- EncDotNet.S100.DynamicSources
- Assembly
- EncDotNet.S100.Core.dll
A single push-driven feature published by an IDynamicFeatureSource.
public sealed record DynamicFeature : IEquatable<DynamicFeature>
- Inheritance
-
DynamicFeature
- Implements
- Inherited Members
Remarks
Geometry vocabulary is intentionally identical to the static
vector pipeline's Feature:
GeometryType is the same enum and
Coordinates uses the same
(Latitude, Longitude) tuple convention. This keeps
renderer authors from learning two systems and gives adapters
that want to snapshot a dynamic source as a static dataset a
one-line projection.
The record is not derived from
Feature because of three semantic
mismatches documented in
docs/design/dynamic-feature-source.md §5 Q2: stable string
identity (vs the static record's long id), opaque
renderer-dispatch Kind (vs FC-bound
FeatureType), and the optional
Motion / required LastUpdated
temporal fields.
Dynamic sources must only use
Point,
Curve, or
Surface.
Coverage push is
deferred to a future IDynamicCoverageSource;
None is degenerate.
Properties
Attributes
Caller-defined extra attributes — vessel name, MMSI, call sign, pressure level, sensor reading, leg label, etc. Renderers consume this opaquely.
public IReadOnlyDictionary<string, object?> Attributes { get; init; }
Property Value
Coordinates
Geometry coordinates in WGS-84 lat/lon. Same convention as the static vector pipeline: latitude first. Cardinality depends on GeometryType — exactly 1 for Point, at least 2 for Curve, a closed ring (first and last coincident) for Surface.
public required IReadOnlyList<GeoPosition> Coordinates { get; init; }
Property Value
GeometryType
Geometry kind. Restricted to Point / Curve / Surface for dynamic sources (see remarks on the type).
public required GeometryType GeometryType { get; init; }
Property Value
Id
Source-stable opaque identity. The source chooses the
semantics — MMSI for AIS, "ownship" for an own-ship
singleton, a GUID for a route waypoint, an isobar key for a
weather contour. Stability across updates is a hard contract:
the same feature must round-trip the same Id.
public required string Id { get; init; }
Property Value
Kind
Opaque renderer-dispatch hint. Has no Feature Catalogue
meaning. Conventional examples: "vessel.cargo",
"vessel.tanker", "vessel.unknown",
"ownship", "waypoint", "weather.isobar".
public string? Kind { get; init; }
Property Value
LastUpdated
UTC timestamp of the most recent update.
public required DateTimeOffset LastUpdated { get; init; }
Property Value
Motion
Optional motion sidecar — only meaningful for moving point features.
public DynamicMotion? Motion { get; init; }
Property Value
VesselGeometry
Optional vessel-geometry sidecar — only meaningful for vessels (own-ship, AIS targets) and only when a renderer can use it to draw a true-scale hull (zoomed-in own-ship/AIS rendering). When null the renderer falls back to a dimension-less pictogram.
public DynamicVesselGeometry? VesselGeometry { get; init; }