GDAL/OGR2OGR

GDAL/OGR2OGR er et Open Source projekt, der indgår i det fleste GIS- systemer både Open Source og kommercielle produkter. Formålet med GDAL/OGR2OGR er at konvertere data mellem alle de mange GIS formater, som findes på markedet.

GDAL anvendes til Rasterdata og OGR2OGR anvendes til vektordata. Det er OGR2OGR vi skal anvende til at arbejde med PostgreSQL.

De formater kan konvertere til og fra er angivet på http://www.gdal.org/ogr_formats.html

Foruden at være integreret i mange typer af GIS-software findes også et enkeltstående program (ogr2ogr.exe) som kan afvikles på kommandolinjen.

Der kan også lagres RASTER data i PostgreSQL/PostGIS og man kan derfor også anvende GDAL med en PostgreSQL/PostGIS database

Eksempler

I det følgende vises nogle eksempler på typiske anvendelser af OGR2OGR på kommandolinjen. Åbn din kommandoprompt/terminal. Vejledningen af programmet ser således ud og vi vil nu prøve nogle af de mange funktioner af.:

Usage: ogr2ogr [--help-general] [-skipfailures] [-append] [-update]
               [-select field_list] [-where restricted_where]
               [-progress] [-sql <sql statement>] [-dialect dialect]
               [-preserve_fid] [-fid FID]
               [-spat xmin ymin xmax ymax] [-geomfield field]
               [-a_srs srs_def] [-t_srs srs_def] [-s_srs srs_def]
               [-f format_name] [-overwrite] [[-dsco NAME=VALUE] ...]
               dst_datasource_name src_datasource_name
               [-lco NAME=VALUE] [-nln name] [-nlt type] [-dim 2|3|layer_dim] [layer [layer ...]]

Advanced options :
               [-gt n]
               [-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_exte]
               [-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]]
               [-addfields]
               [-fieldTypeToString All|(type1[,type2]*)] [-unsetFieldWi]
               [-fieldmap identity | index1[,index2]*]
               [-splitlistfields] [-maxsubfields val]
               [-explodecollections] [-zfield field_name]
               [-gcp pixel line east north [elevation]]* [-order n|-tps]

I mange tilfælde har vi dog kun brug for følgende af ovenstående parametre:

og2ogr [-f format_name]  dst_datasource_name src_datasource_name [-nln name] [layer [layer ...]]

Først programnavnet, derefter formatet vi vil konvertere til og dernæst datakilden vi vil konvertere til og datakilden vi vil konvertere fra og endelig det navn laget skal omdøbes til (-nln:new layer name)

Indlæs shapefil i Postgres database
ogr2ogr -f "PostgreSQL" pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" bygninger.shp -nln mitskema.fotbygninger

Shapefilen bygninger.shp indlæses i en lokal PostgreSQL database i skemaet "mitskema" og med et nyt navn "fotbygninger"

Her angives datakilden vi vil kovertere til som PostgreSQL. Man kan læse om om hvordan man skriver en connnection streng til de forskellige formater på formatet/driverens webside. http://www.gdal.org/drv_pg.html

-

Indlæs MapInfo fil i Postgres database
ogr2ogr -f "PostgreSQL" pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" bygninger.tab -nln mitskema.fotbygninger
Konvertér tabel i Postgres database til MapInfo fil
ogr2ogr -f "MapInfo File" bygninger.tab pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" mitskema.fotbygninger

--

Konvertér tabel i Postgres database til CSV fil
ogr2ogr -f "CSV" bygninger.csv pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" mitskema.fotbygninger

--

Konvertér et sql statement i Postgres database til shapefil
ogr2ogr -f "ESRI Shapefile" minsql.shp pg:"host=localhost port=5432 user=migselv password=mitpasswordb dbname=kbh_workshop" -sql "SELECT * FROM buf.boernehaver WHERE ejerforhold='Kommunal'"

--

Indlæs en hel database fra PostgresSQL til Oracle
>ogr2ogr -f "OCI" OCI:septimadb/septima4you pg:"host=10.15.24.14 port=5432 user=<USERNAME> password=secret dbname=kbh_workshop"

PostgreSQL skemaer prefixes med underscore i Oracle. trafik.afmaerkning_cykelrampe bliver i Oracle til TRAFIK_AFMAERKNING_CYKELRAMPE

Indlæs en hel user/database fra Oracle til PostgresSQL
>ogr2ogr -f "postgresql" pg:"host=10.15.24.14 port=5432 user=<USERNAME> password=secret dbname=kbh_workshop" "OCI" OCI:septimadb/septima4you
Indlæs en hel user/database fra Oracle til PostgresSQL og tildel SRS til utm zone 32 i output

Man kan tildele et specifik SRS til outputtet uanset om SRS mangler fra datakilden

>ogr2ogr -a_srs EPSG:25832 -f "postgresql" pg:"host=10.15.24.14 port=5432 user=<USERNAME> password=secret dbname=kbh_workshop" "OCI" OCI:septimadb/septima4you
Indlæs en hel user/database fra Oracle til PostgresSQL og tildel SRS til utm zone 32 i output

Man kan tildele en specifik SRS til outputtet uanset om SRS mangler fra datakilden

>ogr2ogr -a_srs EPSG:25832 -f "postgresql" pg:"host=10.15.24.14 port=5432 user=<USERNAME> password=secret dbname=kbh_workshop" "OCI" OCI:septimadb/septima4you
Indlæs en hel user/database fra Oracle til PostgresSQL i specifikt skema
>ogr2ogr -f "postgresql" pg:"host=10.15.24.14 port=5432 user=<USERNAME> password=<PASSWORD> dbname=ora"  OCI:septimadb/septima4you -lco SCHEMA=test
Indlæs enkelte tabeller fra Oracle til PostgresSQL i specifikt skema

Man kan indlæse enkelte tabeller fra Oracle databasen når de er angivet i connection strengen. Det er altid en god idé at angive specifikke tabeller, da indlæsningen går meget hurtigere da ogr2ogr ikke skal skanne alle tabller mens den initialiserer.

Bemærk også at instancen "xe" også er angivet. KAn undlades, hvis databasen er lokalt på maskinen.

>ogr2ogr -f "postgresql" pg:"host=10.0.0.13 port=5432 user=<USERNAME> password=<PASSWORD> dbname=ora"  OCI:"septimadb/septima4you@xe:TEK_
HYDRO,TEK_HELLE" -lco SCHEMA=test1

Eller uden instans og mulighed for overskrivning af eksisterende tabeller

>ogr2ogr -f "postgresql" pg:"host=10.0.0.13 port=5432 user=<USERNAME> password=<PASSWORD> dbname=ora"  OCI:"septimadb/septima4you@:TEK_
HYDRO,TEK_HELLE" -lco SCHEMA=test1 -lco=OVERWRITE=YES
Hent specifikke tabeller fra E&M som ODBC
ogr2ogr.exe -overwrite  -f "postgresql" PG:"host=udcgis schemas=emdb"^
 ODBC:<USERNAME>/<PASSWORD>@emdb,JR49003V,JY72000V,JY70100V,JY71000V,JY73200V,QL52500V,QL23600V^
 --DEBUG ON -lco OVERWRITE=YES -lco PRECISION=NO
Eksportér tabeller fra PostGIS ESRI FileGDB format
ogr2ogr.exe -overwrite  -f "FileGDB" output/born_familie.gdb ^
  PG:"host=udcgis schemas=born_familie tables=elev_befordring,fs_bevtoft_over_jerstal" ^
   --DEBUG ON -lco OVERWRITE=YES -lco PRECISION=NO

Bemærk at for at kunne skrive til ESRI FileGDB er det nødvendigt at være i besiddelse af ESRI's FileGDBAPI. De relevante filer er hentet og placeret i Mapserver 6.4.1 kataloget på Haderslevs Spatial Suiteserver. Det er påkrævet at man accepterer licensforholdende til SDK'et

Væsentlige Miljøvariable

OGR2OGR kan konfigureres på rigtig mange parametre. Nogle af dem, der anvendes hyppigt er angivet nedenfor.

COPY

For at forøge indlæsningshastigheden betragteligt kan man bruge Postgres' COPY mode:

SET PG_USE_COPY=YES
Decimalseparator

For at konverteringen af bl.a. decimaltal sker korrekt kan det være nødvendigt at sætte ORACLE Miljøvariablen NLS_LANG. Derudover kan det i ngoe3, OGR2OGR versioner være nødvendigt at søtte "layer creation option" -lco PRECISON=NO for at undgå at felter konverteres til char (X) felter med x antal blank spaces

SET NLS_LANG=American_America.UTF8
Væsentlige OGR2OGR Layer Creation Options
Geometri-dimensioner

Kontrollér dimensionerne for geometrierne med -lco DIM

ogr2ogr ..........-lco DIM=2

default værdien er 3

ogr2ogr ..........-lco GEOMETRY_NAME=the_geom
Præcision for kolonner

Når data konverteres anbefales det at sætte - lco PRECISION=NO for at sikre at typerne i Oracle NUMERIC(width,precision) or CHAR(width) konverteres i PostgreSQL til typerne FLOAT8, INTEGER and VARCHAR. Derved undgås bl.a. "blank spaces" i felterne

Overskriv

Ved indlæsning kan man overskrive eksisterende tabeller med -lco OVERWITE=YES

ogr2ogr ..........-lco OVERWITE=YES

results matching ""

    No results matching ""