docs: correct the Greece catalogue — roads and rail are not absences (#179, #180, #182) #183

Merged
art merged 5 commits from issue-179-greece-catalogue-corrections into main 2026-08-20 10:18:26 +00:00
Collaborator

Corrects docs/country-gr.md (the #171 catalogue) where the research behind it was wrong.
Files #179, #180, #181 and #182 carry the follow-up work; this PR only fixes the catalogue
so it stops asserting things that are not true.

The two verdicts that were wrong

Both sources were verified live, not researched — counts and lengths below are measured,
not quoted.

railways / stations (#179). GAIAOSE — ΓΑΙΑΟΣΕ, OSE's own state-owned subsidiary —
runs a public, anonymous ArcGIS Server at
gaiaweb.gaiaose.gr/server/rest/services/Hosted/Railnet/FeatureServer (access: public,
Query,Extract, native EPSG:2100):

layer count measured
RailNetwork 8 865 polylines 4 635 km, national bbox; in_use (3 720 km live / 147 km disused), type (M 3 593 km), 23 real line codes
Stations 443 points Greek names, line_id, chainage, an importance integer
Milleage and Itersections 26 665 points mileposts / junctions

The catalogue had called this "an 8-segment Athens fragment and regional GAIA-OSE WFS".
Corroborated by geodata.gov.gr's Σιδηροδρομικό δίκτυο Ελλάδας — explicitly CC-BY-3.0,
110 lines / 2 461 km, same national bbox — which I pulled from the Internet Archive and
measured; its ESRI lineage (DLEAD.Siemens-250000 / Rail_Network / NGI_DATA_Layer) is an
official 1:250 000 geodatabase with no OSM anywhere in it (R1).

roads (#180). Παρατηρητήριο Εγνατίας Οδού publishes the TEN-T road network of Greece
as one 2.6 MB ZIP on data.gov.gr, CC BY 4.0 per-dataset, updated 2026-04-28, plain
GET, IPv4. Downloaded and measured: 4 853 km, EPSG:2100, bbox covering the whole country
including Crete, five-value core/comprehensive class. The catalogue had called roads "the
whole story" of why Greece could not be first-class, closable only via a non-downloadable
ministry inventory.

The three limitations are written into the verdict rather than left to be discovered: it is
the trans-European tier only (4 853 km against ~117 000 km of Greek road), it ships
dissolved into 5 multipart features with no names or refs, and one class is road that
does not exist yet and must be filtered. The ΔΜΕΟ ministry network the file called "not
publicly downloadable" turns out to be republished CC BY 4.0 with its real functional
hierarchy — but clipped per municipality, with regions publishing region-wide (Crete: 487
features, 711 km, road numbers and a transeu flag).

So the tally becomes seven shared layers GO and four absences, where it read five
and "seven" while naming six.

Smaller corrections

  • NUTS "GR" is wrong — that is the ISO code; the CLMS crop key is the NUTS0 code
    EL, and GR is rejected with "no data for the selected Area Of Interest". #177
    already found this in config; the catalogue still taught the wrong value.
  • The CORINE caveat described a blocker that #177 resolved; it now points at the
    implemented clms: provider.
  • The mask is land only. The file claimed the outline "includes islands and territorial
    sea". The imported mask measures 132 041 km² against Greece's 131 957 km² land area — the
    administrative regions do not extend over the territorial sea.
  • waterways is partial — floods_rev1 publishes 10 of Greece's 14 river basin
    districts; EL06, EL07, EL11, EL14 are absent (#182).
  • ktimanet.gr answers HTTP 200. The Hellenic Cadastre is rejected on remit
    (cadastral parcels, not a national outline), not on availability.
  • geodata.gov.gr moves out of a bare "offline" line: it is licence-clean and genuinely
    national, unusable as a live fetch path because it stopped answering (500s/504s from
    2025-04, no successful capture since 2025-07-08), and worth keeping as the fallback.

Why it was wrong — the new section at the end

geodata.gov.gr resolves to an IPv6-only address and this machine has no global IPv6
address and no IPv6 default route
. It could only ever time out here, whatever its true
state. "The geoportal is offline" was a fact about the network path recorded as a fact about
the source. It happened to be true — but the identical inference was applied to
ktimanet.gr, where it was false, and a source ruled out by a timeout is never re-examined.

The second half of the lesson: every one of the transport sources was indexed on
data.europa.eu the whole time. A ministry-first search missed them because Egnatia Odos
and GAIAOSE publish under their own names, not the ministry's. The section gives the concrete
checks (getent ahostsv4/ahostsv6, ip -6 route show default, a second vantage, the
Archive CDX API for dating a real outage).

Verification

Docs-only — no config, no code, no schema. make acceptance is unaffected and still
28/28 green on conf/gr. Every endpoint cited was re-checked live on 2026-08-20; the ΥΠΕΝ
figures the original catalogue gives all hold (oikismoi 13 548, gr_lwb 73 lakes,
gr_rwb 1 415, perifereies 14 features).

Corrects `docs/country-gr.md` (the #171 catalogue) where the research behind it was wrong. Files #179, #180, #181 and #182 carry the follow-up work; this PR only fixes the catalogue so it stops asserting things that are not true. ## The two verdicts that were wrong Both sources were **verified live, not researched** — counts and lengths below are measured, not quoted. **`railways` / `stations` (#179).** GAIAOSE — ΓΑΙΑΟΣΕ, OSE's own state-owned subsidiary — runs a public, anonymous ArcGIS Server at `gaiaweb.gaiaose.gr/server/rest/services/Hosted/Railnet/FeatureServer` (`access: public`, `Query,Extract`, native EPSG:2100): | layer | count | measured | |---|---|---| | `RailNetwork` | 8 865 polylines | **4 635 km**, national bbox; `in_use` (3 720 km live / 147 km disused), `type` (M 3 593 km), 23 real line codes | | `Stations` | **443** points | Greek names, `line_id`, chainage, an **`importance`** integer | | `Milleage and Itersections` | 26 665 points | mileposts / junctions | The catalogue had called this "an 8-segment Athens fragment and regional GAIA-OSE WFS". Corroborated by geodata.gov.gr's `Σιδηροδρομικό δίκτυο Ελλάδας` — explicitly **CC-BY-3.0**, 110 lines / 2 461 km, same national bbox — which I pulled from the Internet Archive and measured; its ESRI lineage (`DLEAD.Siemens-250000 / Rail_Network / NGI_DATA_Layer`) is an official 1:250 000 geodatabase with **no OSM anywhere in it** (R1). **`roads` (#180).** Παρατηρητήριο Εγνατίας Οδού publishes the TEN-T road network of Greece as one 2.6 MB ZIP on data.gov.gr, **CC BY 4.0 per-dataset**, updated **2026-04-28**, plain GET, IPv4. Downloaded and measured: **4 853 km**, EPSG:2100, bbox covering the whole country including Crete, five-value core/comprehensive class. The catalogue had called roads "the whole story" of why Greece could not be first-class, closable only via a non-downloadable ministry inventory. The three limitations are written into the verdict rather than left to be discovered: it is the trans-European tier only (4 853 km against ~117 000 km of Greek road), it ships **dissolved into 5 multipart features with no names or refs**, and one class is road that **does not exist yet** and must be filtered. The ΔΜΕΟ ministry network the file called "not publicly downloadable" turns out to be republished CC BY 4.0 with its real functional hierarchy — but clipped per municipality, with regions publishing region-wide (Crete: 487 features, 711 km, road numbers and a `transeu` flag). So the tally becomes **seven** shared layers GO and **four** absences, where it read five and "seven" while naming six. ## Smaller corrections - **`NUTS "GR"` is wrong** — that is the ISO code; the CLMS crop key is the NUTS0 code **`EL`**, and `GR` is rejected with "no data for the selected Area Of Interest". #177 already found this in config; the catalogue still taught the wrong value. - The **CORINE caveat** described a blocker that #177 resolved; it now points at the implemented `clms:` provider. - **The mask is land only.** The file claimed the outline "includes islands and territorial sea". The imported mask measures 132 041 km² against Greece's 131 957 km² land area — the administrative regions do not extend over the territorial sea. - **`waterways` is partial** — `floods_rev1` publishes 10 of Greece's 14 river basin districts; EL06, EL07, EL11, EL14 are absent (#182). - **`ktimanet.gr` answers HTTP 200.** The Hellenic Cadastre is rejected on **remit** (cadastral parcels, not a national outline), not on availability. - **geodata.gov.gr** moves out of a bare "offline" line: it is licence-clean and genuinely national, unusable as a *live* fetch path because it stopped answering (500s/504s from 2025-04, no successful capture since **2025-07-08**), and worth keeping as the fallback. ## Why it was wrong — the new section at the end `geodata.gov.gr` resolves to an **IPv6-only address** and this machine has **no global IPv6 address and no IPv6 default route**. It could only ever time out here, whatever its true state. "The geoportal is offline" was a fact about the network path recorded as a fact about the source. It happened to be true — but the identical inference was applied to `ktimanet.gr`, where it was false, and a source ruled out by a timeout is never re-examined. The second half of the lesson: every one of the transport sources was indexed on **data.europa.eu** the whole time. A ministry-first search missed them because Egnatia Odos and GAIAOSE publish under their own names, not the ministry's. The section gives the concrete checks (`getent ahostsv4`/`ahostsv6`, `ip -6 route show default`, a second vantage, the Archive CDX API for dating a real outage). ## Verification Docs-only — no config, no code, no schema. `make acceptance` is unaffected and still 28/28 green on `conf/gr`. Every endpoint cited was re-checked live on 2026-08-20; the ΥΠΕΝ figures the original catalogue gives all hold (`oikismoi` 13 548, `gr_lwb` 73 lakes, `gr_rwb` 1 415, `perifereies` 14 features).
The #171 catalogue's central claim was that Greece has "no official, non-OSM,
permissively-licensed national road-centreline, rail-line, airport or ferry-route
geometry", and that roads were "the whole story" of why Greece could not be a
first-class country. Two of those four are wrong, and both sources are verified
live rather than researched:

  railways/stations  GAIAOSE (OSE's own subsidiary) runs a public anonymous
                     ArcGIS Server whose Railnet FeatureServer is the national
                     network: 8 865 segments / 4 635 km with in_use, type and 23
                     real line codes, plus 443 named stations carrying an
                     importance signal, plus 26 665 mileposts. Native EPSG:2100.
                     Corroborated by geodata.gov.gr's explicitly CC-BY-3.0 copy
                     (110 lines / 2 461 km, same national bbox) whose ESRI
                     lineage is an official 1:250k geodatabase with no OSM in it.

  roads              Egnatia Odos SA's Observatory publishes the TEN-T network of
                     Greece as one 2.6 MB ZIP, CC BY 4.0 per-dataset, updated
                     2026-04-28: 4 853 km, whole country including Crete, five
                     classes. Measured on download. It is the motorway/primary
                     tier only, dissolved into 5 multipart features with no refs,
                     and one class is unbuilt road — all three now written down
                     next to the verdict rather than discovered later. The ΔΜΕΟ
                     ministry network this file called "not publicly
                     downloadable" is in fact republished CC BY 4.0, but clipped
                     per municipality; regions publish region-wide.

So the tally becomes seven shared layers GO and four absences, where it read five
and "seven" while naming six.

Also corrected: NUTS "GR" is the ISO code and is rejected by the CLMS API — the
crop key is the NUTS0 code "EL"; the CORINE caveat now points at the implemented
clms: provider instead of describing a blocker; the mask is land only (132 041
km² against 131 957 km² of land area), not land plus territorial sea; waterways
covers 10 of Greece's 14 river basin districts; and ktimanet.gr answers HTTP 200,
so the Hellenic Cadastre is rejected on remit, not on availability.

The new "Research vantage points" section records why this was wrong twice.
geodata.gov.gr is an IPv6-only host and this box has no IPv6 route, so it could
only ever time out here; "the geoportal is offline" was a fact about the network
path recorded as a fact about the source. It happened to be true (no successful
capture since 2025-07-08) but the same inference was applied to ktimanet.gr,
where it was false. The transport sources were all indexed on data.europa.eu the
whole time — a ministry-first search missed them because Egnatia Odos and GAIAOSE
publish under their own names.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8HxnPejASTBhLaSxJKqBA
Follows the mask fix on the #172 pilot branch. The verdict row said the mask was
`perifereies` dissolved, and my previous commit "corrected" it to say the result
is land only. Both were wrong in the same direction: `perifereies` is a land
division, so a mask built from it leaves every Greek gulf drawn as Natural Earth
background land — 2 429 km² over the Gulf of Corinth alone, 14 755 km²
nationally. The mask now unions the WFD coastal (250 bodies, 38 448 km²) and
transitional (47, 1 128 km²) water bodies from the same ΥΠΕΝ service, giving
167 843 km² over 184 pieces and 40 km² of residual in the Gulf window.

The new section says why Iceland's buffered hull is not available to Greece —
four land borders and a shared Aegean, so a hull would carve Natural Earth land
out from under the neighbours — and records the measured over-carve of the WFD
approach onto foreign coasts: 12 km² opposite the Dodecanese, 2 km² in Albania,
0 elsewhere. It also states the consequence that looks like a gap and is not:
the mask covers water the NUTS-cropped CORINE delivery does not, so over the
gulfs we draw neither background nor cover, which is what should happen over sea.

And it records R34's reference moving from the mask to `gr_perifereies`, which is
Iceland's shape exactly — `mork` for the same reason, because Iceland's mask is
also deliberately bigger than its land.

The vantage-points section gains the third mistake, which is a different shape
from the first two. The mask's area was measured correctly, contradicted a
comment, and was written up as a comment inaccuracy rather than as the bug it
was. Nothing else caught it because the obvious carve check — "no background land
overlaps the mask" — is tautologically true: background_land is Natural Earth
minus the mask, so it passes for any mask at all, including an empty one. When a
measurement contradicts a comment, the comment is the less likely of the two to
be authoritative.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8HxnPejASTBhLaSxJKqBA
R108 already said to check whether the border source includes territorial waters,
and Greece still ended up with a land mask that left the Gulf of Corinth drawn as
Natural Earth land. Two things were missing.

The requirement did not say what to do when the only national division is of the
land — the case R108's two examples (Poland's PRG, Iceland's hull) do not cover.
The answer Greece found is the Water Framework Directive coastal and transitional
water bodies, which most coastal EU states publish, and it is now named. So is the
constraint on the hull: it is safe only for a country with no neighbours, because
on Greece it would have carved Natural Earth out from under four of them.

More importantly R108 had no *Check:* line, and the obvious check is worse than
none. "No background land overlaps the mask" is tautologically true —
background_land is Natural Earth minus the union of every mask — so it passes for
any mask at all, including an empty one, and it passed on Greece throughout. The
Check: line now says so explicitly and gives the two cheap checks that do fail on
a land-only mask: mask area against land area, and a named enclosed-water window.

R143 is the other half of the same lesson. R34-style coverage checks referenced
the mask because for the first four countries the mask and the land were the same
geometry. Once a mask is deliberately bigger than its land the reference is wrong:
Greece read 21.9% off against its maritime mask and 0.75% against `perifereies`.
Iceland already did this correctly with `mork` for the same reason; it was
precedent nobody had written down as a rule.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8HxnPejASTBhLaSxJKqBA
Third pass at the same section, which is itself the story. The verdict row and the
mask section described a maritime mask built to keep Natural Earth from drawing
land in the Greek gulfs. That fix did not work (the gulf kept a kilometre-wide
line through it) and is no longer the design: conf/world.yaml carves with Natural
Earth's own admin-0 polygons and reads only the country code from
map_country_mask_0, never its geometry (#184, #185).

So the section now says what the mask is — perifereies dissolved, 2 041 pieces,
132 041 km², the land — and what it is not for. It keeps the failed attempt on
the record with its numbers, because extending the mask over the water is the
obvious idea and the next country will have it too.

R108 is left exactly as it is on main; #185 rewrites it, and having two branches
edit the same requirement for different reasons is how you get a merge conflict
that means nothing. R143 stays here: a coverage check references the country's
land, not its mask.

The vantage-points section gains the honest version of the third mistake. The
132 041 km² measurement was real evidence, recorded as a comment inaccuracy; it
then took two more attempts to place correctly. Two habits fall out — when a
measurement contradicts a comment, ask which of the two the map depends on; and a
check that cannot fail is worse than no check, because it is counted as coverage.

And a fourth lesson, which is the expensive one: the fix you can picture is not
always the fix. Greece's grey gulfs looked like a Greek mask problem, and the
cause was a world-level subtraction that had Sweden worse than Greece the whole
time. When a bug is reported against the country you are working on, measure the
countries you are not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8HxnPejASTBhLaSxJKqBA
It was inserted before R109, which is also where #185 adds R144-R146, so the two
branches collided on a hunk despite adding unrelated rules. R143 is about a
coverage check's reference geometry and belongs beside the mask rule anyway.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8HxnPejASTBhLaSxJKqBA
art force-pushed issue-179-greece-catalogue-corrections from d20ee2e64a to 61b3b68ac2 2026-08-20 10:18:07 +00:00 Compare
art merged commit 61b3b68ac2 into main 2026-08-20 10:18:26 +00:00
art deleted branch issue-179-greece-catalogue-corrections 2026-08-20 10:18:26 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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!183
No description provided.