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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EncDotNet.S100.Datasets.S111" Version="0.16.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EncDotNet.S100.Datasets.S111" Version="0.16.0" />
                    
Directory.Packages.props
<PackageReference Include="EncDotNet.S100.Datasets.S111" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EncDotNet.S100.Datasets.S111 --version 0.16.0
                    
#r "nuget: EncDotNet.S100.Datasets.S111, 0.16.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EncDotNet.S100.Datasets.S111@0.16.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EncDotNet.S100.Datasets.S111&version=0.16.0
                    
Install as a Cake Addin
#tool nuget:?package=EncDotNet.S100.Datasets.S111&version=0.16.0
                    
Install as a Cake Tool

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 an IHdf5File (regular grid format).
  • S111CoverageSourceICoverageSource adapter 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 bundled Rules/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.xsl on first use by S111SpeedBandReader and cached per-catalogue instance. The XSLT supplies the 9 SurfaceCurrentSpeedBand{N} ranges (mapped to colour tokens SCBN{N} and SVG symbols SCAROW0{N}) plus the scaleFloor, scaleCeiling and scaleFactorIntermediate variables — no values are hard-coded in C#.
  • Day / Dusk / Night palettes — read from ColorProfiles/colorProfile.xml. SwitchPalette(PaletteType) activates the chosen palette; ResolveSymbolScheme and ActivePalette reflect 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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