EncDotNet.S100.Core
0.16.0
dotnet add package EncDotNet.S100.Core --version 0.16.0
NuGet\Install-Package EncDotNet.S100.Core -Version 0.16.0
<PackageReference Include="EncDotNet.S100.Core" Version="0.16.0" />
<PackageVersion Include="EncDotNet.S100.Core" Version="0.16.0" />
<PackageReference Include="EncDotNet.S100.Core" />
paket add EncDotNet.S100.Core --version 0.16.0
#r "nuget: EncDotNet.S100.Core, 0.16.0"
#:package EncDotNet.S100.Core@0.16.0
#addin nuget:?package=EncDotNet.S100.Core&version=0.16.0
#tool nuget:?package=EncDotNet.S100.Core&version=0.16.0
EncDotNet.S100.Core
Core abstractions and pipeline framework for working with S-100 based nautical chart data.
Overview
This library provides the foundational types used across the EncDotNet.S100 libraries, including:
- Asset sources —
IAssetSourceabstraction for reading files from directories (FileSystemAssetSource) or ZIP archives (ZipAssetSource). - HDF5 abstractions —
IHdf5FileandIHdf5Groupinterfaces for reading HDF5 data without binding to a specific HDF5 library. - HDF5 reader exceptions —
S100DatasetSchemaException(a required attribute/group is missing or malformed) andS100DatasetNotSupportedException(the file uses an optional spec feature the reader doesn't yet implement). Both carry product, file, group path, spec reference, and a.WithFile(...)helper used by processor layers to attach the source file name.Hdf5RequiredAttributeExtensionsprovidesReadRequiredDoubleAttribute/ReadRequiredInt64Attribute/ReadRequiredStringAttributethat translate backend "missing attribute" failures into these typed exceptions. - Lua scripting abstractions —
ILuaEngineandILuaContextinterfaces for running sandboxed Lua portrayal scripts, plus theS100LuaHosthost API. - Coverage pipeline —
ICoverageSource,ICoverageRenderer<T>,CoveragePipeline, and supporting types (GridGeoreferencer,CoverageColorScheme,StyledCoverageLayer) for rendering gridded data.ICoveragePortrayalCatalogue.ResolveColorSchemereturnsCoverageColorScheme?; catalogues that only emit symbology (e.g. S-111's arrow-only portrayal) returnnulland the coverage renderers throw if invoked on a layer with a null scheme. - Vector pipeline —
IVectorSource,IVectorPortrayalCatalogue,VectorPipeline, and theDrawingInstructionhierarchy (AreaInstruction,LineInstruction,PointInstruction,TextInstruction) modelled directly on the S-100 Part 9 display list. Portrayal-rule execution is pluggable behindIVectorRuleExecutor(the engine-agnostic rule stage the pipeline runs and merges). Two engine siblings implement it:Pipelines.Vector.Xslt.XsltRuleExecutor(S-100 Part 9 §9.4 — owns FeatureXML acquisition, rule selection, XSLT transformation, and display-list assembly) andPipelines.Vector.Lua.LuaRuleExecutor(S-100 Part 9A).VectorPipelineitself is now reduced to running the built-in XSLT executor, appending the optional injected Lua executor's output, then applying the shared viewing-group / display-plane filter and priority sort; it no longer contains any XSLT-specific code. The Lua executor is a single product-agnostic executor driven entirely by injected seams (ILuaDataProvider/ILuaDataProviderFactoryhost bridge,LuaContextParameterBindingmariner→parameter mapping,IFeatureAnchorProvider, andIDrawingInstructionTransform), so S-101 and S-131 share one executor and supply only their product-specific seams.DrawingInstructionParseralso lives here. - Validation framework (
EncDotNet.S100.Validation) — spec-agnostic types for expressing normative-clause checks against the typed data models:IValidationRule<TModel>,ValidationRuleSet<TModel>(lint-pass runner that collects all findings and traps per-rule exceptions),ValidationFinding(rule id, severity, message, optionalGeoPosition/BoundingBox, related feature id),ValidationSeverity,ValidationContext(carriesReferenceTimeand an opaqueIServiceProvider?for Tier-3 cross-dataset rules),ValidationReport, and a fluentValidationRuleBuilder(RuleFor<T>("rule-id").Check(predicate, msg).Build()and.Yield(producer)for multi-finding rules). Per-spec rule packs live in the respectiveEncDotNet.S100.Datasets.Sxxx/Validation/folder rather than in separate projects. All fifteen supported products (S-101, S-102, S-104, S-111, S-122, S-124, S-125, S-127, S-128, S-129, S-131, S-201, S-411, S-421, plus S-57 via delegation to S-101) now ship a rule pack. For vector products the rule pack reads from a spec-aligned façade (the S-101 pattern isS101DatasetView/S101FeatureView/S101AttributeView) instead of the raw reader types, keeping the door open for a future typedDataModelprojection without breaking rule code. Coverage records expose aGroupPathfield (BathymetryCoverage.GroupPathon S-102,WaterLevelCoverage.GroupPathon S-104) that rule packs use as the per-coverageValidationFinding.RelatedFeatureId. Part9DisplayListReader— parses the Part 9 display-list XML produced by XSLT-based portrayal pipelines (S-124 / S-129 / S-421) into the same unifiedDrawingInstructionhierarchy that S-101's Lua pipeline emits, so a single renderer can consume both.- Portrayal-instruction caching (
Pipelines.Vector.Caching) — a cross-load cache of the post-pipelineDrawingInstructionlist so re-opening a previously-portrayed dataset can skip the (for S-101, multi-second MoonSharp Part 9A Lua) portrayal run.IPortrayalInstructionCache.GetOrCompute(key, factory)is implemented byInMemoryPortrayalInstructionCache(bounded LRU, holds list references) andDiskPortrayalInstructionCache(persists each list as a.dlistsidecar viaDrawingInstructionSerializer, with atomic temp+move writes, an LRU byte cap, and corruption /FormatVersion-mismatch treated as a miss so a stale or partial file never breaks a render). The caller is responsible for a key that fully captures every portrayal input;S101DatasetProcessordoes this with a content hash over the dataset bytes, the feature- and portrayal-catalogue content (including overrides and Lua rules), and the engine assembly versions. Caching at the post-pipeline boundary (rather than raw Lua-emitted strings) means a hit reproduces the exact list a fresh run would, without bypassing any later stage. - Shared types —
IPortrayalCatalogue,ICrsTransform,Viewport,MarinerSettings(S-100 Part 9 §4.2 mariner selections, including the four depth contours and S-101 portrayal toggles such asFourShades,SimplifiedSymbols,RadarOverlay,NationalLanguage),DepthUnitand theDepthFormattinghelper for locale-invariant depth conversion / formatting / parsing across metres, feet, fathoms, and combined fathoms-and-feet,BoundingBox,RgbaColor,ColorPalette. - Dynamic feature sources (
EncDotNet.S100.DynamicSources) — graphics-agnostic abstraction for push-driven point/track/area features (own-ship, AIS, route preview, sensor overlays, etc.) that sit alongside static datasets in the rendering surface:IDynamicFeatureSource(snapshot +Changedevent),DynamicFeature(geometry vocabulary reused from the static vector pipeline — sameGeometryTypeenum and(Latitude, Longitude)tuple convention),DynamicMotionsidecar for moving point features,DynamicVesselGeometrysidecar for vessel dimensions (length, beam, CCRP/GPS-antenna offsets per IEC 62388 — semantically matches AIS Type 5dimA/dimB/dimC/dimD),DynamicSourceMetadata(carriesDisplayNameandRendererKeyfor DI-keyed renderer resolution inEncDotNet.S100.Renderers.Mapsui),DynamicFeaturesChanged+DynamicSourceChangeKind, and the optionalDynamicFeatureTracker<TInbound>helper for adapters with aging semantics (AIS sleep/lost timers, stale-sensor styling). Seedocs/design/dynamic-feature-source.mdfor the full design rationale.
Installation
dotnet add package EncDotNet.S100.Core
| 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
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
-
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
NuGet packages (22)
Showing the top 5 NuGet packages that depend on EncDotNet.S100.Core:
| Package | Downloads |
|---|---|
|
EncDotNet.S100.Portrayals
Libraries for manipulating S-100 based nautical charts. |
|
|
EncDotNet.S100.Features
Libraries for manipulating S-100 based nautical charts. |
|
|
EncDotNet.S100.Renderers.Skia
Libraries for manipulating S-100 based nautical charts. |
|
|
EncDotNet.S100.Datasets.S101
Libraries for manipulating S-100 based nautical charts. |
|
|
EncDotNet.S100.Renderers.Mapsui
Libraries for manipulating S-100 based nautical charts. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.16.0 | 268 | 6/8/2026 |
| 0.15.0 | 186 | 6/6/2026 |
| 0.14.0 | 188 | 6/6/2026 |
| 0.13.0 | 247 | 6/3/2026 |
| 0.12.0 | 284 | 5/29/2026 |
| 0.11.0 | 282 | 5/19/2026 |
| 0.10.0 | 280 | 5/16/2026 |
| 0.9.0 | 285 | 5/15/2026 |
| 0.8.0 | 288 | 5/13/2026 |
| 0.7.0 | 288 | 5/12/2026 |
| 0.6.0 | 301 | 5/8/2026 |
| 0.5.0 | 265 | 5/4/2026 |
| 0.4.0 | 255 | 5/1/2026 |
| 0.3.0 | 246 | 4/29/2026 |
| 0.2.0 | 173 | 4/14/2026 |
| 0.1.2 | 166 | 4/11/2026 |
| 0.1.1 | 159 | 4/11/2026 |