Proximity queries (výpočet blízkosti)
Jedným z najčastejšie používaných dopytov na PostGIS a iné priestorové databázy je výpočet vzdialenosti medzi objektami. Ak napríklad hľadáme objekty do vzdialenosti X metrov od nejakej cesty, alebo železnice atď... používame funkciu na filtrovanie s názvom: ST_DWithin()V následujúcich príkladoch is ukážeme ako kombinovať funkciu ST_DWithin() so štandardnými SQL príkazmi ako: COUNT, JOIN, GROUP BY
Príklady
Koľko hotelov sa nachádza vo vzdialenosti 500 metrov od Židovskej ulice v Bratislave? (vytvorenie tabuľky hotelov, ktoré sa nachádzajú do vzdialenosti 500 metrov od danej ulice)-------------------------------------------- CREATE TABLE ba.hotely AS SELECT b.name,b.type,b.geom FROM ba.ba_budovy AS b INNER JOIN ba.ba_cesty AS c ON ST_DWithin(b.geom, c.geom, 500) WHERE c.name LIKE 'Židovská' AND b.type LIKE 'hotel'; --------------------------------------------Koľko bánk sa nachádza vo vzdialenosti jednej míle od Židovskej ulice v Bratislave?
-------------------------------------------- SELECT b.name, COUNT(DISTINCT b.gid) AS total FROM ba.ba_budovy AS b INNER JOIN ba.ba_cesty AS c ON ST_DWithin(b.geom, c.geom, 1609) WHERE c.name LIKE 'Židovská' AND b.type LIKE 'bank' GROUP BY b.name; --------------------------------------------
Cvičenia:
- 1.) Zistite koľko kostolov sa nachádza vo vzdialenosti 750 metrov od ulice Štúrova
- 2.) Zistite, ktoré dve banky sa nachádzajú najbližšie k hotelom (do vzdialenosti 200 metrov od hotela) + zististe mená týchto hotelov."