EncDotNet.S100.Datasets.S101 0.16.0

dotnet add package EncDotNet.S100.Datasets.S101 --version 0.16.0
                    
NuGet\Install-Package EncDotNet.S100.Datasets.S101 -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.S101" 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.S101" Version="0.16.0" />
                    
Directory.Packages.props
<PackageReference Include="EncDotNet.S100.Datasets.S101" />
                    
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.S101 --version 0.16.0
                    
#r "nuget: EncDotNet.S100.Datasets.S101, 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.S101@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.S101&version=0.16.0
                    
Install as a Cake Addin
#tool nuget:?package=EncDotNet.S100.Datasets.S101&version=0.16.0
                    
Install as a Cake Tool

EncDotNet.S100.Datasets.S101

Reader and Lua portrayal pipeline for S-101 Electronic Navigational Chart (ENC) datasets.

Overview

This library reads S-101 datasets encoded in ISO 8211 format and executes the S-100 Part 9A Lua portrayal pipeline to produce drawing instructions. Key types include:

  • S101Dataset — parsed ENC dataset containing features from ISO 8211 records.
  • S101Document, S101DocumentReader — low-level ISO 8211 record parsing.
  • S101LuaRuleExecutorILuaVectorRuleExecutor implementation that wraps the product-agnostic LuaRuleExecutor from EncDotNet.S100.Core, supplying the S-101 seams: the S101LuaDataProvider host bridge, the mariner→context-parameter bindings, a feature-anchor provider for augmented line tessellation, and the SAFCON contour-label transform.
  • S101PortrayalCatalogueIVectorPortrayalCatalogue implementation that loads XSLT/Lua rules, symbols, line styles, area fills, and color palettes.
  • S101VectorSourceIVectorSource implementation for the vector pipeline.
  • DrawingInstructionParser (in EncDotNet.S100.Core) — parses the semicolon-separated key:value strings emitted by the Lua portrayal pipeline into the unified DrawingInstruction hierarchy. Honours text alignment (TextAlignHorizontal / TextAlignVertical), mm offsets (LocalOffset), foreground / background colour with optional transparency, line placement, and the AugmentedPoint:GeographicCRS,… anchor override used by SOUNDG / DepthNoBottomFound rules. Augmented line geometry (AugmentedRay, ArcByRadius, AugmentedPath) is fully supported — sector-light limit lines and arcs, directional-light rays, and all-around-light circles are tessellated into polylines and carried through LineInstruction.CoordinatesOverride to the renderer.

Bundled-adapter Lua patches

content/S101/pc/ stays byte-identical to the upstream IHO S-101 portrayal catalogue. When upstream Lua has a defect that breaks real-world cells, the S101LuaDataProvider ships a small adapter patch (via its ordered PostLoadScripts) that monkey-patches the offending global rather than editing the bundled catalogue. Current patches:

  • contains — restores a missing global the upstream catalogue relies on without defining.
  • GetFeatureName / PortrayFeatureName — upstream gates name selection on both name AND nameUsage, but the S-101 FC declares nameUsage with multiplicity 0..1. Cells that omit it are FC-conformant but rendered nameless. The patch treats a missing nameUsage as the default 1 while preserving the original language-matching semantics, so area / point feature names (BuiltUpArea, SeaAreaNamedWaterArea, churches, …) emit correctly.

If upstream fixes a defect, the corresponding patch is dropped.

Legacy feature-name compatibility

The bundled Portrayal Catalogue is S-101 Edition 2.0.0, whose Lua rule modules use the 2.0.0 (word-reversed) feature class names — LateralBuoy.lua defining function LateralBuoy, dispatched by main.lua via require(feature.Code) then _G[feature.Code](...). Datasets authored against an earlier edition of the S-101 Feature Catalogue report the pre-2.0.0 names (BuoyLateral, BeaconCardinal, MooringWarpingFacility, …). Those names match no 2.0.0 rule module, so the dispatcher's require fails and the feature falls back to DEFAULT (QUESMRK1) symbology.

S101LegacyFeatureNames.Normalize maps the legacy class names to their 2.0.0 equivalents so the correct rule runs. Because simple attribute names are stable across these editions, only the feature class name needs remapping. The shim is applied only at the portrayal boundary (S101LuaDataProvider.HostFeatureGetCode); feature names are left as-authored everywhere else (document reader, vector source, validation, info panels).

MooringWarpingFacility was structurally removed in 2.0.0, so it is mapped conditionally on categoryOfMooringWarpingFacility (dolphin → Dolphin, bollard → Bollard, post/pile → Pile, mooring buoy → MooringBuoy); categories without a clean 2.0.0 equivalent are left unchanged and stay on DEFAULT. These conditional targets are approximations — only the class name is aliased, not the attributes the 2.0.0 rule reads — so symbology may be generic, and a target rule that rejects the feature's geometric primitive simply errors inside the dispatcher's pcall and falls back to DEFAULT (no regression versus today).

Validation

A bundled rule pack (EncDotNet.S100.Datasets.S101.Validation.S101DatasetRules.Default) evaluates a typed view over an S101Document against the S-101 Edition 2.0.0 checklist and emits a ValidationReport of findings. The view types under Validation/ (S101DatasetView, S101FeatureView, S101AttributeView) are the spec-aligned façade the pack reads from — they keep rule code decoupled from the raw S101FeatureRecord shape so a future typed DataModel projection can replace them without rewriting the rules.

The pack is invoked automatically by S101DatasetProcessor.Validate() and can also be run directly:

var view = S101DatasetView.From(document, decoder);
var report = S101DatasetRules.Default.Run(view);
Rule id Severity Checks
S101-R-1.1 Error Feature type code resolves to an FC acronym.
S101-R-1.2 Error Attribute code resolves AND is bound to the host feature class (walks the FC SuperType chain).
S101-R-2.1 Error FOID uniqueness — one finding per duplicate, with the first occurrence as anchor.
S101-R-3.1 Error Spatial associations resolve into the correct record dictionary (point, curve, surface, composite curve).
S101-R-3.2 Error Surface ring closure plus rejection of rings with fewer than three distinct points.
S101-R-3.3 Error Composite curve continuity (end of segment N equals start of segment N+1).
S101-R-4.1 Warning Enumerated attribute values fall in the FC-declared domain.
S101-R-5.1 Warning Resolved (lat, lon) coordinates lie in WGS-84 ranges.
S101-R-5.2 Warning Information associations resolve to a known information record.
S101-PROJ-PARSE Placeholder reserving the namespace for future parser-diagnostic findings; body intentionally empty.

The same S101DatasetRules.Default entry point is reused by S-57 post-translation delegation (see EncDotNet.S100.Datasets.S57), with findings rebadged as S101-as-S57/<rule-id> so the user can tell which layer of the pipeline a problem came from.

Record types

S101DocumentReader parses the following ISO 8211 record types:

Tag Record type Notes
DSID Dataset identification Version, edition, product spec
DSSI Dataset structure info COMF / SOMF scaling factors
PRID Point Single 2D coordinate
MRID MultiPoint 3D sounding arrays via C3IL field (VCID leader + YCOO/XCOO/ZCOO repeating group)
CRID Curve segment Ordered coordinate sequences
CCID Composite curve References to curve segments
SRID Surface Ring-based polygon geometry
FRID Feature Object class, attributes, spatial associations
IRID Information type Metadata records referenced by features

Installation

dotnet add package EncDotNet.S100.Datasets.S101
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 (4)

Showing the top 4 NuGet packages that depend on EncDotNet.S100.Datasets.S101:

Package Downloads
EncDotNet.S100.Renderers.Mapsui

Libraries for manipulating S-100 based nautical charts.

EncDotNet.S100.Datasets.S57

Libraries for manipulating S-100 based nautical charts.

EncDotNet.S100.Datasets.S131

Libraries for manipulating S-100 based nautical charts.

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 129 6/8/2026
0.15.0 77 6/6/2026
0.14.0 76 6/6/2026
0.13.0 110 6/3/2026
0.12.0 114 5/29/2026
0.11.0 119 5/19/2026
0.10.0 119 5/16/2026
0.9.0 110 5/15/2026
0.8.0 117 5/13/2026
0.7.0 116 5/12/2026
0.6.0 121 5/8/2026
0.5.0 114 5/4/2026
0.4.0 116 5/1/2026
0.3.0 115 4/29/2026
0.2.0 117 4/14/2026
0.1.2 116 4/11/2026
0.1.1 108 4/11/2026