Použití prostorových dotazů v GDAL

Dotazy je možné rovněž používat v rámci knihovny GDAL, a to v různých případech užití. Jednou skupinou je využití GDAL bin utils, které se ovládají z příkazového řádku (terminálu).

Důležité

Obrovsky silnou zbraní knihovny GDAL je, že nám umožní vybírat prvky pomocí prostorových dotazů i z původně ne-SQL datových formátů (Shapefile, GML a podobně).

ogrinfo

Nástroj ogrinfo umožňuje zobrazit informace o zdroji dat. Pokud jej kombinujeme s SQL dotazem můžeme si např. vypsat plochu největší parcely v našem cvičném území.

ogrinfo ruian.gpkg -sql "SELECT Max(ST_Area(geom)) FROM parcely"

Po zadání daného příkazu dostaneme plochu největší parcely v území.

INFO: Open of `ruian.gpkg'
    using driver `GPKG' successful.

Layer name: SELECT
Geometry: None
Feature Count: 1
Layer SRS WKT:
(unknown)
Max(ST_Area(geom)): Real (0.0)
OGRFeature(SELECT):0
  Max(ST_Area(geom)) (Real) = 266024.887149993

ogr2ogr

Nástroj ogr2ogr dokáže provádět celou řadu zajímavých operací, přičemž primární je konverze mezi formáty a souřadnicovými systémy. V případě doplnění o SQL je možná dále realizovat výběry dat na základě prostorových dotazů. Můžeme si tak např. seznam parcel, které splňují podmínku vypsat do formátu CSV, který můžeme načíst v běžném tabulkovém procesoru.

ogr2ogr -f "CSV" budovy.csv ruian.gpkg -sql "SELECT s2.Kod, round(ST_Distance(s1.geom, s2.geom)) dist
        FROM stavebniobjekty s1 JOIN stavebniobjekty s2 ON
        (s1.Kod = 4598652 AND
        s2.PocetPodlazi > 2 AND
        ST_Distance(s1.geom, s2.geom) < 500)
        ORDER BY ST_Distance(s1.geom, s2.geom)"

Po zadání daného příkazu dostaneme soubor budovy.csv s následujícím obsahem.

Kod,dist
"4598016",11
"4598245",98
"27488829",112
"4598636",178
"26676095",261
"4598792",269
"4596579",285
"4598113",290
"54232597",304
"27934829",331
"4599951",337
"25832212",341
"4597923",352
"25053086",360
"25213016",374
"4599900",483
"4596684",491

Tip

Vektorové formáty, do kterých můžete realizovat export najdete na https://gdal.org/drivers/vector/index.html.