Table of Contents

Class S57TranslationDiagnostics

Namespace
EncDotNet.S100.Datasets.S57
Assembly
EncDotNet.S100.Datasets.S57.dll

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

int

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

int

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

int

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

int

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

int

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

IReadOnlyDictionary<S57EnumValueDrop, int>

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

int

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

IReadOnlyDictionary<string, int>

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

int

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

int

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

int

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

IReadOnlyDictionary<ushort, int>

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

IReadOnlyDictionary<ushort, int>

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

int

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

int

SoundingFeaturesRead

Number of S-57 SOUNDG (OBJL=129) feature records seen.

public int SoundingFeaturesRead { get; }

Property Value

int

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

int

SoundingPointsEmitted

Total number of depth points emitted across all soundings.

public int SoundingPointsEmitted { get; }

Property Value

int

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

int

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

int

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

int

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

IReadOnlyDictionary<S57StructureEquipmentPair, int>

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

IReadOnlyDictionary<S57AttributeDrop, int>

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; }

Property Value

IReadOnlyDictionary<ushort, int>