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 kovertere 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
I det følgende vises nogle eksempler på typiske anvendelser af OGR2OGR på kommandolinjen. Åben 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 kovertere til og dernæst datakilden vi vil konvertere til og datakilden vi vil kovertere fra og endelig det navn laget skal omdøbes til (-nln:new layer name)
ogr2ogr -f "PostgreSQL" pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" bygninger.shp -nln mitskema.fotbygninger
Shape filen 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
-
ogr2ogr -f "PostgreSQL" pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" bygninger.tab -nln mitskema.fotbygninger
ogr2ogr -f "MapInfo File" bygninger.tab pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" mitskema.fotbygninger
--
ogr2ogr -f "CSV" bygninger.csv pg:"host=localhost port=5432 user=migselv password=mitpassword dbname=kbh_workshop" mitskema.fotbygninger
--
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'"
--
>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
>ogr2ogr -f "postgresql" pg:"host=10.15.24.14 port=5432 user=<USERNAME> password=secret dbname=kbh_workshop" "OCI" OCI:septimadb/septima4you
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
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
>ogr2ogr -f "postgresql" pg:"host=10.15.24.14 port=5432 user=<USERNAME> password=<PASSWORD> dbname=ora" OCI:septimadb/septima4you -lco SCHEMA=test
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
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
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
OGR2OGR kan konfigureres på rigtig mange parametre. Nogle af dem, der anvendes hyppigt er angivet nedenfor.
For at forøge indlæsningshastigheden betragteligt kan man bruge Postgres' COPY mode:
SET PG_USE_COPY=YES
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
Kontrollér dimensionerne for geometrierne med -lco DIM
ogr2ogr ..........-lco DIM=2
defualt vædien er 3
ogr2ogr ..........-lco GEOMETRY_NAME=the_geom
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
Ved indlæsning kan man overskrive eksisterende tabeller med -lco OVERWITE=YES
ogr2ogr ..........-lco OVERWITE=YES