ogr2ogr

ogr2ogr - nám pomůže s konverzemi mezi formáty.

Usage: ogr2ogr [--help-general] [-skipfailures] [-append] [-update]
               [-select field_list] [-where restricted_where|@filename]
               [-progress] [-sql <sql statement>|@filename] [-dialect dialect]
               [-preserve_fid] [-fid FID] [-limit nb_features]
               [-spat xmin ymin xmax ymax] [-spat_srs srs_def] [-geomfield field]
               [-a_srs srs_def] [-t_srs srs_def] [-s_srs srs_def] [-ct string]
               [-f format_name] [-overwrite] [[-dsco NAME=VALUE] ...]
               dst_datasource_name src_datasource_name
               [-lco NAME=VALUE] [-nln name]
               [-nlt type|PROMOTE_TO_MULTI|CONVERT_TO_LINEAR|CONVERT_TO_CURVE]
               [-dim XY|XYZ|XYM|XYZM|layer_dim] [layer [layer ...]]

Advanced options :
               [-gt n] [-ds_transaction]
               [[-oo NAME=VALUE] ...] [[-doo NAME=VALUE] ...]
               [-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_extent]
               [-clipsrcsql sql_statement] [-clipsrclayer layer]
               [-clipsrcwhere expression]
               [-clipdst [xmin ymin xmax ymax]|WKT|datasource]
               [-clipdstsql sql_statement] [-clipdstlayer layer]
               [-clipdstwhere expression]
               [-wrapdateline][-datelineoffset val]
               [[-simplify tolerance] | [-segmentize max_dist]]
               [-makevalid]
               [-addfields] [-unsetFid] [-emptyStrAsNull]
               [-relaxedFieldNameMatch] [-forceNullable] [-unsetDefault]
               [-fieldTypeToString All|(type1[,type2]*)] [-unsetFieldWidth]
               [-mapFieldType srctype|All=dsttype[,srctype2=dsttype2]*]
               [-fieldmap identity | index1[,index2]*]
               [-splitlistfields] [-maxsubfields val]
               [-resolveDomains]
               [-explodecollections] [-zfield field_name]
               [-gcp ungeoref_x ungeoref_y georef_x georef_y [elevation]]* [-order n | -tps]
               [[-s_coord_epoch epoch] | [-t_coord_epoch epoch] | [-a_coord_epoch epoch]]
               [-nomd] [-mo "META-TAG=VALUE"]* [-noNativeData]

Note: ogr2ogr --long-usage for full help.

Příklad použití:

ogr2ogr _data/katastralni_uzemi.gpkg _data/659673/KATASTRALNI_UZEMI_L.shp

Poznámka

Všimněte si: pořadí souborů je obráceně oproti běžně užívanému. Nejprve výstupní a nakonec vstupní soubor.

Základní použití

Základní použití je převod z jednoho formátu na druhý. Formát může být specifikovaný koncovkou souboru, předponou (např. PG:) nebo pomocí parametru -f (output format). Jako první argument se udává výstup a jako poslední argument vstup.

ogr2ogr -f GPKG _data/katastralni_uzemi.gpkg _data/659673/KATASTRALNI_UZEMI_L.shp

Seznam podporovaných formátů samozřejmě získáme pomocí --formats

ogr2ogr --formats

Výstupní (a vstupní) speciality formátů se dočteme v dokumentaci k jednotlivým formátům, ať už na webových stránkách https://gdal.org/drivers/vector/index.html nebo pomocí přepínače --format

ogr2ogr --format "ESRI Shapefile"

Pokud chceme vidět postup zpracování, přidáme přepínač -progress

ogr2ogr -progress _data/katastralni_uzemi.gpkg _data/659673/KATASTRALNI_UZEMI_L.shp

Přidání prvků vs. jejich přepsání

Pomocí přepínačů -apend nebo -overwrite řídíme, zda se v cílovém datasetu bude aktualizovat celá vrstva nebo se pouze přidají další prvky na konec tabulky.

Celý soubor přepíšeme „natvrdo“ díky přepínači -overwrite

ogr2ogr _data/jihlava_parcely.gpkg _data/ruian_jihlava.gpkg parcely
ogr2ogr -append _data/jihlava_parcely.gpkg _data/ruian_polna.gpkg parcely
ogrinfo _data/jihlava_parcely.gpkg

Porovnejte s

ogr2ogr _data/jihlava_parcely.gpkg _data/ruian_jihlava.gpkg parcely -overwrite
ogr2ogr -update _data/jihlava_parcely.gpkg _data/ruian_polna.gpkg parcely
ogrinfo _data/jihlava_parcely.gpkg 57123

Výběr atributů ze zdrojového souboru

Výběr atributů můžeme ovlivnit parametrem -select

ogr2ogr -select Id,KmenoveCislo,PododdeleniCisla,VymeraParcely,ZpusobyVyuzitiPozemku,KatastralniUzemiKod _data/jihlava_parcely.gpkg _data/ruian_jihlava.gpkg parcely -overwrite
ogrinfo _data/jihlava_parcely.gpkg parcely -so

Výběr konkrétních prvků

Můžeme vybrat konkrétní provek na základě jeho ID -fid (a uložení do existujícího souboru, do nové vrstvy)

ogr2ogr -fid 23214 _data/jihlava_parcely.gpkg -nln prior _data/ruian_jihlava.gpkg parcely
ogrinfo _data/jihlava_parcely.gpkg prior

Můžeme omezit maximální počet prvků -limit

ogr2ogr -limit 10 _data/jihlava_parcely.gpkg -nln parcely_10 _data/ruian_jihlava.gpkg parcely
ogrinfo _data/jihlava_parcely.gpkg parcely_10

Můžeme uplatnit SQL podmínku -where

ogr2ogr -where "DruhPozemkuKod=14" _data/jihlava_parcely.gpkg -nln zahrady _data/ruian_jihlava.gpkg parcely
ogrinfo _data/jihlava_parcely.gpkg zahrady

Plná kontrola nad výběrem prvků pomocí SQL

S parametrem -sql můžeme využít veškeré možnosti, které nám tento jazyk nabízí

ogr2ogr -sql "SELECT * FROM parcely AS pa INNER JOIN katastralniuzemi AS ku ON pa.KatastralniUzemiKod = ku.Kod WHERE ku.nazev = 'Kosov u Jihlavy' AND ST_Area(pa.geom) > 10000" _data/jihlava_parcely.gpkg -nln kosov_1ha _data/ruian_jihlava.gpkg

Čitelněji zapsaný SQL výraz:

SELECT * FROM
        parcely AS pa
INNER JOIN
        katastralniuzemi AS ku
ON
        pa.KatastralniUzemiKod = ku.Kod
WHERE
        ku.nazev = 'Kosov u Jihlavy'
  AND
        ST_Area(pa.geom) > 10000"

Pomohli jsme si funkcí ST_Area, která vypočítá z geometri pa.geom plochu.

Plošné výřezy

ogr2ogr má značně univerzální možnosti jak plošně limitovat výběr prvků.

Nejjednodušší je možnost klasického boundingboxu (obálky). Můžeme dokonce specifikovat souřadnicový systém, ve kterém je filtr nastavený.

ogr2ogr -spat 15.5784 49.3919 15.6013 49.4050 -spat_srs EPSG:4326 _data/jihlava_parcely.gpkg -nln centrum _data/ruian_jihlava.gpkg parcely

Můžeme ale také místo výběru geometrie natvrdo oříznout pomocí -clip

To může být seznam hodnot minx miny maxx, maxy nebo přímo jiný datový zdroj, v našem případě natvrdo napsaný WKT (well known text) trojúhelník.

ogr2ogr -clipsrc "POLYGON ((-670036 -1130583, -668421 -1130579, -669195 -1129067, -670036 -1130583))" _data/jihlava_parcely.gpkg -nln orez _data/ruian_jihlava.gpkg parcely -nlt MULTIPOLYGON

Poznámka

Musíme ještě natvrdo přetypovat typ výstupní geometrie

Generalizace a segmentace

Pomocí parametrů -simplify a segmentize můžeme měnit charakter liniových (a plošných) geometrií

ogr2ogr -simplify 200 _data/jihlava_parcely.gpkg -nln ku_simple _data/ruian_jihlava.gpkg katastralniuzemi -nlt MULTIPOLYGON

Geometrii lze „zvalidnit“ pomocí -makevalid, ale na polygony se musí vzít jiný postup.

Změna typu geometrie

Volbu -nlt už jsme používali. Na tomto místě jenom zmíníme, že kromě přímo datového typu lze ovlivnit, bude-li výstup jako MULTI-geometrie, nebo například zápis pomocí křivek (u formátů, kde toto lze.

Změna souřadnicového systému

-t_srs - cílový souřadnicový systém, -s_srs zdrojový souřadnicový systém - pokud je potřeba (např. Shapefile bez .prj souboru).

ogr2ogr -s_srs EPSG:4326 _data/katastralni_uzemi-wgs84.gpkg _data/659673/KATASTRALNI_UZEMI_L.shp

nebo komplikovaněji

ogr2ogr -t_srs EPSG:3857 -s_srs "+proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 +alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=572.213,85.334,461.94,-4.9732,-1.529,-5.2484,3.5378 +units=m +no_defs +type=crs" _data/katastralni_uzemi-krovak.gpkg _data/659673/KATASTRALNI_UZEMI_L.shp

Specifické formáty

Většina formátů má specifické volby pro čtení a zápis, více lze nalézt v dokumentaci.

OGC GeoPackage

ESRI Shapefile

  • Max 2GB
  • Kódování
  • Délka názvů
ogr2ogr -oo ENCODING=Windows-1250 -lco ENCODING=UTF-8 -lco 2GB_LIMIT=NO -lco SPATIAL_INDEX=YES _data/katastralni_uzemi-utf.shp _data/659673/KATASTRALNI_UZEMI_L.shp

CSV