EncDotNet.S100.Datasets.S125
0.16.0
dotnet add package EncDotNet.S100.Datasets.S125 --version 0.16.0
NuGet\Install-Package EncDotNet.S100.Datasets.S125 -Version 0.16.0
<PackageReference Include="EncDotNet.S100.Datasets.S125" Version="0.16.0" />
<PackageVersion Include="EncDotNet.S100.Datasets.S125" Version="0.16.0" />
<PackageReference Include="EncDotNet.S100.Datasets.S125" />
paket add EncDotNet.S100.Datasets.S125 --version 0.16.0
#r "nuget: EncDotNet.S100.Datasets.S125, 0.16.0"
#:package EncDotNet.S100.Datasets.S125@0.16.0
#addin nuget:?package=EncDotNet.S100.Datasets.S125&version=0.16.0
#tool nuget:?package=EncDotNet.S100.Datasets.S125&version=0.16.0
EncDotNet.S100.Datasets.S125
Library for reading and portraying IHO S-125 (Marine Aids to Navigation) datasets.
S-125 supersedes the AtoN (Aids to Navigation) feature classes from S-57 / S-101 with a stand-alone S-100-based product specification covering lights, buoys, beacons, daymarks, AIS aids, and other aids to navigation.
Features
- Parse S-125 GML datasets (S-100 Part 10b encoding using the S-100 GML 5.0 profile)
- Extract concrete AtoN features (
Landmark,LateralBuoy,CardinalBeacon,LightSectored,VirtualAISAidToNavigation, …) and information types (AtonStatusInformation,SpatialQuality) - Preserve information bindings (
xlink:href/informationRef) so the XSLT portrayal rules can resolve cross-references - Project to the S-100 Part 9 FeatureXML neutral form (
Dataset/Features/*plusDataset/InformationTypes/*) consumed by the S-125 portrayal catalogue - XSLT-based portrayal via the S-125 Portrayal Catalogue
Overview
Key types:
S125Dataset— root model containing parsed features, information types, and dataset identification.S125Feature— a geographic feature with type code, geometry, simple/complex attributes, and information references. ImplementsIGmlFeature.S125InformationType— an information type instance (e.g.AtonStatusInformation). ImplementsIGmlInformationType.S125InformationReference— a feature → information-type association captured fromxlink:href/informationRefattributes.S125ComplexAttribute— a complex attribute group with sub-attribute values. ImplementsIGmlComplexAttribute.GmlGeometryType— shared enum (fromEncDotNet.S100.Core) describing the geometry primitive type of a feature.S125FeatureXmlSource—IFeatureXmlSourceadapter that projects anS125Datasetinto the synthesizedDataset/Features/*shape that S-125 XSLT rules match against.S125FeatureGeometryProvider—IFeatureGeometryProvideradapter for the unified Mapsui display-list renderer.S125PortrayalCatalogue—IVectorPortrayalCatalogueimplementation that loads XSLT rules, symbols, line styles, area fills, and color palettes.
Strongly-typed data model
The EncDotNet.S100.Datasets.S125.DataModel namespace provides a
read-only projection of S125Dataset into a domain-shaped object graph
rooted at S125AtonDataset. Aids are exposed as typed shapes
(S125Buoy, S125Beacon, S125Light, S125AisAton, S125Structure,
S125Equipment) under the common IS125Aid interface. AtoN status
bindings (AtoNStatus xlink → AtonStatusInformation) and
equipment-on-structure relationships (parent xlink → host beacon /
landmark) are resolved into navigable properties so callers can ask
domain questions without walking the feature bag.
The projection is permissive — unresolved xlinks, attribute parse
failures, and similar issues surface as ProjectionDiagnostic entries
rather than exceptions. Only a fully empty dataset (no features and no
information types) causes From(...) to throw.
Quick start (typed model)
using EncDotNet.S100.Datasets.S125;
using EncDotNet.S100.Datasets.S125.DataModel;
var dataset = S125Dataset.Open("path/to/aton.gml");
var typed = S125AtonDataset.From(dataset, out var diagnostics);
foreach (var aid in typed.Aids)
{
var status = aid.Status?.IsOperational switch
{
true => "operational",
false => "non-operational",
null => "no status",
};
Console.WriteLine($"{aid.FeatureType} {aid.Id}: {status}");
if (aid is S125AisAton ais && ais.IsVirtual)
Console.WriteLine(" (virtual AIS — no physical presence)");
if (aid.HostStructure is { } host)
Console.WriteLine($" mounted on {host.FeatureType} {host.Id}");
}
Validation
The EncDotNet.S100.Datasets.S125.Validation namespace exposes
S125AtonRules.Default, a ValidationRuleSet<S125AtonDataset> of
normative checks built on the typed S125AtonDataset projection. The
pilot pack covers:
| Rule | Severity | Summary |
|---|---|---|
S125-R-1.1 |
Error | Aid position lat/lon in WGS-84 ranges (S-100 Part 10b §6.2) |
S125-R-1.2 |
Error | Aid gml:id unique within the dataset |
S125-R-2.1 |
Error | AIS aid carries a 9-digit mMSICode |
S125-R-3.1 |
Error | AtonStatusInformation.changeTypes in {1..5} |
S125-R-3.2 |
Error | Status date range dateStart ≤ dateEnd |
S125-R-4.1 |
Warning | AtonAggregation / AtonAssociation binds ≥ 1 aid |
S125-R-5.1 |
Warning | AtonStatusIndication has a point geometry |
var raw = S125Dataset.Open("aids.gml");
var typed = S125AtonDataset.From(raw, out _);
var report = S125AtonRules.Validate(typed);
foreach (var f in report.Findings)
Console.WriteLine($"{f.Severity} {f.RuleId} {f.RelatedFeatureId}: {f.Message}");
Projection-time issues (unresolved xlinks, duplicate ids) are not
exposed on the typed model and so are not surfaced as rules; capture
the out IReadOnlyList<ProjectionDiagnostic> from
S125AtonDataset.From if you need them.
Notes
- S-125 application schema namespace is
http://www.iho.int/S125/1.0; geometry uses the S-100 GML 5.0 profile namespacehttp://www.iho.int/s100gml/5.0. Older sample datasets that still declare the S-100 GML 1.0 profile are read transparently. - Coordinate ordering in
<gml:pos>/<gml:posList>follows the S-100 Part 10b convention of lat lon forEPSG:4326. - The bundled portrayal catalogue is the development edition from
iho-ohi/S-125-Product-Specification-Development; at the time of writing it ships only AtoN status indication, AtoN status information, and DataCoverage rules. Per-feature-class symbology is therefore sparse and renderable output is limited until the upstream catalogue is fleshed out. - Renderers must tolerate geometry-less features — abstract supertypes such as
AtonAggregationandAtonAssociationcarry no geometry. - Time validity (
fixedDateRange,periodicDateRange) is interpreted as UTC; do not coerce to local time at the source.
License
The bundled S-125 specification assets in EncDotNet.S100.Specifications are © IHO and used in accordance with their open-publication terms; see https://github.com/iho-ohi/S-125-Product-Specification-Development.
| 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.S125:
| 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 | 117 | 6/8/2026 |