Class S57TranslationDiagnostics
Optional, opt-in diagnostics collector for Translate(S57Document, S57TranslationDiagnostics?). It records — as compact aggregate counters rather than per-instance events — exactly what the translator dropped and why, so a caller (e.g. a corpus-wide conversion audit) can quantify coverage gaps in the embedded S57S101Mapping without re-deriving the translator's logic externally.
public sealed class S57TranslationDiagnostics
- Inheritance
-
S57TranslationDiagnostics
- Inherited Members
Remarks
A fresh instance is created per translation. Passing null to the
translator disables collection entirely (the default parameterless
Translate(S57Document)
overload does exactly that), so there is no cost on the normal render path.
The counters distinguish the two conversion-guidance outcomes that both manifest as "the feature/attribute is absent from the S-101 output": a genuine gap (no rule exists — see UnmappedObjectClasses / UnmappedAttributes) versus a by-design drop (a rule exists but resolves to nothing — see RuleDroppedObjectClasses / RuleDroppedAttributes).
Properties
BridgeAggregationsEmitted
Number of aggregated Bridge features emitted for S-57
C_AGGR collections of BRIDGE objects (plus any
PYLONS / PONTON, lights and other members) (S-65 Annex B §4.8.10). Each replaces the
per-member Bridge features — its member BRIDGE objects emit only their
spans — and links every emitted span, pylon and pontoon as a
BridgeAggregation component. Counted here, not in
FeaturesEmitted.
public int BridgeAggregationsEmitted { get; }
Property Value
BridgeCollectionsUnjoined
Number of S-57 bridge C_AGGR collections whose BRIDGE
members mix curves and surfaces, which no one Bridge geometry can
hold. Their members convert one by one, each piece of equipment linked to the nearest
member Bridge, and the collection itself is not converted.
Members that merely do not join give a multi-part Bridge.
public int BridgeCollectionsUnjoined { get; }
Property Value
BridgeEquipmentLinked
Number of lights and signal stations (warning and traffic) linked to a Bridge
as theEquipment of a StructureEquipment association: the
ones an S-57 bridge C_AGGR collects, where the target Feature
Catalogue binds that class on Bridge. One listed by two
collections is linked (and counted) once.
public int BridgeEquipmentLinked { get; }
Property Value
BridgeSpansEmitted
Number of SpanFixed / SpanOpening component features
synthesised from S-57 BRIDGE objects (S-65 Annex B §4.8.10). A
BRIDGE carrying the clearance its span class requires (VERCLR for
a fixed span, VERCCL for an opening one) yields one span that
shares its geometry and carries the clearance attributes, linked from
the Bridge by a BridgeAggregation association. Spans are
counted here, not in FeaturesEmitted.
public int BridgeSpansEmitted { get; }
Property Value
DerivedFeatureIdentifiersAssigned
Number of S-101 features given a derived feature object identifier
because they come from the same S-57 object as an earlier feature (for
example the span of a BRIDGE, which follows its Bridge):
each keeps the agency and FIDN and takes the next unused
FIDS, so FOIDs stay unique within the dataset.
public int DerivedFeatureIdentifiersAssigned { get; }
Property Value
DroppedEnumValues
S-101 enumerated values dropped because the destination Feature Catalogue does not list them as allowable, keyed by (S-101 attribute, value) → occurrence count. A high count here often signals a defective value remap (targeting a code the FC rejects) rather than a genuine no-equivalent value.
public IReadOnlyDictionary<S57EnumValueDrop, int> DroppedEnumValues { get; }
Property Value
FeatureRecordsRead
Number of non-sounding S-57 feature records the translator iterated, including records later absorbed, deferred, dropped, or unmapped.
public int FeatureRecordsRead { get; }
Property Value
FeaturesDroppedForNoGeometry
Resolved S-101 feature classes (code → occurrence count) whose instances
were dropped because translation produced zero spatial associations
(e.g. unresolved VRPT/FSPT pointers or a degenerate ring).
public IReadOnlyDictionary<string, int> FeaturesDroppedForNoGeometry { get; }
Property Value
FeaturesEmitted
Number of S-101 feature records emitted from non-sounding S-57 features (i.e. features that resolved to an S-101 class and produced geometry).
public int FeaturesEmitted { get; }
Property Value
NauticalInformationTypesEmitted
Number of NauticalInformation information-type records emitted by
the S-57→S-101 conversion. One is created per feature that carries any of
the textual attributes INFORM/TXTDSC/NINFOM/
NTXTDS, bound to that feature through an
AdditionalInformation association (IHO S-57→S-101 Conversion
Guidance §2.3 "fuller path"). Equals the number of
AdditionalInformation associations emitted.
public int NauticalInformationTypesEmitted { get; }
Property Value
RangeSystemsEmitted
Number of synthesised RangeSystem collection features emitted by
the S-57→S-101 conversion. S-101 has no generic collection object; an
S-57 C_AGGR whose members are navigational tracks plus the
navigation aids that define them is mapped to a geometry-less
RangeSystem feature linked to each member by a
RangeSystemAggregation association in the member's
theComponent role (S-101 FC Ed 1.x). C_AGGR groupings that do not
match this pattern (and all C_ASSO) have no S-101 home and are
counted under UnmappedObjectClasses instead.
public int RangeSystemsEmitted { get; }
Property Value
RuleDroppedAttributes
S-57 attributes (ATTL → occurrence count) that had a rule but were not
emitted. Either the rule (or a feature-level override) maps the value to
null, an intentional value-level drop, or the rule's target is not
bound by the resolved feature class in the target Feature Catalogue
(e.g. WATLEV on a Pile).
public IReadOnlyDictionary<ushort, int> RuleDroppedAttributes { get; }
Property Value
RuleDroppedObjectClasses
S-57 object classes (OBJL → occurrence count) that have a rule
which resolved to no S-101 class — either an intentional drop
(DefaultS101Code == null) or a redirect that did not match the
instance's attributes.
public IReadOnlyDictionary<ushort, int> RuleDroppedObjectClasses { get; }
Property Value
SectorLightsMerged
Number of co-located S-57 sector-light (LIGHTS with
SECTR1/SECTR2) feature records absorbed into a neighbouring
sector light at the same spatial node during the sector-light merge pass.
An absorbed record produces no S-101 feature of its own, so it is counted
here instead of in FeaturesEmitted. It usually adds
a sectorCharacteristics instance to the surviving
LightSectored feature, but members with missing or FC-rejected
LITCHR contribute no instance and have their diverted sector inputs
dropped to match the single-feature path. This counter therefore reflects
records absorbed, which may exceed the instances actually added.
public int SectorLightsMerged { get; }
Property Value
SoundingFeaturesEmitted
Number of S-101 Sounding features emitted (a SOUNDG feature with at
least one depth triple yields exactly one).
public int SoundingFeaturesEmitted { get; }
Property Value
SoundingFeaturesRead
Number of S-57 SOUNDG (OBJL=129) feature records seen.
public int SoundingFeaturesRead { get; }
Property Value
SoundingFeaturesWithoutPoints
Number of SOUNDG feature records dropped because no resolvable depth triples were found on their referenced vector records.
public int SoundingFeaturesWithoutPoints { get; }
Property Value
SoundingPointsEmitted
Total number of depth points emitted across all soundings.
public int SoundingPointsEmitted { get; }
Property Value
StructureEquipmentLinked
Number of S-57 master/slave relationships (a master's FFPT with
the slave relationship indicator, S-57 UOC 12.1.1) converted to
StructureEquipment associations: a buoy, beacon or other
structure and its light, fog signal, radar reflector and so on.
public int StructureEquipmentLinked { get; }
Property Value
TimeSchedulesEmitted
Number of S-401 TimeScheduleInGeneral information records
emitted, one per IENC time schedule (tisdge) that at least one
translated feature carries through AdditionalInformation.
public int TimeSchedulesEmitted { get; }
Property Value
TopmarksAbsorbed
Number of S-57 TOPMAR (topmark/daymark, OBJL 144) feature records
absorbed by a master buoy/beacon during the topmark-fold pass. S-101 models
the topmark as an attribute of the parent structure (reached via the S-57
master/slave feature-to-feature relationship) rather than a standalone
feature, so an absorbed TOPMAR produces no S-101 feature of its own and is
counted here instead of under UnmappedObjectClasses.
This counts every TOPMAR consumed by a topmark-binding master; the parent's
topmark complex instance may still be dropped afterward (for example
a missing or FC-rejected TOPSHP), so an absorbed TOPMAR does not
guarantee an emitted topmark instance. A TOPMAR referenced by no
topmark-binding master is still recorded as unmapped (IHO S-57→S-101
Conversion Guidance: TOPMAR → parent attribute).
public int TopmarksAbsorbed { get; }
Property Value
UnboundStructureEquipment
S-57 master/slave pairs not converted because the target Feature
Catalogue doesn't bind the slave's class as theEquipment of the
master's class, keyed by the S-101 pair → occurrence count.
public IReadOnlyDictionary<S57StructureEquipmentPair, int> UnboundStructureEquipment { get; }
Property Value
UnmappedAttributes
S-57 attributes dropped because the mapping has no attribute rule for the
ATTL, keyed by (owning OBJL, ATTL) → occurrence count. Textual-info
attributes (INFORM/NINFOM/TXTDSC/NTXTDS), which are transformed into the
S-101 information complex attribute rather than dropped, are
excluded.
public IReadOnlyDictionary<S57AttributeDrop, int> UnmappedAttributes { get; }
Property Value
UnmappedObjectClasses
S-57 object classes (OBJL → occurrence count) that were dropped because the mapping has no rule for them (a coverage gap).
public IReadOnlyDictionary<ushort, int> UnmappedObjectClasses { get; }