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.
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:
| Family | Standard | Typical use |
|---|---|---|
| ENC | IHO S-57 | Maritime charts (NLHO and foreign HOs) |
| Inland ENC | IENC / S-57 profile | Rijkswaterstaat inland fairway cells |
| S-101 | IHO S-101 | Next-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.
Three principles shape every screen you will use:
.000 cells, not a re-exported derivative.
.001/.002β¦) and portrayal all happen against a staged copy (or, when safe, in place but read-only). Your delivered exchange set is untouched.
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.
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.
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:
| Icon | Meaning |
|---|---|
| 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:
| Icon | Action | Notes |
|---|---|---|
| Add group | Organise loaded ENC layers into a tidy group | |
| Show all layers | Turn every layer on | |
| Hide all layers | Turn every layer off | |
| Expand all | Open every group / legend node | |
| Collapse all | Tidy the tree back up | |
| Filter legend | Show 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.
| Icon | Tool | Shortcut |
|---|---|---|
| Pan | drag the map | |
| Zoom in | scroll up | |
| Zoom out | scroll down | |
| Zoom full | Ctrl+Shift+F | |
| Zoom to layer | right-click βΈ Zoom to Layer | |
| Identify features | click a feature to read its attributes | |
| Open attribute table | inspect / sort / filter all attributes |
Tip β soundings appear/disappear as you zoom. That is intentional, not a bug: ENCoreGIS assigns each sounding a
zoomLeveland the style reveals them progressively (see Β§8).
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.
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.
ENCoreGIS.zip) via Plugins βΈ Manage and Install Plugins βΈ Install from ZIP, then enable 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.
Above the tabs, two controls are always visible because they drive everything below them:
Below them is the tab strip:
| Tab | Purpose |
|---|---|
| Chart control | Live portrayal parameters (depths, soundings, sectors) |
| Charts | One checkable row per winning chart edition |
| Object layers | The object layers available to load, grouped by usage band; plus Load CRS and Render mode |
| Process log | The plugin's live log, in-dock |
| Auditor | S-58 / Inland-ENC conformance audit Β· S-100 Tier-1 validation (S-158) |
| Source validation | Cross-check against an authority register |
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
.000 cells (and any .001/.002β¦ updates, the CATALOG.031, and .TXT/picture files).
.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.
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.
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.
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, β¦).
Ctrl/Shift works in the tree.
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).
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.
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.
| Control | What 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) |
| Soundings | Show 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.
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.
These two controls sit at the bottom of the Object layers tab β right where you load β because they apply to the next load only.
zoomLevel still run β they are needed to draw soundings at all.)
π· Screenshot placeholder: Load CRS selector + Render combo above the Load button.
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.
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
LIGHTSlayer always carriesSECTR1/SECTR2even if the first cell loaded has no sectored lights. Columns a given feature does not use are simplyNULL. This is what keeps merged layers consistent and makes attribute mapping in the Source Validator dependable.
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:
[stage] clean folder β loading in place, no copy needed.
.zip source, or any folder with a broken update sequence (a missing .00n) or multiple editions of a cell, is copied into a private temporary staging directory. There the plugin:
update sequence broken β missing β¦).
Guardrails built into staging:
MAX_STAGE_BYTES, 512 MiB) counted as bytes stream, so a malicious archive cannot exhaust the disk.
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.
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?
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.
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.
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:
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).
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.
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:
[500, 250, 125] m.
_median_nn_distance, sampled for speed on huge sets). Dense surveys get tighter radii, sparse ones looser, automatically.
Reveal curve (adaptive mode). Adaptive mode also writes two project variables the style consumes so soundings reveal smoothly with scale:
enc_soundg_start = spacing Γ start_factor (the scale at which level-1 soundings first appear), and
enc_soundg_ratio, solved so that the highest level actually present lands exactly on the reveal floor (e.g. everything visible by 1:5000): start Γ ratio^(L_max β 1) = reveal_floor.
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.
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).
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.
ENCoreGIS does not apply one flat ruleset. It identifies what each cell actually is and audits it against the right standard:
PRSP = 1) vs Inland ENC (PRSP = 10). Only Inland cells are validated against the Inland ENC Feature Catalogue (FC); maritime cells are not force-fitted to inland rules.
| Tier | Meaning |
|---|---|
| C β Critical | Must pass; failure breaches the minimum standard |
| E β Error | A real conformance error |
| W β Warning | Should be addressed |
| A β Alert | A 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.
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.
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.
| Product | What is checked | How it is read |
|---|---|---|
| S-101 ENC | the 456 S-158-101 checks (structure, feature/attribute conformance, metadata) | our native ISO 8211 engine β never GDAL |
| S-100 core | the 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 section | native engine (feature-catalogue binding) |
| S-102 bathymetry | the 49 S-158-102 checks | HDF5 via GDAL (multidimensional API) |
| S-104 water level | the 96 S-158-104 checks | HDF5 via GDAL |
| S-111 surface currents | the 120 S-158-111 checks | HDF5 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.
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.
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.
In the Validation recipe box:
| Field | Meaning |
|---|---|
| ENC object layer | The chart class to validate (use β» to refresh the list) |
| Source layer | The authority register layer (Browseβ¦ / β») β point or line geometry; picking a line layer makes it a line recipe automatically |
| Match buffer | The 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 mappings | Add / 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) andwaterdeel_lijnvia 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.
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/TOPSHPdisagree. - 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.
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.
| Symptom | Likely cause / fix |
|---|---|
| Scan for object layers is greyed out | Run Scan for charts first β the object scan reads the ticked charts. |
| A chart is missing after scanning | A 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 out | Working 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 source | More than one CATALOG.0xx was found β the Auditor takes single exchange sets only. Split the delivery. |
| Source layer not in the validator picker | Add it via the native Data Source Manager first (subscribe the WFS/OGC service), then press β». |
| Cell seams visible between charts | Use Render βΈ Beautiful for a seam-free (cleaned) load. |
| A light's sectors don't show / attribute column missing | Fixed 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 nothing | It 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.
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.
Tiling is a deliberate step, not automatic. After Scan for charts (Β§5.2):
Re-scanning a saved set purely to run the extractor / validator / auditor does not re-bake β it costs nothing.
| Control | What it does |
|---|---|
| Pan / Pick | Pan 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). |
| Palette | Day / Dusk / Night β recolours the depth bands, S-102 surface, and the tidal graph together. |
| Navigator / All layers | Navigator hides metadata/administrative layers; the grouped Layers tree on the right toggles individual classes. |
| Scale | SCAMIN-tagged objects and per-cell compilation-scale detail appear / disappear as you cross their display scale. |
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.
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.
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.
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.
Deliveries often overlap. The viewer resolves this from each cell's real data coverage (M_COVR CATCOV=1), not its rectangular extent:
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.
| Extension | Meaning |
|---|---|
.000 | Base cell (S-57 / S-101) |
.001, .002, β¦ | Sequential update files (must be gap-free) |
CATALOG.031 | Exchange-set catalogue |
.gpkg | The session GeoPackage ENCoreGIS builds loaded layers into |
.000 plus its updates).
1) from Inland ENC (10).
1 = data available (the true footprint), 2 = no data (a hole in the rectangular cell); the basis of the viewer's multi-scale / multi-producer compositing.
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.
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