Table of Contents

Namespace EncDotNet.S100.Datasets.Pipelines

Classes

CapDatasetProcessor

Pipeline processor for CAP 1.2 marine weather warnings (design note docs/design/weather-sources.md §6.1): one CAP alert, an Atom feed of them, or the NWS GeoJSON form from api.weather.gov/alerts, read by CapReader. CAP isn't an S-100 product, and its warnings aren't for navigation.

CoverageExtent

Computes the geographic (WGS84, EPSG:4326) footprint of a coverage grid, reprojecting from the grid's native CRS when that CRS is projected (e.g. an S-102 tile in UTM zone 31N). S-100 gridded coverages name their georeferencing attributes gridOrigin*/gridSpacing*Latitudinal / *Longitudinal regardless of CRS, so for a projected grid those values are native metres (northing/easting), not degrees — a raw BoundingBox built from them is not WGS84.

CoveragePickHelper

Shared coverage-sampling helper used by the per-spec processors when servicing GetCoverageInfo(double, double, DateTime?). Reprojects a WGS84 click position into the coverage's native CRS, locates the containing grid cell, and samples a single-cell GridRegion from the supplied ICoverageSource.

CoveragePickHelper.SamplePoint

Result of a single-cell coverage sample.

DatasetForecastRun

The model run a forecast dataset belongs to (design note docs/design/weather-sources.md §8.4), reported by ForecastRun.

DatasetPipelineFactory

Detects a dataset's product — each ProductRegistration claims its own files — and creates the appropriate IDatasetProcessor.

DatasetProcessorLease

Keeps one processor owned by a DatasetProcessorOwner alive while a caller uses it.

DatasetProcessorOwner

Owns loaded dataset processors by their host-stable MapDatasetId.

DatasetProcessorServices

The shared, product-agnostic dependencies a per-product registration closes over when it constructs an IDatasetProcessor. A single instance is built once by DatasetPipelineFactory from the managers it was given and passed to every registration, so — exactly as before the registry existed — the portrayal / feature-catalogue parse caches survive for the lifetime of the managers rather than per processor.

DatasetProcessorSourceRequest

A dataset stored inside an IAssetSource, addressed for processor construction by a DatasetProcessorFromSource.

EcdisCategoryMapper

Maps a cross-spec EcdisDisplayCategory to the per-spec displayMode id declared in that spec's bundled portrayal catalogue. Specs that only declare a single mode (typically just StandardDisplay) fall back to null for non-Standard categories — meaning "no mode filter, render everything", matching the bundled catalogue's authoring intent.

EcdisDisplayExtensions

Extensions that apply EcdisDisplaySettings to a freshly-constructed per-spec vector portrayal catalogue. Called by every vector dataset processor immediately after it builds the catalogue and before VectorPipeline consumes it.

EcdisDisplaySettings

Cross-spec ECDIS display settings carried on every RenderContext. Producers (the viewer) populate this from EcdisDisplayState; consumers (per-spec processors) apply it to their IVectorPortrayalCatalogue via ApplyTo(EcdisDisplaySettings, IVectorPortrayalCatalogue).

ExchangeSetLoadResult

Result of attempting to load a single dataset from an exchange set. Either Processor is non-null on success, or Error is non-null on failure. Never both null.

ExchangeSetLoader

Bulk-loads every dataset declared in an ExchangeSet's catalogue, routing each one through DatasetPipelineFactory. Errors are captured per-dataset rather than thrown so a single bad dataset does not abort the load.

ExchangeSetProgress

Per-dataset progress event raised by ExchangeSetLoader.

ExternalTextFileResolver

Resolves the textual content of an externally referenced text file (named by an S-100 fileReference attribute — S-101 Feature Catalogue, alias TXTDSC / NTXTDS) from the dataset's exchange-set IAssetSource. When the exchange-set catalogue's supportFileDiscoveryMetadata is supplied, the referenced file is located through it first (the canonical ECDIS mechanism); otherwise the file is looked up relative to the dataset's own directory, then at the exchange-set root, then under a sibling SUPPORT_FILES / support directory (the S100_ROOT exchange-set layout).

FeatureGeometryHit

A single vector feature found at a geographic point by HitTestFeatures(double, double, double) — the reusable, renderer-neutral unit of a geographic pick. Carries just enough to rank the hit and to resolve the full FeatureInfo from the same processor via GetFeatureInfoAt(int) (collision-free) or GetFeatureInfo(string).

FeatureInfo

Feature information returned by a pick / object-info operation.

FeatureInfoBuilder

Shared helpers for assembling PickAttribute trees from the (simple-attribute dictionary + complex-attribute list) shape that every GML dataset reader exposes today. Centralised here so each product processor's GetFeatureInfo implementation stays a thin adapter.

FeatureReference

An xlink-style reference from one feature to another within the same dataset. Promoted from per-spec reference types (e.g. S125InformationReference, GmlReference) so that the pick UI can offer uniform "follow reference" navigation across all GML-encoded products.

FeatureSummary

Lightweight feature descriptor returned by EnumerateFeatures().

GmlDatasetProcessorBase<TFeature>

Abstract base class for GML-based dataset processors that share the standard S-100 Part 9 vector portrayal pipeline template: parse → catalogue setup → FeatureXML projection → XSLT pipeline → Mapsui display-list rendering.

GmlDatasetProcessorBase<TFeature>.SupplementalPortrayal

Drawing instructions and their pre-resolved assets from a supplemental portrayal source (see BuildSupplementalPortrayalAsync(RenderContext?, CancellationToken)).

GribDatasetProcessor

Pipeline processor for GRIB2 wind and wave grids (NOAA GFS and GFS-Wave, ECMWF open data), read by GribWeatherDataset and drawn, sampled and picked by WeatherGridProcessorBase. Weather model data isn't an S-100 product and isn't for navigation.

HeadlessCompositeInput

One dataset's contribution to a headless composite: exactly one of a Mapsui-free vector or coverage portrayal result, plus its S-98 active flag.

HeadlessCompositeOptions

Options controlling a headless composite render.

HeadlessCompositeScene

A headless composite whose S-98 ordering, suppression and scene lowering are already done, ready to paint against any number of viewports. Build one with Prepare(IReadOnlyList<HeadlessCompositeInput>, HeadlessCompositeOptions?) when rendering the same datasets many times, as a tile pyramid does.

HeadlessCompositor

Mapsui-free multi-layer S-100 compositor. Given a set of pre-built, renderer-neutral portrayal results (vector and/or coverage), the compositor drives the renderer-neutral S-98 ordering / suppression engine (LayerStackBuilder + IInteroperabilityAuthority), lowers each ordered sub-layer into a Skia CompositeLayer, and paints them against one shared Viewport via HeadlessCompositeRenderer — reproducing, without Mapsui, the cross-dataset draw order and depth suppression the viewer applies (e.g. the canonical S-101-under-S-102 interleave, S-98 Annex A §A-6.9.1).

HeadlessTile

One rendered XYZ tile.

HeadlessTileOptions

Options for HeadlessTileRenderer.

HeadlessTileRenderer

Renders a prepared HeadlessCompositeScene as XYZ Web-Mercator raster tiles (see XyzTileGrid).

IceEggCode

A render-ready projection of an S-411 sea-ice / lake-ice feature's WMO / SIGRID-3 "egg code": the up-to-four stacked rows of the oval plus the special values that convention reports outside the oval.

IceEggCodeBuilder

Builds a render-ready IceEggCode from the raw S-411 sea-ice / lake-ice WMO attributes (iceact, iceapc, icesod, iceflz, snowDepth).

IceEggValue

A single value cell in an IceEggCode diagram, carrying the raw display token, its semantic Role, and the source attribute code it was derived from (for hover definitions).

MapDataset

Immutable, renderer- and UI-neutral snapshot of one loaded dataset's map state.

MapDatasetSubLayer

Renderer-neutral display state for one portrayal sub-layer of a loaded dataset.

MapPresentationState

Immutable, renderer-neutral snapshot of the presentation choices shared by every dataset on an S-100 map.

NavigationalWarningBulletin

What an in-force bulletin lists: the warnings of its series in force when it was published (S-124 Edition 2.0.0 §8.1.3, a References with referenceCategory 3), or none (noMessageOnHand, §8.1.4).

NavigationalWarningBulletinReport

The latest in-force bulletin of a series, and what it lists that isn't loaded (S-124 Edition 2.0.0 §9.2.2: "an indication should be given").

NavigationalWarningFeature

A navigational warning part as a dataset lists it: the feature that carries it and its message. Returned by GetNavigationalWarnings().

NavigationalWarningInfo

The message of a navigational warning part, projected for object information UIs: identification, type, validity, area and the full text in every language the dataset gives (S-124 NavwarnPart read through its NavwarnPreamble header).

NavigationalWarningReference

A navigational warning's identifier in its series: the series name, the warning number and the year, as a cancellation refers to it.

NavigationalWarningSet

Every loaded navigational warning, judged together: a warning's status depends on the others, which may cancel it or, as an in-force bulletin, leave it out (S-124 Edition 2.0.0 §9.2.1, §9.3).

NavigationalWarningState

A navigational warning's status at a time, and why.

NavigationalWarningText

One language of a navigational warning's message text.

NavigationalWarningValidity

A period when a navigational warning applies. Either end may be open.

NetCdfDatasetProcessor

Pipeline processor for NetCDF-CF wind and wave grids: NetCDF-4 (on PureHDF) and NetCDF-3 (classic and 64-bit offset, the format of ERDDAP's .nc output), read by NetCdfWeatherDataset and drawn, sampled and picked by WeatherGridProcessorBase. Weather model data isn't an S-100 product and isn't for navigation.

PickAttribute

One row in a feature's pick / object-info attribute display. Carries both the raw on-the-wire shape (Code / RawValue) and a Feature-Catalogue-decoded shape (Name / DisplayValue) so a viewer can show the friendly form by default while keeping the raw values available in tooltips.

PickOrder

The pick report's order (S-98 15.1; S-164 FeatureInformation2): features with the highest drawing priority in the portrayal first, and at equal priority points, then curves, then surfaces. A feature with no drawing priority (not drawn at the current settings, or from a dataset with no portrayal) comes after every drawn one.

PickValueFormatter

Formats a pick-report value as S-98 15.1 asks: numbers without padding and followed by their unit of measure, and dates as DD-MMM-YYYY with English month abbreviations. The value type and unit come from the feature catalogue's simple attribute (S-100 Part 5).

PortrayalBasis

What a product is drawn from: an S-100 portrayal catalogue (Catalogue), or a portrayal this library defines in code because the product's specification defines none (Application(string)). A Portrayal trait, so hosts label the portrayal from the registry rather than from a list of spec names.

PortrayalBasis.ApplicationBasis

A product drawn by a portrayal SoundCharts defines itself, because the specification defines none, so it isn't IHO symbology.

PortrayalBasis.CatalogueBasis

A product drawn from its S-100 portrayal catalogue.

ProductRegistration

Registers one product with a ProductRegistry: the canonical spec string it handles (e.g. "S-101", or a non-S-100 format name such as "GRIB2"), the two ways to construct its processor (from a file path, and from an IAssetSource), how to recognise its files, and the product traits hosts need to treat it correctly. The traits replace the switches on spec names that used to be spread across the hosts (metadata reading, catalog projection, default S-98 planes, portrayal labelling), so a new product is one registration plus one processor and the hosts don't change.

ProductRegistry

A mutable, product-agnostic map of canonical spec string (e.g. "S-101", "GRIB2") to the ProductRegistration that knows how to recognise, construct and describe that product. DatasetPipelineFactory resolves against a registry instead of a hard-coded switch, and hosts read product traits (IsS100, Portrayal, the default S-98 planes…) from it rather than switching on spec names, so a host can enable a subset of products — e.g. an S-101-only viewer — or add its own without changing. Use AddAllS100Products(ProductRegistry) for the batteries-included set.

ProductRegistryExtensions

Fluent registration helpers for ProductRegistry.

RenderContext

The render options passed to dataset processors. One record serves every product; each processor reads the options it honours and ignores the rest.

S100FeatureGeometry

The encoding- and renderer-neutral geometry of a single vector feature, in WGS-84 lat/lon — the reusable complement to FeatureInfo (attributes) resolved for the same feature. Returned by GetFeatureGeometryAt(int) so a host can highlight or outline a picked feature without reaching into a product's feature model.

S100IssueTime

Combines an S-100 HDF5 dataset's issueDate and issueTime root attributes (S-100 Part 10c) into one UTC time. Producers write them in several forms: 20210414 / 2026-10-03 for the date, and 135227Z, 13:52:27 or 17:36:13.871916 for the time, with an optional Z or UTC offset.

S100Products

The built-in per-product ProductRegistrations for every S-100 product this library ships a processor for, and helpers to register them. This is the one place that knows how each product's processor is constructed, how its files are recognised, and its traits (metadata reader, catalog payload, default S-98 planes, portrayal basis); it replaces the former hard-coded switches in DatasetPipelineFactory and the hosts. A host that wants every product calls AddAllS100Products(ProductRegistry) (the default Default does this, and adds the weather formats of WeatherProducts); a host that wants a subset registers only the products it needs.

S101DatasetProcessor

IDatasetProcessor for IHO S-101 Electronic Navigational Chart cells (S-100 Part 10a ISO 8211 encoding), portrayed through the S-101 Part 9A Lua portrayal catalogue. Also serves S-401 Inland ENC, which shares the encoding and portrayal model, by constructing it with spec: "S-401" so it resolves the S-401 catalogues.

S101ExchangeSetLoadItem

One planned load operation: either a single dataset, an S-101 base cell with its ordered in-set updates, or an orphan update with no base.

S101ExchangeSetUpdatePlan

Groups an exchange set's catalogue entries so that each S-101 base cell is loaded together with the sequential update files (….001, ….002, …) that target the same cell within the same exchange set.

S101FilesystemUpdateDiscovery

Discovers S-101 sequential update files (….001, ….002, …) that sit alongside a base cell (….000) on the local file system, so a command-line caller pointed at a loose base cell can render it at its up-to-date state. This is the file-system analogue of S101ExchangeSetUpdatePlan (which groups updates from an exchange-set catalogue). S-101 / S-100 Part 10a.

S102DatasetProcessor

IDatasetProcessor for IHO S-102 Bathymetric Surface HDF5 datasets. Exposes the depth grid as an ICoveragePortrayalSource portrayed through the S-102 Lua portrayal catalogue, and renders headless images through the Skia coverage core.

S104DatasetProcessor

Pipeline processor for S-104 water-level datasets. Branches between dcf2 (regular grid → coverage layer) and dcf1/dcf8 positioned station series (station-glyph point layer; S-100 Part 10c §10.2.1).

S111DatasetProcessor

Pipeline processor for S-111 surface-currents datasets. Branches between dcf2 (regular grid → coverage + arrow layers) and dcf1/dcf3/dcf8 positioned station/node series (station-arrow point layers; S-111 Edition 2.0.0 §10.2.2.6–10.2.2.9).

S122DatasetProcessor

IDatasetProcessor for IHO S-122 Marine Protected Areas GML datasets. Drives the standard S-100 Part 9 XSLT vector portrayal pipeline inherited from GmlDatasetProcessorBase<TFeature>.

S124DatasetProcessor

IDatasetProcessor for IHO S-124 Navigational Warnings GML datasets. Drives the standard S-100 Part 9 XSLT vector portrayal pipeline inherited from GmlDatasetProcessorBase<TFeature>.

S125DatasetProcessor

Dataset processor that loads an S-125 Marine Aids to Navigation GML dataset, executes the bundled XSLT portrayal pipeline, and produces a Mapsui layer ready for display in the viewer.

S127DatasetProcessor

IDatasetProcessor for IHO S-127 (Marine Resources and Services) GML datasets. Drives the standard S-100 Part 9 vector portrayal pipeline followed by the unified Mapsui display-list renderer.

S128DatasetProcessor

IDatasetProcessor for IHO S-128 Catalogue of Nautical Products GML datasets. Drives the standard S-100 Part 9 XSLT vector portrayal pipeline inherited from GmlDatasetProcessorBase<TFeature> and exposes the parsed catalogue through Dataset.

S129DatasetProcessor

IDatasetProcessor for IHO S-129 Under Keel Clearance Management GML datasets. Drives the standard S-100 Part 9 XSLT vector portrayal pipeline inherited from GmlDatasetProcessorBase<TFeature>, then fills any under-keel-clearance areas the portrayal left unfilled (see PostProcessInstructions(IReadOnlyList<DrawingInstruction>)).

S131DatasetProcessor

IDatasetProcessor for IHO S-131 Marine Harbour Infrastructure GML datasets. Drives the S-100 Part 9A Lua portrayal pipeline (the same engine used by S-101), combining GML data reading with Lua-based portrayal — a first in this codebase.

S201DatasetProcessor

Dataset processor that loads an S-201 Aids to Navigation Information GML dataset, executes the bundled XSLT portrayal pipeline, and produces a Mapsui layer ready for display in the viewer.

S411DatasetProcessor

IDatasetProcessor for S-411 Ice Information GML datasets, accepting both the JCOMM operational encoding and the IHO sample encoding. Drives the standard S-100 Part 9 XSLT vector portrayal pipeline inherited from GmlDatasetProcessorBase<TFeature> and adds the WMO ice "egg code" to sea-ice and lake-ice pick reports.

S411DisplayModes

Shared registry of the three S-411 sea-ice portrayal display modes (S-411 Ed 1.2.1; PC Ed 2.0.0, S-100 Part 9 §11.7). A single S-411 dataset carries the full WMO egg code per polygon, so the same data can be portrayed as total concentration, stage of development, or a provisional navigational preview. This helper is the single source of truth for the spec-native mode ids, their friendly CLI tokens, and the provisional marker, so the CLI (render --display-mode / info) and the Avalonia viewer selector agree on the mapping.

S421DatasetProcessor

IDatasetProcessor for IHO S-421 Route Plan GML datasets. Drives the standard S-100 Part 9 XSLT vector portrayal pipeline inherited from GmlDatasetProcessorBase<TFeature> and exposes route xlink references as navigable links in pick reports.

S57DatasetProcessor

Renders an S-57 ENC base cell by translating it in-memory to an S101Document and reusing the S-101 portrayal pipeline. A maritime ENC is translated into, and portrayed with, S-101; an inland ENC (DSID PRSP = InlandElectronicNavigationalChart) is translated into S-401 and portrayed with the S-401 catalogues (issue #608), provided the host has an S-401 portrayal catalogue (otherwise it falls back to S-101). Either way the product identity stays S-57. Symbology is S-100 (not S-52); coverage is breadth-first.

StationTimeSeriesChannel

A single value series within a StationTimeSeriesSnapshot.

StationTimeSeriesSnapshot

Full time-series snapshot for a single fixed station, projected out of the per-product station model (S-104 WaterLevelStation, S-111 SurfaceCurrentStation) into a product-agnostic shape that the viewer can render in a chart without referencing the per-product dataset assemblies.

SupportedSpecEditions

The set of product specification editions this application supports for each S-100 product, keyed by canonical spec name ("S-NNN").

TimeSemantics

How a time-varying dataset behaves on the timeline (design note docs/design/weather-sources.md §8.4): what its steps are, which step it draws between steps, and how long a step stays valid. Reported by TimeSemantics, so a host needs no per-product rules.

WarningValidity

The in-force rule shared by every kind of warning the map draws: whether a warning applies at a time, judged on its validity ranges and cancellation date alone. S-124 navigational warnings (StatusAt(DateTimeOffset)) and CAP weather warnings both use it, so a warning starts and ends at the same instant whatever its format.

WeatherDatasetContent

One entry of what a weather file holds (Contents), for info output: a parameter of the grid set, or something the reader left out of it.

WeatherGridProcessorBase

The format-neutral part of a weather grid processor: everything after the reader has produced a WeatherGridSet. The NetCDF-CF processor (NetCdfDatasetProcessor) and the GRIB2 processor (GribDatasetProcessor) derive from it and only open their files (design note weather-sources.md §3.3).

WeatherProducts

The built-in ProductRegistrations for weather data, formats that aren't S-100 products (design note weather-sources.md §3.1, §3.2 and §6.1): GRIB2 and NetCDF-CF model grids, and CAP weather warnings. They're kept apart from S100Products so a host can register the S-100 products without them (AddAllS100Products(ProductRegistry)); CreateDefaultRegistry(), and so Default, includes both.

Structs

DatasetHeader

The leading bytes of a dataset file and its extension, read once by DatasetPipelineFactory and handed to each product's DatasetBytesMatcher.

DepthAdjustmentSample

A water level that applies at a point.

FeatureInfoBuilder.AttributeRow

One attribute row of an ISO 8211 encoded feature or information record (S-100 Part 10a ATTR field): its code, its value (empty for a complex attribute) and the 1-based position of its parent row in the same list (PAIX; 0 for a top-level attribute).

FeatureInfoBuilder.ComplexAttributeRow

Describes a complex attribute's sub-rows in shape-agnostic terms; each spec reader exposes its own concrete ComplexAttribute type with this same payload.

GmlRootInfo

A cheap, parse-once view of a GML dataset's root element, handed to each product's DatasetGmlMatcher so it can recognize its own documents without re-parsing. Real-world S-100 GML datasets declare their product through the root element's namespace, the root's local name, an S-100 productIdentifier element, or — for generically-rooted <DataSet> documents — a namespace declared on the root's attributes.

Hdf5RootInfo

A view of an HDF5 file's root group, handed to each product's DatasetHdf5Matcher. The root productSpecification attribute is read once up front; any other root attribute can be read with ReadStringAttribute(string), which is only valid while the matcher runs (the factory closes the file afterwards), so a matcher must not keep the value.

Iso8211RootInfo

A cheap, parse-once view of an ISO 8211 dataset's envelope, handed to each product's DatasetIso8211Matcher so it can recognize its own datasets without re-reading the file. S-100 ISO 8211 products (S-101, S-401) declare themselves in the DSID field's PRSP subfield (e.g. INT.IHO.S-401.1.2). Legacy S-57 is identified instead by the presence of its DSPM field; its PRSP holds a small integer naming the S-57 product specification (1 for a maritime ENC, 10 for an inland ENC), not an S-100 product identifier (S-57 Ed 3.1 Part 3 §7.3.1.1; S-100 Edition 5.2.1 Part 10a).

MapDatasetId

Stable, renderer-neutral identity for one dataset loaded into a map.

S102DepthProbe

A single S-102 bathymetric sample at a geographic point, resolved to metres (positive down) by SampleBaseDepth(double, double). This is the CRS-aware live-sampling result the viewer feeds into its depth assimilation as the highest-priority base-depth candidate.

TileBlock

A block of adjacent tiles at one zoom level that is rendered as one image (a metatile) and then cut into its tiles.

Interfaces

IChartDepthCell

A loaded chart cell (S-101, S-401, or S-57 translated to either) that a point depth lookup ranks against overlapping cells and samples soundings from, as the viewer's pick report does (issues #938, #1040).

ICoverageSampler

Capability implemented by coverage dataset processors (and the catalog payloads that carry their data) whose values can be read at a point: S-102 depths, S-104 water levels and S-111 surface currents today, weather grids later. Lets the MCP sample_coverage and sample_coverage_along tools sample a product without knowing its specification.

IDatasetProcessor

Processes a dataset file and exposes feature/coverage pick info, enumeration, and validation. Rendering is performed separately by a renderer that consumes the processor's portrayal-output seam (e.g. IVectorPortrayalSource / ICoveragePortrayalSource), so this abstraction carries no renderer (Mapsui) type. Constructed once per file.

IDatasetProcessorFactory

Creates an IDatasetProcessor for a dataset on the local file system, without the caller having to know which S-100 product the file belongs to or how that product's processor is constructed. This is the renderer-neutral, product-agnostic seam a reusable host (e.g. the Mapsui Map.AddS100 extension) depends on so it can turn a dropped file into a processor while referencing neither the concrete DatasetPipelineFactory nor any per-product assembly. DatasetPipelineFactory is the built-in implementation.

IDateDependentDatasetProcessor

Capability implemented by dataset processors whose portrayal can draw some instructions only at some times (S-100 Part 9 timeValid, such as S-101 features with a fixed or periodic date range). They draw at PortrayalTime.

IDepthAdjustableProcessor

A processor whose portrayal changes with DepthAdjustment. A host re-renders only these processors when the water level it applies changes, for example as the Timeline moves.

IDepthAdjustment

A water level to add to charted depths across the chart (S-98 Appendix D, water level adjustment). A depth processor that honours it portrays d + h instead of the charted d wherever At(double, double, int?) gives an h, and the charted depth everywhere else.

IDisplayModeAwareDatasetProcessor

Capability implemented by dataset processors whose portrayal catalogue declares one or more S-100 Part 9 §11.7 display modes — alternative looks selectable over a single dataset (e.g. S-411 sea ice offers concentration, stage-of-development and navigational modes). Lets callers (e.g. the CLI info command) enumerate the available modes without reflecting over concrete processor or catalogue types.

IHeadlessImageRenderer

Capability implemented by dataset processors that can rasterise their portrayal to a standalone SKBitmap through the headless, backend-agnostic Skia core (vector products via HeadlessVectorRenderer; coverage products via the direct Skia coverage / arrow renderers) — bypassing Mapsui entirely.

ITimeAwareDatasetProcessor

Capability implemented by dataset processors whose portrayal varies over a discrete set of forecast / observation time steps (S-104 water levels, S-111 surface currents, and S-411 sea ice). Lets callers (e.g. the CLI) map a user-supplied time-step index to a concrete DateTime without reflecting over concrete processor types.

Enums

EcdisDisplayCategory

The four ECDIS standard display categories (S-100 Part 9 §11.7, S-101 §10.4). The viewer exposes these as a cross-spec selection and EcdisCategoryMapper resolves each to a per-spec display-mode id.

IceEggValueRole

Semantic role of a single value shown in a WMO / SIGRID-3 ice "egg code" diagram (S-411 Edition 1.2.1 Annex A — sea-ice / lake-ice concentration, stage of development, and form of ice). The role tells a renderer where the value belongs in the oval (or outside it) and lets object-information UIs attach the correct hover definition without re-deriving it from position.

NavigationalWarningStatus

Whether a navigational warning applies at a given time.

NavigationalWarningStatusReason

Why a navigational warning has the status StatusAt(NavigationalWarningInfo, DateTimeOffset) gives.

S101LoadItemKind

Kind of a single S101ExchangeSetLoadItem produced when planning how to load S-101 cells (and their sequential updates) from an exchange set.

TimeStepKind

What a time-varying dataset's time steps are.

TimeStepSelection

Which time step a dataset draws when the map time falls between steps.

Delegates

DatasetBytesMatcher

Decides, from a file's leading bytes and its extension, whether the file belongs to a particular product. Contributed per ProductRegistration by formats with a signature of their own (GRIB2 starts with GRIB, NetCDF-3 with CDF\x01), alongside the envelope matchers (DatasetIso8211Matcher, DatasetGmlMatcher, DatasetHdf5Matcher). DatasetPipelineFactory consults it for every file no envelope matcher claimed, whatever its extension, so a matcher must check the signature and treat the extension as a hint at most.

Matchers must be mutually exclusive: each recognizes only its own format's signature, so the result does not depend on the order registrations are enumerated.

DatasetDataOpener

Opens a dataset's bytes into the typed LoadedDatasetData payload a LoadedDataset carries. The caller owns stream and disposes it.

DatasetGmlMatcher

Decides, from the root element of a GML-encoded dataset, whether the document belongs to a particular product. Contributed per ProductRegistration so a GML product is recognized in the same place it is constructed, rather than in a central switch inside DatasetPipelineFactory. The factory reads the document's root once (see GmlRootInfo) and returns the spec of the first registered product whose matcher claims it. Returns true when the document belongs to the registering product.

Matchers must be mutually exclusive: each recognizes only its own product's namespace / local name / productIdentifier, so at most one matcher claims any valid single-product dataset. Because of this the result does not depend on the order registrations are enumerated (the registry is unordered). Behavior on a malformed document that declares more than one product's namespace is unspecified.

DatasetHdf5Matcher

Decides, from the root group of an HDF5 file, whether the file belongs to a particular product. Contributed per ProductRegistration so an HDF5 product is recognized in the same place it is constructed — the HDF5 sibling of DatasetIso8211Matcher and DatasetGmlMatcher. The factory opens the file once (see Hdf5RootInfo) and returns the spec of the first registered product whose matcher claims it; an HDF5 file nobody claims is unknown.

Matchers must be mutually exclusive: the S-100 coverage products each claim the files whose root productSpecification attribute declares them (S-100 Part 10c), so the result does not depend on the order registrations are enumerated.

DatasetIso8211Matcher

Decides, from the envelope of an ISO 8211-encoded dataset, whether the file belongs to a particular product. Contributed per ProductRegistration so an ISO 8211 product is recognized in the same place it is constructed, rather than in a central switch inside DatasetPipelineFactory. The factory reads the envelope once (see Iso8211RootInfo) and returns the spec of the first registered product whose matcher claims it. Returns true when the file belongs to the registering product.

This is the ISO 8211 sibling of DatasetGmlMatcher: the .000 extension is shared by legacy S-57, S-101, and S-401 (inland ENC), so the extension alone cannot route the file.

Matchers must be mutually exclusive: S-57 claims the files carrying the S-57-only DSPM field, while the S-100 products claim their own declared PRSP product identifier. At most one matcher claims any valid dataset, so the result does not depend on the order registrations are enumerated (the registry is unordered).

DatasetProcessorFromPath

Builds an IDatasetProcessor for a dataset on the local file system, given the shared services and the dataset path.

DatasetProcessorFromSource

Builds an IDatasetProcessor for a dataset stored inside an IAssetSource (e.g. an exchange-set folder or ZIP), given the shared services and the request.