πŸ“˜ ENCoreGIS user manual β€” bundled with the plugin. Source: ENCoreGIS_UserManual_v1.152.md

ENCoreGIS | pro

User Manual

ENC Β· Inland ENC Β· S-101 chart loader and S-58 / IENC auditor for QGIS

Version 1.60.0 Β· Step-by-step guide

Created by: Fabian de Pooter β€” Rijkswaterstaat CIV-IGA-DOA Β· teamScheepvaart


Who this manual is for You are a skilled GIS / cartographic user. This guide therefore spends little time on GIS fundamentals and most of its time on what is specific to ENCoreGIS: the staging engine, the dependency-free ISO 8211 reader, the density-adaptive sounding portrayal, the S-58 / Inland-ENC Auditor, and the Source Validator. A short QGIS refresher (the Layers panel and map navigation) is included so the workflow reads end-to-end, using the native QGIS icons so there is no ambiguity about which button is meant.

πŸ“· Screenshot placeholders are marked throughout like this. Replace them with live GUI captures during the documentation pass.


Table of contents

  1. What ENCoreGIS is
  2. The design philosophy (why it has its own engine)
  3. A short QGIS refresher β€” the Layers panel
  4. Opening and docking the plugin
  5. The core workflow, end to end
  6. Deep dive β€” the staging engine
  7. Deep dive β€” the ISO 8211 engine
  8. Deep dive β€” sounding zoom-level calculations
  9. The Auditor
  10. The Source Validator
  11. Troubleshooting
  12. The Chart Viewer (ECDIS view) β€” S-100
  13. Appendix β€” conventions & glossary
  14. Legal and disclaimers

1. What ENCoreGIS is

ENCoreGIS reads official electronic navigational chart exchange sets and turns them into styled, queryable QGIS layers β€” and audits them against the publishing standards. It handles three product families from one workflow:

FamilyStandardTypical use
ENCIHO S-57Maritime charts (NLHO and foreign HOs)
Inland ENCIENC / S-57 profileRijkswaterstaat inland fairway cells
S-101IHO S-101Next-generation charts (and hybrid sets)

It does two distinct jobs, reached from the same dock:

Everything is read with the plugin's own ISO 8211 / S-57 / S-101 engine β€” there is no hidden conversion step you cannot inspect (see Β§2 and Β§7).

The plugin runs on QGIS 3.x and QGIS 4.x (Qt5 and Qt6) from the same code β€” install it in either and everything in this manual applies unchanged.


2. The design philosophy

Three principles shape every screen you will use:

  1. No black box. The container format (ISO 8211) and the S-57 / S-101 record models are parsed by code shipped inside the plugin. The chart you load and the chart you audit come from the same source bytes β€” the Auditor reads the original .000 cells, not a re-exported derivative.
  2. The source is never modified. Reading, updating (.001/.002…) and portrayal all happen against a staged copy (or, when safe, in place but read-only). Your delivered exchange set is untouched.
  3. Cartographer-controlled portrayal. Depth contours, the safety contour, sounding density and light-sector length are your parameters, applied live β€” not baked-in decisions.
  4. Complete, predictable datamodel. Every loaded object layer carries its full attribute set as defined by the catalogue β€” not merely the attributes that happen to be populated. A LIGHTS layer always has SECTR1/SECTR2, a BOYLAT layer always has CATLAM/BOYSHP, and so on, even when a particular cell leaves them empty. This makes the schema stable across cells and across a whole exchange set, which is what makes the Source Validator's attribute mapping (and your own analysis) reliable. See Β§5.6 and Β§10.

3. A short QGIS refresher β€” the Layers panel

ENCoreGIS adds layers to your QGIS project; you then work with them using QGIS's own tools. If you live in QGIS daily, skip to Β§4.

3.1 The Layers panel

The Layers panel (left dock by default; toggle with Ctrl+1 or View β–Έ Panels β–Έ Layers) is the table of contents for your map. Each entry carries a visibility checkbox and a layer-type icon:

IconMeaning
Point layer (soundings, buoys, lights, beacons)
Line layer (coastline, depth contours, cables)
Polygon layer (depth areas, land areas, coverage)
Raster layer (background imagery, if any)

Panel toolbar buttons you will use most:

IconActionNotes
Add groupOrganise loaded ENC layers into a tidy group
Show all layersTurn every layer on
Hide all layersTurn every layer off
Expand allOpen every group / legend node
Collapse allTidy the tree back up
Filter legendShow only layers visible at the current scale

Draw order matters. Layers higher in the panel draw on top. ENCoreGIS loads in a sensible order (areas at the bottom, point hazards on top), but you can drag entries to fine-tune. Right-click any layer for Properties, Zoom to Layer, Open Attribute Table, and Remove.

πŸ“· Screenshot placeholder: Layers panel with a loaded ENC set, group expanded.

3.2 Map navigation

IconToolShortcut
Pandrag the map
Zoom inscroll up
Zoom outscroll down
Zoom fullCtrl+Shift+F
Zoom to layerright-click β–Έ Zoom to Layer
Identify featuresclick a feature to read its attributes
Open attribute tableinspect / sort / filter all attributes

Tip β€” soundings appear/disappear as you zoom. That is intentional, not a bug: ENCoreGIS assigns each sounding a zoomLevel and the style reveals them progressively (see Β§8).

3.3 The Data Source Manager (needed for the Source Validator)

Open Data Source Manager (Ctrl+L) is QGIS's hub for adding data β€” vector, raster, and (under WFS / OGC API – Features, WMS/WMTS, etc.) networked GIS services.

Prerequisite for the Source Validator: the authority register you want to validate against must already be a layer in your project. If it lives on a web service (WFS, OGC API – Features), subscribe to that service first in the native QGIS Data Source Manager and add the layer β€” only then will it appear in the validator's Source layer picker. See Β§10.

3.4 Saving your work

Save Project (Ctrl+S) stores your layer selection, styling and the Chart Control project variables. ENCoreGIS layers are built into a session GeoPackage; keep the project and that GeoPackage together if you move the work.


4. Opening and docking the plugin

  1. Install the plugin (ENCoreGIS.zip) via Plugins β–Έ Manage and Install Plugins β–Έ Install from ZIP, then enable ENCore GIS.
  2. Launch it from the toolbar button or Plugins β–Έ ENCore GIS β–Έ ENCore GIS.

The plugin opens as a dock widget. Like every QGIS panel it can be moved, floated and re-docked:

πŸ“· Screenshot placeholder: the dock floating on a second monitor.

The dock at a glance

Above the tabs, two controls are always visible because they drive everything below them:

Below them is the tab strip:

TabPurpose
Chart controlLive portrayal parameters (depths, soundings, sectors)
ChartsOne checkable row per winning chart edition
Object layersThe object layers available to load, grouped by usage band; plus Load CRS and Render mode
Process logThe plugin's live log, in-dock
AuditorS-58 / Inland-ENC conformance audit Β· S-100 Tier-1 validation (S-158)
Source validationCross-check against an authority register

5. The core workflow, end to end

The dock is laid out in the order you actually work. Follow it top to bottom.

ENC source β–Έ Scan for charts β–Έ (tick charts) β–Έ Scan for object layers
          β–Έ (tick layers) β–Έ set Chart control β–Έ set CRS + Render
          β–Έ Add Selected Layers to QGIS

5.1 Choose the ENC source

  1. Set the mode dropdown to Folder or Zip.
  2. Browse… to your exchange set:
    • Folder β€” the directory holding the .000 cells (and any .001/.002… updates, the CATALOG.031, and .TXT/picture files).
    • Zip β€” a single .zip exchange set.

The scanner is recursive: pointing at a parent folder that contains the exchange set deeper down is fine β€” it finds the cells. The same source feeds the loader, the Auditor and the Source Validator, so you set it once.

πŸ“· Screenshot placeholder: ENC source row with a folder selected.

5.2 Scan for charts

Press Scan for charts. The plugin stages the source (see Β§6) and lists, in the Charts tab, one row per chart β€” already reduced to the winning edition of each cell (highest base edition; broken update sequences are flagged in the Process log).

Why an edition winner? A delivery often contains several editions of the same cell. Loading them all would double-draw features. The scanner keeps the newest and tells you in the log which editions it dropped.

Charts tab listing the winning chart editions

The Charts tab after a scan β€” one checkable row per winning cell edition (here a hybrid set: S-101 101BE… cells alongside S-57 1R… cells). The footer reports the chart count and flags any structure issues found.

5.3 Scan for object layers

With your charts ticked, press Scan for object layers (enabled only after a chart scan). The Object layers tab fills with a tree grouped by usage band (overview β†’ berthing) β†’ the object layers present (DEPARE, SOUNDG, LIGHTS, BOYLAT, COALNE, …).

Object layers tree showing both S-57 and S-101

Collapsed overview of a hybrid source: S-57 usage bands (U8 β†’ U3) and S-101 scale bands (6 β†’ 3) are listed side by side. The footer shows the totals (here 256 object layers across 720 charts).

Object layers tree with a usage band expanded and hybrid layers

The same tree with U5 β€” Harbour expanded. Note the per-band Hybrid layers at the top β€” ENC Coverage [M_COVR + DSID] and Aids to Navigation [buoys + beacons + topmarks] β€” above the standard object classes grouped by theme (Skin of the Earth, Coastline & Shoreline, Navigation, Lights & Signals…). Load CRS and Render mode sit at the bottom of this tab.

5.4 Chart Control β€” live styling

The Chart control tab holds the portrayal parameters. They are live: changing one restyles already-loaded layers immediately (no reload), and they are written as QGIS project variables so styles and exported projects pick them up.

ControlWhat it does
Shallow (def. 4.0 m)Shallowest depth band β€” darkest blue below it
Safety (def. 6.0 m)Your vessel's safety contour; the key shallow/deep boundary; also drives sounding emphasis
Deep (def. 10.0 m)Deepest band β€” open water (white) above it
Sector distance (def. 1000 m)Drawn length of light-sector wedges (portrayal only, not a real range)
SoundingsShow all / Above safety / Below safety

The three contours stay ordered (shallow < safety < deep, with a 0.5 m gap): dialing one into another nudges its neighbour rather than blocking.

Chart control tab with depth spin boxes and Soundings combo

The Chart control tab: the Shallow / Safety / Deep contours, Sector distance, and the Soundings mode. The "live β€” restyles loaded layers" caption is a reminder that changes apply immediately to layers already on the map.

5.5 Load CRS and render mode

These two controls sit at the bottom of the Object layers tab β€” right where you load β€” because they apply to the next load only.

πŸ“· Screenshot placeholder: Load CRS selector + Render combo above the Load button.

5.6 Add the layers to QGIS

Press the big blue Add Selected Layers to QGIS. Two progress bars track the work: Layers (overall) and Step (within-layer processing, e.g. a DEPARE dissolve). When it finishes, the styled layers appear in your Layers panel in the chosen CRS.

Loaded ENC with depth shades, soundings and sector lights

A loaded set in QGIS with the Chart control tab open: depth shades, soundings, coastline and sector lights (66E, 66F) drawn as coloured arcs with their limit leg-lines. The Sector distance parameter sets the drawn radius of the wedges β€” adjust it live in the Chart control tab.

Watch the Process log tab (or QGIS Log Messages β–Έ ENCore GIS) for a running account: staging, per-layer feature counts, sounding zoomLevel distribution, and the reveal-scale curve.

Closing QGIS mid-load is safe (v1.58.0+). If you quit or unload while a load is running, the worker is cancelled and waited on cleanly β€” no crash.

Complete datamodel (v1.60.0+). Each loaded layer is created with the full attribute set the catalogue defines for that object class (the same permissible set the Auditor uses for conformance), unioned with any extra attribute present in the data. So the columns are identical and complete across every cell of the set β€” a LIGHTS layer always carries SECTR1/SECTR2 even if the first cell loaded has no sectored lights. Columns a given feature does not use are simply NULL. This is what keeps merged layers consistent and makes attribute mapping in the Source Validator dependable.


6. Deep dive β€” the staging engine

File: enc_scanner.py. This is the tailormade front-door that makes update-application correct and the source tamper-proof.

An S-57 exchange set is not a flat pile of files: each base cell (.000) may be followed by a sequence of update files (.001, .002, …) that must be applied in order, with no gaps, and each edition's fileset must sit together. Staging normalises this so the reader can apply updates correctly β€” without ever touching your delivered data.

Two paths, identical results in the log:

Guardrails built into staging:

Auditor staging is separate and leaner. The Auditor calls stage_for_audit, a single-exchange-set gate (no edition dedup, no per-cell DSID pass) so checks start fast, and it reads the staged .000 cells directly via OGR β€” i.e. it audits the source data, not the portrayal-processed GeoPackage. A source with more than one CATALOG.0xx is refused ("single exchange sets only"); with one it is audited in full; with none (loose cells) it is audited but exchange-set-structure checks are skipped and the report says so.


7. Deep dive β€” the ISO 8211 engine

File: iso8211/reader.py (container) with the record models in s57/ and s101/.

ENCoreGIS does not delegate the chart container to a third-party driver for its core reading: it ships a dependency-free ISO/IEC 8211:1994 reader. This is the shared layer S-57 (ENC / Inland ENC) and S-101 both sit on, and it is why "the chart you load and the chart you audit are the same bytes."

What it implements β€” the method of ISO 8211 (leader β†’ directory β†’ field area; the DDR data-descriptive fields driving DR decoding), restricted to the S-57 / S-101 subset:

Field terminators are honoured explicitly (FT = 0x1e, UT = 0x1f).

Why build it in-house?

  1. Auditability & licensing. The reader implements the method described by the standard but contains no text from the standard β€” clauses are cited by number only β€” so it is clean to ship under an open-source licence (the plugin is GPL-3.0-or-later).
  2. One source of truth. The same parsed records feed portrayal and the auditor, so a conformance finding always refers to the byte-level content you actually hold.
  3. Robustness. Edge cases that trip generic drivers β€” e.g. cartesian (header-only) records that yield zero array cycles β€” are handled so the read does not silently drop data.

On top of the container, the record models interpret the meaningful records: S-57 feature/spatial records; and for S-101 the FRID / ATTR / FASC / INAS records plus the feature-association model (e.g. structure ↔ equipment) that the hybrid AtoN and coverage layers rely on.


8. Deep dive β€” sounding zoom-level calculations

Function: _assign_zoom_levels in enc_loader.py.

Real surveys deliver soundings far denser than any single screen can show legibly. ENCoreGIS solves this the cartographer's way: it assigns every sounding an integer zoomLevel, and the SOUNDG style reveals them progressively as you zoom in. The guiding rule:

The shoalest (most dangerous) sounding in any neighbourhood is always kept. Decluttering never hides a hazard behind a deeper neighbour.

Loaded chart with soundings filtered to Below safety

Soundings on a loaded chart with Soundings = Below safety (Chart control): only depths shallower than the 10 m safety contour are drawn, decluttered by zoomLevel so the shoalest values survive. The depth shades follow the Shallow / Safety / Deep contours, and lateral buoys (F 47, F 47A, F 45A) and a sector light complete the portrayal.

The algorithm β€” greedy, shoalest-first thinning:

  1. Split by sign of Z. Positives (z β‰₯ 0, depths) and negatives (z < 0, drying heights) are thinned in separate pools. In both pools the smallest Z is the most dangerous (shallowest depth, or the largest drying height as the most-negative value).
  2. For each radius R (level L = 1, 2, 3, …): sort the still-unassigned survivors shoalest-first, then walk them keeping a spatial index of points accepted at this level. A candidate is accepted (zoomLevel = L) only if no already-accepted point lies within R; otherwise it survives to the next, smaller radius.
  3. Remainder (still unassigned after the last radius) β†’ zoomLevel = len(radii) + 1.

Lower zoomLevel = more important = shown at coarser zoom. Because each pass sorts shoalest-first, the shoalest point in any cluster always wins level 1.

Two ways to choose the radii:

Reveal curve (adaptive mode). Adaptive mode also writes two project variables the style consumes so soundings reveal smoothly with scale:

The distance math always runs in metres, on the layer's projected CRS (with a defensive transform to EPSG:3857 if a geographic CRS slips through) β€” another reason the Load CRS must be projected (Β§5.5).

The Process log prints the chosen spacing, radii, the per-level count distribution (L1:… L2:… …) and the reveal curve, so the decluttering is fully explainable.


9. The Auditor

Tab: Auditor. Engine: validation/.

The Auditor runs an exchange set against the conformance checks and produces an exportable per-check PASS / FAIL document. It uses the shared ENC source above the tabs (no separate picker) and stages it leanly (Β§6).

9.1 Running an audit

  1. Set the ENC source (Folder / Zip) above the tabs.
  2. Open the Auditor tab and start the audit.
  3. Results appear as a per-check list grouped by severity, each with a stable plain-language name; the S-58 number rides along as a citation.

Auditor tab with results grouped by severity

The Auditor tab: pick the Reader engine (the native ISO 8211 reader), choose which checks to run (All / None, or open Methodology…), tick Show passed to include passes, then Run audit. Results group by severity β€” Critical, Alert, Error, Warning β€” each expandable to the individual checks and findings.

πŸ“„ Example report. See a worked example audit report (opens in your browser). The data is fictive, but the layout is exactly what Export HTML produces: the per-cell coding/edition header, the Inland-ENC FC(s) used (selected per PRED), the overall verdict, and the per-check PASS / FAIL / ALERT lists grouped by severity.

9.2 How checks are chosen β€” standards, editions and hybrids

ENCoreGIS does not apply one flat ruleset. It identifies what each cell actually is and audits it against the right standard:

9.3 Severity tiers

TierMeaning
C β€” CriticalMust pass; failure breaches the minimum standard
E β€” ErrorA real conformance error
W β€” WarningShould be addressed
A β€” AlertA local advisory (not S-58); never fails the minimum standard

The Alert tier exists for guidance that is correct-but-not-mandatory. For example, the lowercase-metadata alert ("according to the standard this object should be encoded in capitals") defers to the FC: on an Inland product where the object is properly described in lowercase in the FC, it does not fire.

Geometry quality (QC1) β€” a local advisory for GIS-sourced production. ENC increasingly starts from GIS sources whose geometries are densified: a straight quay that needs 2 vertices arrives as 100 collinear ones. The QC1 check measures, per line/area feature, how many vertices a simplification pass at ~0.1 m (far below chart accuracy) would discard, and raises a Warning only when at least 20 vertices and more than half of the feature add no shape. It never affects the pass/fail verdict β€” it is advice to simplify at source, and the report names the worst offenders instead of nagging about natural coastline detail.

9.4 Exports

Reading false positives. Because the Auditor reports exactly which standard/FC/edition each cell was judged against, an apparent "failure" is often a product being correctly held to its own standard. Check the per-cell coding/edition header before treating a finding as a defect.

9.5 S-100 Tier-1 validation (S-158)

Engine: validation/s101.py, validation/s100.py, validation/s158.py. Catalogues: s158/S158_{101,102,104,111}.json.

The Auditor also validates the S-100 Tier-1 products against the official IHO S-158 validation-check catalogues. It routes automatically by what the source contains, and the Tests to run list changes to match:

Run audit then runs the checks for that product family.

ProductWhat is checkedHow it is read
S-101 ENCthe 456 S-158-101 checks (structure, feature/attribute conformance, metadata)our native ISO 8211 engine β€” never GDAL
S-100 corethe 412 S-158-100 Universal Model checks (S-100 Part 1/5/10a conformance) β€” the vector-applicable ones run on the S-101 cells and appear as a separate S-100 core sectionnative engine (feature-catalogue binding)
S-102 bathymetrythe 49 S-158-102 checksHDF5 via GDAL (multidimensional API)
S-104 water levelthe 96 S-158-104 checksHDF5 via GDAL
S-111 surface currentsthe 120 S-158-111 checksHDF5 via GDAL

The S-100 core checks are product-neutral (they apply to every S-100 product); today the ones that validate a vector product β€” features and attributes against the Feature Catalogue β€” run on the S-101 cells. For example, an attribute the Feature Catalogue does not permit on a feature (a date range on a Skin-of-the-Earth depth area, say) is reported here as a core 100_0001 finding.

Feature Catalogue edition. The feature/attribute-conformance checks for S-101 read the rules from the IHO S-101 Feature Catalogue. Both the 1.1.0 and 2.1.0 editions are bundled, and each cell is validated against the edition it was authored with β€” the Auditor picks it automatically from the cell's own feature types (many types were renamed between editions, e.g. BeaconCardinal β†’ CardinalBeacon, so binding a cell to the wrong edition would silently miss findings). Modern cells use FC 2.1.0; the older official test cells use 1.1.0.

The results tree lists every check available for the loaded products, grouped product β†’ severity β†’ check, each with a status:

Show passed governs the PASS and NOT-IMPLEMENTED rows, so the default view is the complete catalogue for each product.

The asterisk (\*) β€” provisional checks. A check marked with a trailing * is implemented and runs on every audit, but it has not yet been validated against an official IHO S-158 test dataset (github.com/iho-ohi). Treat its findings as provisional. This mirrors the Inland-ENC convention: a check is only un-starred once its behaviour is confirmed against the reference data. The HTML report repeats this caveat per product.

Calibration is under way. Using the official S-101 test datasets β€” the 32 S-101 1.2 cells plus the purpose-built S-158/V1 error datasets, which ship with expected-results reports β€” checks are being confirmed one family at a time. A check is un-starred only when its findings match the official expected-results exactly and it raises no findings on the conformant reference cells. The families cleared so far: the route/line orientation-vs-bearing checks (NavigationLine, Recommended Track, Recommended and Deep-Water Route centrelines); two Skin-of-the-Earth coverage checks; the mandatory meta-feature presence check (NavigationalSystemOfMarks); and date-range validity (fixed-range order, periodic-range identity). The Methodology document (Auditor β–Έ Methodology) shows the exact validated / provisional / not-implemented status of every check.

Export HTML writes the S-158 report β€” same layout as the ENC report, one section per product β€” and opens it in your browser automatically.


10. The Source Validator

Tab: Source validation. Engine: sourceval/.

Where the Auditor asks "is this chart internally conformant?", the Source Validator asks "does this chart agree with the authority's own register?" β€” e.g. the official AtoN / wreck / mark register. You build a recipe that pairs an ENC object class with a source layer and a matching rule, then run it.

10.1 Prerequisite β€” subscribe the source first

The source side is any point vector layer QGIS already knows. If your authority register is a web service, add it through the native QGIS Data Source Manager first (WFS / OGC API – Features / etc.), so it is a layer in your project. Only then does it appear in the validator's Source layer picker.

10.2 Build a recipe (points and lines)

In the Validation recipe box:

FieldMeaning
ENC object layerThe chart class to validate (use ↻ to refresh the list)
Source layerThe authority register layer (Browse… / ↻) β€” point or line geometry; picking a line layer makes it a line recipe automatically
Match bufferThe geometry-scrutiny dial, 0–50 m (default 10 m; down to 0.01 m for survey-grade data) β€” see below
Identity (optional)An ENC key and a Source key, to pair features by identifier rather than position alone
Attribute mappingsAdd / Remove rows mapping ENC attributes to source attributes; enumerated values bind on human-readable labels via the value-map dialog

Save the recipe with Save so it can be reused / version-controlled.

The match buffer is the scrutiny dial β€” low is exacter, high is looser. For point recipes it is the proximity within which two points are the same feature. For line recipes (quay walls, shoreline construction vs a source survey) it is the geometry tolerance the whole comparison scales from: the chart may deviate from the source by up to 2Γ— the buffer (the generalisation corridor) without a word β€” generalisation is the cartographer's job, and chart geometry is supposed to differ from the source within accuracy. Only an obvious difference is flagged (SRC.5): a contiguous stretch that leaves the corridor, or a worst deviation beyond 3Γ— the buffer. Shapes are compared densification-independently β€” a 200-vertex source line and its 2-vertex charted counterpart score identically when they coincide β€” so a GIS-dense source never false-flags a properly generalised chart.

Area recipes (a polygon source layer) work the same way, with one extra safeguard: the source polygon is first clipped to the chart's coverage (M_COVR), so a basin that continues past the cell border never reads as a disagreement. The verdict is the coverage-clipped symmetric difference (reported in hectares, with a zoom-to point on the largest disagreement lobe) plus shape overlap (IoU) β€” a surface check that cannot be fooled by equal areas of different shape, and that stays silent at cell borders by construction.

Where to find authoritative source geometry (NL): PDOK serves the national registries as open data β€” e.g. TOP10NL waterdeel_vlak (water polygons) and waterdeel_lijn via the OGC API / WFS, and the cm-accurate BGT for quay walls and revetments. Add them through the QGIS Data Source Manager and pick them as the source layer.

Why mapping is reliable. Because every loaded ENC layer carries its complete catalogue datamodel (Β§5.6), the attribute you want to map against (e.g. CATLAM, COLOUR, SECTR1) is always present in the dropdown, with the same name across every cell β€” whether or not a particular feature populates it. You are never blocked from building a mapping because an attribute column happened to be absent.

Source validation recipe with attribute mappings

A Validation recipe: the ENC object layer (here U5 Harbour β€” Aids to Navigation), the source layer, the Match buffer, an optional Identity pairing, and the Attribute mappings table (ENC attribute β†’ Source field, with Map values… for enumerated domains). Recipes can be Saved / Loaded and Executed; results and Known faults appear below.

πŸ“„ Example report. See a worked example source-validation report (opens in your browser; fictive data). It contains a sample of every finding type so you know what each looks like: - Test 1 β€” in source, not in chart (SRC.1, error): an AtoN in the register with no charted feature within the buffer. - Test 2 β€” in chart, not in source (SRC.2, warning): a charted buoy with no matching register entry. - Test 3 β€” value mismatch (SRC.3, error): co-located features whose COLOUR / CATLAM / TOPSHP disagree. - Test 4 β€” identity displaced (SRC.4, warning): same name, position beyond the match buffer.

It also shows the known-faults disclosure block that lists what your exclusions withheld from the comparison.

10.3 Run and read results

Running reconciles the chart features against the source within the buffer and reports matches, misses and attribute disagreements. As with the Auditor you can export the report and place a flags layer for on-map inspection. Known, accepted discrepancies can be excluded so they do not re-surface on the next run.


11. Troubleshooting

SymptomLikely cause / fix
Scan for object layers is greyed outRun Scan for charts first β€” the object scan reads the ticked charts.
A chart is missing after scanningA newer edition won the dedup, or its update sequence had a gap β€” check the Process log for kept edition … / update sequence broken.
Soundings vanish when I zoom outWorking as designed β€” density-adaptive zoomLevel reveal (Β§8). Zoom in, or set Soundings to Show all and zoom to a larger scale.
"Load CRS must be projected"The sounding/geometry math needs metres. Pick a projected CRS (EPSG:3857 or a local metric CRS), not lat/long.
Auditor refuses the sourceMore than one CATALOG.0xx was found β€” the Auditor takes single exchange sets only. Split the delivery.
Source layer not in the validator pickerAdd it via the native Data Source Manager first (subscribe the WFS/OGC service), then press ↻.
Cell seams visible between chartsUse Render β–Έ Beautiful for a seam-free (cleaned) load.
A light's sectors don't show / attribute column missingFixed in v1.60.0 β€” loaded layers now carry the complete catalogue datamodel, so SECTR1/SECTR2 (and every permissible attribute) are always present. If you still see it, you are on an older build; reload the plugin.
Pointing at a parent folder finds nothingIt should β€” the scanner is recursive. If it truly finds nothing, the folder has no .000 cells; check you unzipped the right delivery.

The Process log tab is your first stop for any unexpected result β€” every stage (staging, dedup, per-layer build, sounding ranking, reveal curve) writes a line there.


12. The Chart Viewer

The Chart Viewer is a fast, ECDIS-style window that renders your staged charts with the plugin's own S-52 / Inland portrayal, and interleaves the S-100 family (S-102 bathymetry, S-104 water level, S-111 surface currents) on top. It renders from pre-baked vector tiles, so panning and zooming stay smooth even over a whole delivery. NOT FOR NAVIGATION.

12.1 Opening the viewer

Tiling is a deliberate step, not automatic. After Scan for charts (Β§5.2):

  1. Tick the charts you want in the Charts tab (untick any you don't β€” the tiler honours the check boxes).
  2. Press Charts β†’ Tiles (the second button on the workflow bar). The set bakes in the background; a row appears in the Charts tab's tileset table. If the exact set is already a saved tileset it is reused with no re-bake.
  3. Press Load on that row to open the viewer. The dock jumps to Chart control, whose S-100 overlays tree drives the viewer live.

Re-scanning a saved set purely to run the extractor / validator / auditor does not re-bake β€” it costs nothing.

12.2 Navigating the view

ControlWhat it does
Pan / PickPan is the default. Pick click reports every object at the point (top β†’ bottom, with the AtoN parent/child fold). Double-click the title bar toggles full screen (Esc leaves it).
PaletteDay / Dusk / Night β€” recolours the depth bands, S-102 surface, and the tidal graph together.
Navigator / All layersNavigator hides metadata/administrative layers; the grouped Layers tree on the right toggles individual classes.
ScaleSCAMIN-tagged objects and per-cell compilation-scale detail appear / disappear as you cross their display scale.

12.3 S-102 bathymetry

When the scan finds an S-102 dataset beside the charts, the S-100 overlays tree enables Portray S-102. It shades the S-102 surface in the DEPARE depth-band colours (replacing DEPARE/DEPCNT/SOUNDG on that footprint), with two sub-options: an on-the-fly safety contour and thinned soundings from the grid. All three follow the Chart Control depth values (shallow / safety / deep / extra).

The derived contours are shoal-safe smoothed per IHO S-4: the depth grid is averaged and then clamped to the per-cell shoalest of (original, smoothed), so a smoothed contour can only move to the shallow (safe) side β€” it can never indicate deeper water than the source.

12.4 S-111 surface currents

Surface currents (S-111) draws the official current-arrow field: one arrow per grid point, rotated by direction, coloured and scaled across the nine standard speed bands. A depth selector picks the current layer (e.g. 0-5 m / 0-10 m / 0-15 m), and the time slider at the bottom of the viewer scrubs the record.

12.5 S-104 tidal engine

S-104 carries no portrayal by design β€” it is a water-level adjustment. Enabling Water level (S-104) makes the whole wet picture follow the tide for the selected time step:

While the engine is live the pick-report panel is replaced by a tidal graph. Switch to the Pick tool and click a spot on the chart to graph that point's tide: X is time, Y is water level above datum, a dashed line marks the datum (0 m), and a red vertical cursor sits at the time-slider's moment with a readout box showing the exact height (Β±X.XX m) for that spot and time. Dragging the time slider sweeps the cursor; the graph follows the Day/Dusk/Night palette. Switch the engine off to restore the pick report.

12.6 Inland notice marks

Inland-ENC notice marks (notmrk) are portrayed as the CEVNI / SIGNI sign boards. Above 1:10 000 each mark is a small square in its head-group colour (A/B/C red, D yellow, E blue); below that the actual sign board is drawn, rotated to the mark's orientation; below 1:2 500 marks within 10 m of each other β€” whether sharing one pole or standing on neighbouring poles β€” are fanned into a vertical signpost stack, each board at its own height on a thin leader line back to its true position, so closely-spaced signs never overlap.

12.7 Multi-producer coverage

Deliveries often overlap. The viewer resolves this from each cell's real data coverage (M_COVR CATCOV=1), not its rectangular extent:

12.8 Saved tilesets

The Charts tab's tileset table lists each baked set (name, size, created). Save copies the set β€” tiles plus any associated S-102 / S-104 / S-111 data β€” into a persistent library in your QGIS profile, so it re-opens instantly in a later session without re-baking. Load opens it in the viewer; Delete (with confirmation) removes the saved copy only β€” your original loaded charts are never touched.


13. Appendix

13.1 File / extension conventions

ExtensionMeaning
.000Base cell (S-57 / S-101)
.001, .002, …Sequential update files (must be gap-free)
CATALOG.031Exchange-set catalogue
.gpkgThe session GeoPackage ENCoreGIS builds loaded layers into

13.2 Mini-glossary

13.3 Version

This manual documents ENCoreGIS | pro v1.153.0, including the Chart Viewer, the S-100 family (S-102 / S-104 / S-111) and the S-158 validation of S-100 Tier-1 products in the Auditor (Β§9.5). Native interface icons are reproduced from QGIS (GNU GPL); the plugin is distributed under GPL-3.0-or-later.


Copyright Β© 2026 Wilhelmus Dingenus de Pooter. ENCoreGIS | pro is a private production (not a Rijkswaterstaat production) and is licensed under the GNU General Public License, version 3 or later (GPL-3.0-or-later). The full licence text ships with the plugin as LICENSE; third-party components and their licences are listed in THIRD_PARTY.md.

14.1 Disclaimers

14.2 Attributions

Built on QGIS (GPL-2.0-or-later) and GDAL / GEOS; implements IHO S-57, S-52, S-58 and S-4, and the S-100 family (S-101 / S-102 / S-104 / S-111), plus the IEHG Inland ENC catalogues. The inland notice-mark signs are derived from the UNECE SIGNI 2019 / CEVNI Annex-7 plates. See THIRD_PARTY.md for the full list and terms.

β€”

Kind regards from teamScheepvaart | Rijkswaterstaat CIV-IGA-DOA Sail the seven seas in peace