EncDotNet.S100
0.16.0
dotnet add package EncDotNet.S100 --version 0.16.0
NuGet\Install-Package EncDotNet.S100 -Version 0.16.0
<PackageReference Include="EncDotNet.S100" Version="0.16.0" />
<PackageVersion Include="EncDotNet.S100" Version="0.16.0" />
<PackageReference Include="EncDotNet.S100" />
paket add EncDotNet.S100 --version 0.16.0
#r "nuget: EncDotNet.S100, 0.16.0"
#:package EncDotNet.S100@0.16.0
#addin nuget:?package=EncDotNet.S100&version=0.16.0
#tool nuget:?package=EncDotNet.S100&version=0.16.0
EncDotNet.S100
The batteries-included on-ramp for IHO S-100 nautical data. Open a dataset, read
its features, and render it to an image without hand-wiring feature or portrayal
catalogues — the official catalogues bundled in
EncDotNet.S100.Specifications are
discovered and wired for you.
Install
dotnet add package EncDotNet.S100
That single package transitively brings in the readers, the pipeline factory, the Lua/MoonSharp portrayal engine, the bundled specifications, and the headless Skia renderer.
Linux arm64 native dependency
If you publish a linux-arm64 application that uses this facade (or the Skia
renderer directly), reference the self-contained SkiaSharp native in your
executable project:
<ItemGroup>
<PackageReference Include="SkiaSharp.NativeAssets.Linux" ExcludeAssets="all" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" />
</ItemGroup>
The regular SkiaSharp.NativeAssets.Linux arm64 libSkiaSharp.so declares
undefined uuid_* / FT_Get_BDF_Property symbols that abort the process once
fontconfig/freetype load on a normal arm64 desktop or container. The
…NoDependencies build is self-contained and renders on both x64 and arm64.
Native RID asset selection belongs to the final executable, so this package does
not force the swap on your behalf. See
issue #23.
Quickstart — render a dataset to PNG
using EncDotNet.S100;
using var dataset = S100Dataset.Open("chart.000"); // detects the product spec
using var renderer = new PngS100DatasetRenderer();
byte[] png = await renderer.RenderAsync(dataset); // bundled FC + PC
File.WriteAllBytes("out.png", png);
RenderAsync(dataset) is the one-call path: it uses the bundled feature and
portrayal catalogues for the dataset's product specification.
Render options
using EncDotNet.S100.Pipelines; // PaletteType
byte[] png = await renderer.RenderAsync(dataset, new S100RendererOptions
{
Width = 2048,
Height = 1536,
Palette = PaletteType.Night,
SymbolScale = 1.25,
TimeStep = 0, // time-aware products (S-104, S-111)
});
Read features
Feature access lives on the feature catalogue, because decoding a feature's type name and attributes presupposes one:
var fc = S100FeatureCatalogue.Bundled(dataset.Spec.Name);
foreach (var summary in fc.EnumerateFeatures(dataset))
Console.WriteLine($"{summary.FeatureRef}: {summary.FeatureType}");
FeatureInfo? info = fc.GetFeature(dataset, someFeatureRef);
Custom catalogues
A layer pairs a dataset with the catalogues used to interpret and portray it. Supply your own to override the bundled defaults:
var layer = new S100Layer
{
Dataset = dataset,
PortrayalCatalogue = S100PortrayalCatalogue.FromAssetSource(myPortrayalSource),
FeatureCatalogue = S100FeatureCatalogue.FromStream(myFeatureCatalogueXml),
};
byte[] png = await renderer.RenderAsync(layer);
When FeatureCatalogue / PortrayalCatalogue are left null, the bundled
catalogue for the dataset's product specification is used.
Layering — the grow-up story
S100Layer is the composable unit, so growing from a single chart to a stacked
view (e.g. an S-101 chart under S-102 bathymetry and S-411 sea ice) is "add more
layers." The single-layer render path ships today; an additive multi-layer
composite overload (shared viewport + S-98 paint ordering) is a planned
fast-follow and does not change this API shape.
Renderers are generic in their result
IS100DatasetRenderer<TResult> is parameterised on the result type.
PngS100DatasetRenderer implements IS100DatasetRenderer<byte[]> (PNG bytes).
The same abstraction extends to other encoders (JPEG/WebP), to in-memory bitmaps,
and — once the Mapsui decoupling
(#189) lands — to a
Mapsui layer renderer, without changing the contract.
Mapsui note. The public API of this package is Mapsui-free (it returns
byte[],FeatureSummary, andFeatureInfo— never Mapsui types). Mapsui is currently a transitive dependency of the underlying pipeline; when #189 lands it drops out with no change to this package's API.
À-la-carte (advanced)
This facade is purely additive. Advanced users who need full control can keep
using a per-spec reader with an injected catalogue, or drive
DatasetPipelineFactory
(EncDotNet.S100.Datasets.Pipelines)
directly.
Reuse and disposal
S100DatasetandPngS100DatasetRendererareIDisposable; dispose them.- A
PngS100DatasetRendererinstance may render many datasets sequentially; it caches the bundled pipeline host so repeated renders reuse warmed catalogue parse caches. Concurrent use of one instance is not supported.
| 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.Crs.ProjNet (>= 0.16.0)
- EncDotNet.S100.Datasets.Pipelines (>= 0.16.0)
- EncDotNet.S100.Features (>= 0.16.0)
- EncDotNet.S100.Portrayals (>= 0.16.0)
- EncDotNet.S100.Scripting.MoonSharp (>= 0.16.0)
- EncDotNet.S100.Specifications (>= 0.16.0)
- SkiaSharp (>= 3.119.1)
-
net8.0
- EncDotNet.S100.Core (>= 0.16.0)
- EncDotNet.S100.Crs.ProjNet (>= 0.16.0)
- EncDotNet.S100.Datasets.Pipelines (>= 0.16.0)
- EncDotNet.S100.Features (>= 0.16.0)
- EncDotNet.S100.Portrayals (>= 0.16.0)
- EncDotNet.S100.Scripting.MoonSharp (>= 0.16.0)
- EncDotNet.S100.Specifications (>= 0.16.0)
- SkiaSharp (>= 3.119.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.16.0 | 86 | 6/8/2026 |