Czechia pilot: RÚIAN mask + CORINE cover (prove the add-a-country mechanism) #215

Open
opened 2026-08-24 17:04:01 +00:00 by art-bot · 0 comments
Collaborator

Gated on #212 (the catalogue). The smallest footprint that proves Czechia can be added:
the country_mask partition plus cover.

Why Czechia should be the first pilot of the four

Everything it needs is anonymous, verified live, and needs no importer provider:

  • Mask: https://services.cuzk.gov.cz/wfs/inspire-au-wfs.asp (RÚIAN INSPIRE
    Administrative Units) → au:AdministrativeUnit, 250 units, nationalCode = 1 is the
    state polygon. Watch the size: 3 features came back as 4.1 MB of GML, so the state
    geometry is heavy.
  • Cover: CORINE CLC 2018 through the existing clms: provider — the identity mapping
    (R116, the conf/fi/03-cover.yaml pattern), no semantic judgement, no new vocabulary,
    no style change. NUTS0 is CZ, the same as the ISO code, so the Greece
    EL-vs-GR rejection does not apply here.
  • CRS is S-JTSK / Krovak East North (EPSG:5514); the ČÚZK services reproject, but check
    what actually arrives rather than assuming.
  • The cover schema is unverifiable until the file lands. Greece's delivered GeoPackage
    had layer U2018_CLC2018_V2020_20u1 and column Code_18, which the staging loader
    lowercases to code_18. Verify against the delivered file and the live staging table on
    the first import and write the real names into the config.

The three things the Greece pilot got wrong — do not repeat them

  • The mask is the country's own outline and it does NOT drive the world carve. Build it
    from the national boundary source and stop. conf/world.yaml carves Natural Earth with
    Natural Earth's own admin-0 polygons and reads only the country code from
    map_country_mask_0, never its geometry (R144). Do not extend the mask over water to
    "fix" grey background land at a coast — Greece burned two rounds on exactly that, and the
    cause was in conf/world.yaml and applied to every country (#184, #186).
  • Never verify the carve by intersecting background land with the mask. That check is
    tautologically true — background_land is Natural Earth minus the carve — so it passes
    for any mask at all, including an empty one. The carve's real checks are R144/R145/R146 on
    conf/world.yaml; a country config does not need its own.
  • R34's reference is the country's LAND, not its mask (R143). Reference the land staging
    table explicitly, even when the mask happens to be the same geometry, or the check
    silently stops meaning anything the day that changes.

Deliverables

  1. conf/<cc>/ per R17: base.yaml, downloads.yaml, staging.yaml, acceptance.yaml,
    01-country_mask.yaml, 02-cover.yaml (build order is lexical), country: <cc> (R16).
  2. A Makefile import-<cc> target chaining import-world (R107) and a fetch-<cc> path
    through the importer's declared-downloads route (R10).
  3. Acceptance tests in the same commit: R119 (mask partition populated, the
    conf/fi/01-country_mask.yaml pattern), R34 (cover gapless against the land table,
    1% budget), R22 (coarse-tier vocabulary equals the level-1 rollup tier), R120 (no NULL
    cover_class), and a decoded tile (importer tiles --check).
  4. Paste the make acceptance tally in the PR — not ad-hoc SQL (AGENTS.md).

Verify against the live database before committing: partitions at every zoom, row counts,
NULLs in the columns that matter, a decoded tile.

Gated on #212 (the catalogue). The smallest footprint that proves Czechia can be added: the `country_mask` partition plus `cover`. ## Why Czechia should be the first pilot of the four Everything it needs is anonymous, verified live, and needs no importer provider: - **Mask**: `https://services.cuzk.gov.cz/wfs/inspire-au-wfs.asp` (RÚIAN INSPIRE Administrative Units) → `au:AdministrativeUnit`, 250 units, `nationalCode = 1` is the state polygon. Watch the size: 3 features came back as 4.1 MB of GML, so the state geometry is heavy. - **Cover**: CORINE CLC 2018 through the existing `clms:` provider — the identity mapping (R116, the `conf/fi/03-cover.yaml` pattern), no semantic judgement, no new vocabulary, no style change. **NUTS0 is `CZ`**, the same as the ISO code, so the Greece `EL`-vs-`GR` rejection does not apply here. - CRS is S-JTSK / Krovak East North (**EPSG:5514**); the ČÚZK services reproject, but check what actually arrives rather than assuming. - **The cover schema is unverifiable until the file lands.** Greece's delivered GeoPackage had layer `U2018_CLC2018_V2020_20u1` and column `Code_18`, which the staging loader lowercases to `code_18`. Verify against the delivered file and the live staging table on the first import and write the real names into the config. ## The three things the Greece pilot got wrong — do not repeat them - **The mask is the country's own outline and it does NOT drive the world carve.** Build it from the national boundary source and stop. `conf/world.yaml` carves Natural Earth with Natural Earth's *own* admin-0 polygons and reads only the `country` code from `map_country_mask_0`, never its geometry (R144). Do not extend the mask over water to "fix" grey background land at a coast — Greece burned two rounds on exactly that, and the cause was in `conf/world.yaml` and applied to every country (#184, #186). - **Never verify the carve by intersecting background land with the mask.** That check is tautologically true — `background_land` is Natural Earth *minus* the carve — so it passes for any mask at all, including an empty one. The carve's real checks are R144/R145/R146 on `conf/world.yaml`; a country config does not need its own. - **R34's reference is the country's LAND, not its mask** (R143). Reference the land staging table explicitly, even when the mask happens to be the same geometry, or the check silently stops meaning anything the day that changes. ## Deliverables 1. `conf/<cc>/` per R17: `base.yaml`, `downloads.yaml`, `staging.yaml`, `acceptance.yaml`, `01-country_mask.yaml`, `02-cover.yaml` (build order is lexical), `country: <cc>` (R16). 2. A Makefile `import-<cc>` target chaining `import-world` (R107) and a `fetch-<cc>` path through the importer's declared-downloads route (R10). 3. Acceptance tests **in the same commit**: R119 (mask partition populated, the `conf/fi/01-country_mask.yaml` pattern), R34 (cover gapless against the *land* table, 1% budget), R22 (coarse-tier vocabulary equals the level-1 rollup tier), R120 (no NULL `cover_class`), and a decoded tile (`importer tiles --check`). 4. Paste the `make acceptance` tally in the PR — not ad-hoc SQL (AGENTS.md). Verify against the live database before committing: partitions at every zoom, row counts, NULLs in the columns that matter, a decoded tile.
art-bot self-assigned this 2026-08-24 17:04:01 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
art/ismap#215
No description provided.