#106: Poland airports + airport_points from BDOT10k KU* land-use complexes #153
No reviewers
Labels
No labels
blocked
claude-wip
map-report
map:is
map:se
needs-review
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
art/ismap!153
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "issue-106-pl-airports"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Poland: BDOT10k KU* airports + airport_points (issue #106)
What and why
Poland's
airports(+ derivedairport_points) from the BDOT10k KU* land-use complexgroup —
OT_KUKO_A, rodzajlotnisko lub lądowisko(KUKO02). This is the R13 line forPoland: the same runway-polygon shape Iceland's and Sweden's airports come from.
Standalone layer, not a carve. The KUKO areas are an overlay over the PTKM
transport-surface coverage, and PTKM has no RODZAJ column to split airports out of
cover(measured on disk). The issue body offers either the #14-style ST_Differencecarve or "take the airport areas as their own layer without subtracting from PTKM"; the
#106 comment points the carve at issue #118 (overlay carve as a declared importer
staging kind), which is still open. So this branch takes the standalone option: the
airports draw on top of the PTKM transport fill at z10+, visually the same result at the
zooms they draw, with no surgery on Poland's most expensive cascade. The cover fold
stays #118's job (cross-referenced in the cover comment and docs/workstream-a.md).
The class ladder reads
TYPLOTNISKA: 'port lotniczy' — the lotnisko register ascheduled service operates from — → airport_class 1, everything else (aeroclub strips,
helipads, NULL) → 2. The same 1/2 ladder the style's z9 coarse-zoom filter reads.
IDIATAwas considered and rejected as the signal (registration numbers like '23/2012'and wrong codes like '4E' for Chopin, whose IATA is WAW, as often as real codes) —
measured on the R6 counties.
The name is the source's
NAZWAdirectly (populated for the registered airports,NULL for the unnamed lądowiska — all 5 of m. Kraków's rows) — no label join, unlike
Sweden's ANLTX lookup.
airport_pointsis derived per R140 (one centroid per namedairport from
plmap_airports_13, z9 scheduled-only filter), exactly as IS/SE.R6 check (issue step 1)
Three county packages inspected end to end before widening the fetch (zip sizes
88.5/71.3/35.2 MB): 1465 Warszawa — 2 rows (Chopin + Babice, both 'port lotniczy',
named, IDICAO EPWA/EPBC); 1206 krakowski — 2 rows (Balice 'port lotniczy' named
KRK/EPKK, Pobiednik 'inne' named, IDICAO EPKP); 1261 m. Kraków — 5 rows, all 'inne
lotnisko lub lądowisko', all unnamed, IDIATA=IDICAO=registration numbers. The class is
in every delivery — the old "PTKM cannot give the split" note was about the fetch list,
not the database (the #85/#64 lesson again).
OT_KUKO_P(point counterpart, samerodzaje) is fetched and staged but unused by the current layers; it stays loaded so the
R105 check verifies the fetch extracted it, and it is the natural source of a future
point-based layer.
Changes
OT_KUKO_A OT_KUKO_Padded toBDOT10K_CLASSES;BDOT10K_MARKERwidened to
pt-sw-sk-oikm-oipr-skpp-kuk(the marker encodes the class set, so the380 county zips re-pull and the two classes extract — the documented widening cost,
now measured at ~25 GB / 65 MB avg per county zip rather than the stale "~10 GB").
pl_kuko_a/pl_kuko_p; layersairports(z10–z13,filter_only) +
airport_points(z8–z13, z9 class-1 filter) with five acceptancetests (R6 population, R119 no-empty-zoom for both, R120 NULLs/validity for both);
sources: [pl](the first unshared layer since Phase 3); the R105 staging list andthe cover PTKM TODO comment updated.
sources: [map, is, pl].pltile source +airports_pl/airport_labels_plstylelayers (the #103 per-country pattern;
airports/airport_labelsstay Iceland's).KU* line; style.md layer count (68 = 56 map + 9 is + 2 pl + background).
Verification (live DB, 2026-08-16)
The three R6 counties' KU* files are in the shared data dir (markers created for the
widened set), so the layers imported and were verified against real data:
New tests, all PASS:
The one skip is the config-level R105 staging check: it requires the full staging set,
and
pl_kuko_ponly loads on a full import (nothing consumes it yet) — by design for apartial import; it runs on the national import.
importer tiles --check conf/plmap.yaml(R121) — all PASS, including the new layers(
airportsz10/z13,airport_pointsz8/z13; keysname airport_class country, extent1024).
gl-style-validate— clean. Real-browser render over CDP (scripts/cdp-map-check.mjs):at z11 over Warsaw Chopin the
airports_plfill draws (4 polygons) andairport_labels_pllabels "Lotnisko Chopina w Warszawie"; at z9 only the class-1 labels draw (Chopin +
Warszawa-Babice), confirming the scheduled-only coarse-zoom filter. (The page's missing
/favicon.ico404 is pre-existing — same on Iceland.)The national data (driver follow-up, 2026-08-17)
The remaining step from the review note ran: the widened
make fetch-bdot10kand thefull
make import-pl.A fetch-pattern bug was caught and fixed in the process (
37c9ad5c). The branch'sBDOT10K_CLASSESlisted the KU* classes asOT_KUKO_A/OT_KUKO_P, but the fetchrecipe's pattern loop already prepends
OT_— so the first ~25 GB pass extractednothing (
*OT_OT_KUKO_A*matched no member) while touching all 380 county markers.Fixed by listing them as
KUKO_A/KUKO_P(the member files are...__OT_KUKO_A.gpkg);markers cleared and the fetch re-run: 380/380 counties, 380 OT_KUKO_A + 368
OT_KUKO_P GPKGs on disk (12 deliveries lack the point file; harmless — no layer reads
pl_kuko_p, it is the R105 staging tally only).Full national import (
make import-pl, ~2.5 h: the cover cascade dominates):Full-run tally: 41 acceptance PASS / 0 FAIL across the pl and world configs (the R105
skip is gone —
pl_kuko_ploads on the full import). Live rows:plmap_airports301at every of z10–z13;
plmap_airport_points15 at z8–z9 (the class-1 scheduled filter)and 139 at z10–z13 (all named airports). Same per-layer check as the sample run:
tiles --check(R121) PASS for both new layers, gl-style-validate clean.Merged through !154
Pull request closed