Databáze v geoinformatice
X.
Mgr. Michal Jakl
ZS 2025
Obsah lekce
Praktické cvičení:
Praktické procvičení dosud získaných poznatků z PostGISu
Úvod
Dnes budete pracovat a prostorově analyzovat reálná data okresů a obcí na území ČR. Po celou hodinu budete pracovat POUZE s programem QGIS - s výjimkou vytvoření schématu “X_cr” - zde využijte pgAdmin.
Data a import
Prohlídka dat
Neprostorové SQL scripty I.
Neprostorové SQL scripty II.
4) Vypište okresy s méně než 20 obcemi včetně počtu obcí v nich
5) Zjistěte 5 nejčastějších prvních písmen názvů obcí včetně počtu
Neprostorové SQL scripty III.
6) Zobrazte 5 obcí s nejdelším názvem včetně délky a okresu
7) Zobrazte počty obcí podle délky jejich názvu
Prostorové SQL scripty I.
Prostorové SQL scripty II.
4) Vyhledejte 5 nejbližších obcí k Ústí nad Labem v km
5) Vyhledejte obce, které leží v okrese Děčín
6) Vyhledejte okres s největším počtem “sousedů”
Prostorové SQL scripty III.
7) Zjisti které dva okresy mají nejdelší společnou hranici
8) Vyberte 5 okresů s nejvyšší hustotou obcí na km2
A perlička na závěr :)
Zobrazte 3 nejizolovanější města - tedy ta, z nichž je do jakéhokoliv jiného města nejdále...
WITH vzdalenosti AS
(
SELECT
a.nazev AS nazev_mesta,
MIN(ST_Distance(a.geom, b.geom)) AS min_vzdalenost
FROM obce a
JOIN obce b ON a.ogc_fid != b.ogc_fid
GROUP BY a.nazev, a.geom
)
SELECT nazev_mesta, min_vzdalenost FROM vzdalenosti ORDER BY min_vzdalenost DESC LIMIT 3;
15 vteřin!
A perlička na závěr :)
Zobrazte 3 nejizolovanější města - tedy ta, z nichž je do jakéhokoliv jiného města nejdále... - OPTIMALIZACE POMOCÍ DWITHIN()
WITH vzdalenosti AS (
SELECT
a.nazev AS nazev_mesta,
MIN(ST_Distance(a.geom, b.geom)) AS min_vzdalenost
FROM obce a
JOIN obce b
ON a.ogc_fid != b.ogc_fid
AND ST_DWithin(a.geom, b.geom, 20000)
GROUP BY a.nazev, a.geom
)
SELECT nazev_mesta, min_vzdalenost FROM vzdalenosti ORDER BY min_vzdalenost DESC LIMIT 3;
1,9 vteřiny!
Kolik tedy proběhlo nyní operací?
Zjistíme průměrný počet obcí v okruhu 20 km
WITH vzdalenosti AS (
SELECT
a.ogc_fid AS obec_id,
COUNT(b.ogc_fid) AS pocet_obci_v_okruhu
FROM obce a
JOIN obce b
ON ST_DWithin(a.geom, b.geom, 20000) -- 20 km v metrech
AND a.ogc_fid != b.ogc_fid -- Nezahrnujeme obec samu o sobě
GROUP BY a.ogc_fid
)
SELECT AVG(pocet_obci_v_okruhu) AS prumerny_pocet_obci
FROM vzdalenosti;
4) Závěr
SVÉ SQL SKRIPTY NAHRAJTE DO MOODLU KE CVIČENÍ Z DANÉ HODINY!
Děkuji za pozornost a těším se příště!��Prostor pro zpětnou vazbu
mail@mjakl.cz
Tel. 608 544 839
Web: mjakl.cz