EncDotNet.S100.Datasets.S129
0.16.0
dotnet add package EncDotNet.S100.Datasets.S129 --version 0.16.0
NuGet\Install-Package EncDotNet.S100.Datasets.S129 -Version 0.16.0
<PackageReference Include="EncDotNet.S100.Datasets.S129" Version="0.16.0" />
<PackageVersion Include="EncDotNet.S100.Datasets.S129" Version="0.16.0" />
<PackageReference Include="EncDotNet.S100.Datasets.S129" />
paket add EncDotNet.S100.Datasets.S129 --version 0.16.0
#r "nuget: EncDotNet.S100.Datasets.S129, 0.16.0"
#:package EncDotNet.S100.Datasets.S129@0.16.0
#addin nuget:?package=EncDotNet.S100.Datasets.S129&version=0.16.0
#tool nuget:?package=EncDotNet.S100.Datasets.S129&version=0.16.0
EncDotNet.S100.Datasets.S129
Support for S-129 Under Keel Clearance Management datasets (S-100 Part 10b GML encoding).
Overview
This library reads S-129 datasets from GML files and provides an XSLT-based portrayal pipeline for under keel clearance features. Two API surfaces are offered:
Raw GML (feature-bag) surface
S129Dataset— root model containing parsed features and dataset identification.S129Feature— a geographic feature with type code, geometry, simple attributes, complex attributes, andxlink:hrefreferences.S129ComplexAttribute— a complex attribute instance containing sub-attribute values.S129Reference— anxlink:hrefcross-reference carried on a feature's child element (S-100 Part 10b §7.2).GmlGeometryType— enum describing the geometry primitive type of a feature.S129PortrayalCatalogue—IVectorPortrayalCatalogueimplementation that loads XSLT rules, symbols, line styles, area fills, and color palettes.
Strongly-typed data model
Mirrors the projection pattern introduced for S-124 / S-125 / S-128 / S-201 (PRs #69–#72). Lives under DataModel/:
S129UnderKeelClearancePlan— root typed projection of anS129Datasetas a single UKC plan (one plan, one plan area, N non-navigable / almost-non-navigable surfaces, ordered control points). Built viaS129UnderKeelClearancePlan.From(dataset, out diagnostics).S129UkcPlanMetadata— theUnderKeelClearancePlanfeature with typedfixedTimeRange,generationTime,maximumDraught, vessel id, and a typedS129ExternalReferenceto the source S-421 route.S129UkcPlanArea,S129NonNavigableArea,S129AlmostNonNavigableArea— typed surface features.S129ControlPoint— typed point feature with the per-waypoint UKC time-step measurement (distanceAboveUKCLimit,expectedPassingTime,expectedPassingSpeed). Control points are returned ordered by expected passing time (stable; gaps preserved — the typed model does not interpolate across explicit producer gaps).S129TimeRange,S129FeatureName,S129ExternalReference— shared sub-types.S129GeometryKind—None/Point/Surface.
Projection issues — duplicate plan features, attribute parse failures, unresolved xlinks — surface as ProjectionDiagnostic entries (codes from the shared EncDotNet.S100.DataModel set: feature.duplicate, attribute.parse.double, attribute.parse.datetime, xlink.unresolved, feature.geometry.missing). The projection only throws InvalidOperationException for a fully empty dataset.
Cross-product references
In S-129 Edition 2.0.0, links to the source S-421 route / S-102 bathymetry / S-104 water level are textual (the producer records identifiers, not xlink:href URLs). The typed projection preserves these on the plan as S129ExternalReference values; resolving them against an actual S-421 / S-102 / S-104 dataset is the caller's responsibility, and the typed model never requires those datasets to be present.
var dataset = S129Dataset.Open("12900MCTDS130TS.gml");
var typed = S129UnderKeelClearancePlan.From(dataset, out var diagnostics);
Console.WriteLine($"Vessel: {typed.Plan?.VesselId}");
Console.WriteLine($"Route: {typed.Plan?.SourceRoute?.Identifier} v{typed.Plan?.SourceRoute?.Version}");
Console.WriteLine($"Plan window: {typed.Plan?.FixedTimeRange?.Start} → {typed.Plan?.FixedTimeRange?.End}");
foreach (var cp in typed.ControlPoints)
{
Console.WriteLine(
$" {cp.FeatureName?.Name,-6} @ {cp.ExpectedPassingTime:HH:mm:ss} " +
$"UKC margin: {cp.DistanceAboveUkcLimit:F2} m");
}
Installation
dotnet add package EncDotNet.S100.Datasets.S129
See also
EncDotNet.S100.Datasets.S129.Fusion— cross-product data-layer helpers that fuse anS129UnderKeelClearancePlanwith the S-102 / S-104 / S-421 datasets it references (timeline iteration, reference resolution, route binding). Strictly additive on top of the types in this library.
Validation
The Validation/ namespace provides a default rule pack for the typed
projection (mirroring the pattern introduced for S-421 in PR #100):
S129UkcRules— a static class exposing each rule as a typedIValidationRule<S129UnderKeelClearancePlan>property, composed intoS129UkcRules.Default(aValidationRuleSet<…>), with aValidate(plan)convenience wrapper that runs the default set.- Rule identifiers follow
S129-R-{clause}and cite the relevant S-129 Edition 2.0.0 feature-catalogue elements in their XML doc comments. The pilot set covers seven Tier-1 / Tier-2 rules: plan-validity-period inversion, control-point time monotonicity, WGS-84 coordinate bounds across every feature, plan-area geometry populated, positive maximum draught, finite UKC / speed measurements, and control-point geometry presence. - Tier-3 cross-dataset rules — e.g. comparing a control point's UKC
margin against a sibling S-102 bathymetric grid — are intentionally
deferred to the MCP
validate_allsurface and theS129Fusionlibrary.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- EncDotNet.S100.Core (>= 0.16.0)
- EncDotNet.S100.Portrayals (>= 0.16.0)
-
net8.0
- EncDotNet.S100.Core (>= 0.16.0)
- EncDotNet.S100.Portrayals (>= 0.16.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on EncDotNet.S100.Datasets.S129:
| Package | Downloads |
|---|---|
|
EncDotNet.S100.Datasets.Pipelines
Per-spec IDatasetProcessor implementations, the DatasetPipelineFactory (file -> processor detection), the headless image-render capability, the S-98 interoperability authority, and the validation runner for IHO S-100 product datasets. Consumed by the EncDotNet.S100 convenience package, the viewer, and the s100 CLI. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.16.0 | 101 | 6/8/2026 |