Případovka: leží parcela v záplavovém území?
Konkrétní, dotažený příklad od stažení dat po funkci ve webu. Vezmeme záplavová území z VÚV, naimportujeme je do PostGIS a napíšeme kontrolu, kterou pustíte nad libovolnou parcelou nebo bodem.

Jedna z nejčastějších praktických otázek u nemovitostí: je pozemek v záplavovém území? Projdeme celý řetězec od dat k funkci. Je to zároveň ukázka vzorce, který použijete na spoustu podobných úloh (chráněné území, ochranné pásmo, hluková zóna).
1. Data: záplavová území z VÚV
Vymezená záplavová území (rozlivy Q5, Q20, Q100 a aktivní zóny) poskytuje VÚV TGM. Stáhnete je jako SHP ze systému HEIS, nebo je najdete v DIBAVOD v kategorii záplavových území. Detail a odkazy má stránka zdroje Záplavová území. Data jsou v S-JTSK.
2. Import do PostGIS
shp2pgsql -I -s 5514:4326 ZU_Q100.shp public.zaplavy_q100 | psql "$DATABASE_URL"Parametr -I rovnou založí GiST index, -s 5514:4326 reprojektuje ze S-JTSK do WGS84. Pokud máte víc scénářů (Q5, Q20, Q100), naimportujte je do jedné tabulky se sloupcem scenar, nebo do oddělených tabulek.
3. Kontrola jednoho bodu
Máte souřadnice pozemku (třeba z definičního bodu parcely z RÚIAN). Otázka zní: leží uvnitř některého záplavového polygonu?
SELECT EXISTS (
SELECT 1 FROM zaplavy_q100 z
WHERE ST_Contains(z.geom, ST_SetSRID(ST_MakePoint(14.42, 50.08), 4326))
) AS v_zaplave;4. Předpočítání pro celý katalog
Kdybyste dotaz pouštěli při každém zobrazení inzerátu, zbytečně zatížíte databázi. Lepší je spočítat příznak jednou při ukládání a uložit ho k záznamu. Pak filtrujete obyčejný boolean sloupec.
-- pridame sloupec a naplnime ho jednim UPDATE nad celou tabulkou
ALTER TABLE parcely ADD COLUMN v_zaplave boolean;
UPDATE parcely p SET v_zaplave = EXISTS (
SELECT 1 FROM zaplavy_q100 z WHERE ST_Intersects(z.geom, p.geom)
);
-- filtrovani v katalogu je pak trivialni a rychle
SELECT * FROM parcely WHERE v_zaplave = false;5. Zobrazení na mapě
Záplavovou vrstvu ukážete pod parcelou v mapě. Menší výřez stačí jako GeoJSON (exportujte přes ogr2ogr), pro celou ČR raději vygenerujte PMTiles. Jak vrstvu vykreslit ukazuje návod Interaktivní mapa s MapLibre.


