EncDotNet.S100.Datasets.S111
0.16.0
dotnet add package EncDotNet.S100.Datasets.S111 --version 0.16.0
NuGet\Install-Package EncDotNet.S100.Datasets.S111 -Version 0.16.0
<PackageReference Include="EncDotNet.S100.Datasets.S111" Version="0.16.0" />
<PackageVersion Include="EncDotNet.S100.Datasets.S111" Version="0.16.0" />
<PackageReference Include="EncDotNet.S100.Datasets.S111" />
paket add EncDotNet.S100.Datasets.S111 --version 0.16.0
#r "nuget: EncDotNet.S100.Datasets.S111, 0.16.0"
#:package EncDotNet.S100.Datasets.S111@0.16.0
#addin nuget:?package=EncDotNet.S100.Datasets.S111&version=0.16.0
#tool nuget:?package=EncDotNet.S100.Datasets.S111&version=0.16.0
EncDotNet.S100.Datasets.S111
Reader and coverage portrayal pipeline for S-111 Surface Current datasets.
Overview
This library reads S-111 datasets from HDF5 files and provides time-series current speed and direction grids for the portrayal pipeline. Key types include:
S111Dataset— root model containing horizontal CRS, depth, data coding format, and time-step coverages.S111DatasetReader— reads an S-111 dataset from anIHdf5File(regular grid format).S111CoverageSource—ICoverageSourceadapter for the coverage pipeline.S111PortrayalCatalogue— coverage portrayal catalogue for current arrow rendering (see Portrayal below).S111SpeedBandReader— parses the 9 surface-current speed bands and the three scale constants from the bundledRules/select_arrow.xsl.SurfaceCurrentCoverage,SurfaceCurrentValue— surface current data models.
Portrayal
S111PortrayalCatalogue is driven by the bundled IHO portrayal catalogue under
EncDotNet.S100.Specifications' content/S111/pc/ tree:
- Speed bands & scale constants — parsed from
Rules/select_arrow.xslon first use byS111SpeedBandReaderand cached per-catalogue instance. The XSLT supplies the 9SurfaceCurrentSpeedBand{N}ranges (mapped to colour tokensSCBN{N}and SVG symbolsSCAROW0{N}) plus thescaleFloor,scaleCeilingandscaleFactorIntermediatevariables — no values are hard-coded in C#. - Day / Dusk / Night palettes — read from
ColorProfiles/colorProfile.xml.SwitchPalette(PaletteType)activates the chosen palette;ResolveSymbolSchemeandActivePalettereflect the change immediately.
No coverage colour fill
ResolveColorScheme returns null. The bundled portrayal catalogue
(content/S111/pc/Rules/select_arrow.xsl) defines arrow symbology only —
there is no <coverageFill> instruction on surfaceCurrentSpeed. Synthesising
a continuous heatmap from the speed-band table (as an earlier viewer prototype
did) actively obscured the underlying S-101 chart, so the colour-band sub-layer
has been removed. Per-band colour now travels with the arrow SVG itself via its
fSCBN{N} CSS class; MapsuiCoverageArrowRenderer resolves that token via the
active palette.
Per-feature arrow rendering
MapsuiCoverageArrowRenderer emits one Mapsui PointFeature per selected
grid cell carrying an ImageStyle that wraps the bundled SCAROW SVG via the
svg-content:// URI scheme. Mapsui re-rasterises the symbol on every viewport
change so arrows stay sharp at every zoom and at a stable on-screen
size — the convention used by ECDIS-style symbology in S-100 Part 9 §11.
A previous implementation rasterised every arrow into a single georeferenced
PNG sized to the dataset extent; that bitmap was downscaled at low zoom
(arrows shrank to a few pixels and were hard to read) and upscaled at high
zoom (arrows pixelated). Per-feature symbols avoid both pathologies.
Per-band scaling follows the bundled catalogue
(content/S111/pc/Rules/select_arrow.xsl): bands 1-3 share
scaleFloor = 0.40; bands 4-8 use scaleFactorIntermediate = 0.20
multiplied by surfaceCurrentSpeed; band 9 uses scaleCeiling = 2.60.
Those per-band factors multiply the renderer's BaseSymbolScale (default
1.0 — which S111DatasetProcessor overrides with the user's
RenderContext.SymbolScale so the viewer's Symbol Scale slider tunes
arrow size) to produce each feature's ImageStyle.SymbolScale.
Validation
A bundled rule pack
(EncDotNet.S100.Datasets.S111.Validation.S111SurfaceCurrentRules.Default)
evaluates a typed S111Dataset against the S-111 Edition 2.0.0
checklist and emits a ValidationReport of findings. The pack is
invoked automatically by S111DatasetProcessor.Validate() and is
also runnable directly:
var report = S111SurfaceCurrentRules.Default.Run(dataset);
foreach (var finding in report.Findings)
Console.WriteLine($"{finding.RuleId} {finding.Severity}: {finding.Message}");
| Rule id | Severity | Checks |
|---|---|---|
S111-R-1.1 |
Error | Each coverage's Values.Length equals NumPointsLatitudinal × NumPointsLongitudinal. |
S111-R-2.1 |
Warning | Coverages are strictly increasing by TimePoint and successive deltas vary by no more than ±10% of the median delta. |
S111-R-3.1 |
Warning | SurfaceCurrentDepth, when set, falls in [0, 1500] m below the surface. |
S111-R-3.2 |
Warning | TypeOfCurrentData, when set, is a member of the S-111 enumerated set {1..6}. |
S111-R-4.1 |
Warning | Non-NODATA current speeds lie in the plausible range [0, 15] m/s; fill / NaN / ±Infinity skipped. |
S111-R-4.2 |
Error | Non-NODATA current directions lie in the half-open range [0, 360) degrees true. |
S111-PROJ-SCHEMA |
Error | Defensive surrogate: emitted when the underlying HDF5 dataset fails schema-level parsing inside Validate(). |
S111-PROJ-UNSUPPORTED |
Error | Emitted when the loaded dataset uses an unsupported data coding format (e.g. dcf 8 station series). |
R-2.1 reuses the time-axis rule template established by S-104 (V-2), keeping monotonicity / cadence checks consistent across the two time-varying coverage products.
Installation
dotnet add package EncDotNet.S100.Datasets.S111
| 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.Portrayals (>= 0.16.0)
-
net8.0
- EncDotNet.S100.Portrayals (>= 0.16.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on EncDotNet.S100.Datasets.S111:
| 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 | 125 | 6/8/2026 |
| 0.15.0 | 84 | 6/6/2026 |
| 0.14.0 | 78 | 6/6/2026 |
| 0.13.0 | 90 | 6/3/2026 |
| 0.12.0 | 97 | 5/29/2026 |
| 0.11.0 | 96 | 5/19/2026 |
| 0.10.0 | 94 | 5/16/2026 |
| 0.9.0 | 90 | 5/15/2026 |
| 0.8.0 | 101 | 5/13/2026 |
| 0.7.0 | 92 | 5/12/2026 |
| 0.6.0 | 107 | 5/8/2026 |
| 0.5.0 | 93 | 5/4/2026 |
| 0.4.0 | 95 | 5/1/2026 |
| 0.3.0 | 101 | 4/29/2026 |
| 0.2.0 | 107 | 4/14/2026 |
| 0.1.2 | 107 | 4/11/2026 |
| 0.1.1 | 103 | 4/11/2026 |