HowTo OGR2OGR: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
(ESRI Personal Geobatabase)
(INTERLIS 1-Daten der amtl. Vermessung nach Shapefile)
Zeile 27: Zeile 27:
 
Output: Shapefile (Layer/Table) mit Parzellenbeschriftung.
 
Output: Shapefile (Layer/Table) mit Parzellenbeschriftung.
  
   ogr2ogr Parzellenbeschriftung.shp Liegenschaften__GrundstueckPos.shp  
+
   1. Convert INTERLIS 1 to Shapefile
 +
  > ogr2ogr out AV-Daten.itf,AV-Daten.ili
 +
  2. Convert two Shapes to one (with labelling)
 +
  > ogr2ogr Parzellenbeschriftung.shp Liegenschaften__GrundstueckPos.shp  
 
     -nln Parzellenbeschriftung   
 
     -nln Parzellenbeschriftung   
 
     -sql "SELECT Grundstuec,Nummer FROM Liegenschaften__GrundstueckPos   
 
     -sql "SELECT Grundstuec,Nummer FROM Liegenschaften__GrundstueckPos   

Version vom 20. Mai 2010, 00:36 Uhr

Zurück zu OGR

INTERLIS 1-Reader und -Writer

Vorbereitungen:

  • Unter Windows ev. setfw.bat ausführen, damit die Programme im System-Pfad sind und gefunden werden.
  • Fehlt die .ili-Datei, muss diese zuerst erstellt, bzw. organisiert werden. Ev. muss diese "erraten" (d.h. "reverse engineered") werden, z.B. mit Hilfe von OGRINFO.

INTERLIS 1 nach Shapefile

Konvertieren von INTERLIS 1-Dateien (.itf und .ili) nach Shapefile.

  • Input-Dateien: ili-bsp.itf und ili-bsp.ili
  • Resultat.....: Für jede INTERLIS 1-Tabelle wird im Output-Verzeichnis shpdir/ ein Shapefile (.shp, .dbf und .shx) erzeugt.
 > ogr2ogr -f "ESRI Shapefile" shpdir ili-bsp.itf,ili-bsp.ili

Hinweise:

  • Allfällige Warnung "Info: Folder D:\daten_eigene2\OGR\demo\standard doesn't exist; ignored" ignorieren.
  • Es wird immer ein .dbf erzeugt, auch wenn keine Sachdaten vorhanden sind.
  • Speziell: Beschriftungen werden in separaten Tabellen verwaltet. Das bedingt eine nachträgliche Bearbeitung (Konverter wie FME machen das im Rahmen des Konvertierung-Schrittes). Die Erzeugung von Sichten (JOINs) aufgrund von Beziehungen zwischen Tabellen sind nicht Bestandteil einer Datenbeschreibung und der Daten (einfaches SQL schon; siehe unten).
  • Problem behoben (Behandlung von INTERLIS-Referenzattributen (->), die aus anderen Tabellen auf das Input-Shapefile "zeigen").

INTERLIS 1-Daten der amtl. Vermessung nach Shapefile

Daten der amtl. Vermessung (AV), d.h. AV-CH01; sollte aber mit versch. AV-Modellen funktionieren.

Input: AV-Daten .itf/.ili Output: Shapefile (Layer/Table) mit Parzellenbeschriftung.

 1. Convert INTERLIS 1 to Shapefile
 > ogr2ogr out AV-Daten.itf,AV-Daten.ili
 2. Convert two Shapes to one (with labelling)
 > ogr2ogr Parzellenbeschriftung.shp Liegenschaften__GrundstueckPos.shp 
    -nln Parzellenbeschriftung  
    -sql "SELECT Grundstuec,Nummer FROM Liegenschaften__GrundstueckPos  
          JOIN 'Liegenschaften__Grundstueck.shp'.Liegenschaften__Grundstueck
          ON Liegenschaften__GrundstueckPos.Grundstuec = Liegenschaften__Grundstueck._TID"

Hinweise:

  • Der Befehl ist zum besseren Verständnis in mehrere Zeilen aufgeteilt; der Befehl muss aber schliesslich als eine einzige Zeile eingegeben werden.
  • Die Abarbeitung geht sehr langsam (Minuten)! Jede Variante mit PostGIS geht sicher schneller!
  • Das Attribut 'Grundstuec' hiess ursprünglich 'GrundstueckPos_von' wurde aber wegen Beschränkungen des Shapefiles (DBase) auf 8 Zeichen reduziert.

INTERLIS 1-Daten nach DXF

Skript, um Hoehenkurven-Daten (INTERLIS 1 mit Geometrie und separater Hoehe, CHLV03/EPSG 21781) in ein 3D-Shapefile und 3D-DXF umzuwandeln. Voraussetzung: Eine leere PostgreSQL/PostGIS-Datenbank (hier ‘gisdb’).

1. Convert INTERLIS to PostgreSQL (ARC_DEGREES Default: 1 degree).

 DOS> SET ARC_DEGREES=1.0
 DOS> ogr2ogr -f PostgreSQL PG:"dbname='gisdb' user=postgres password='postgres'" hoehen.itf,hoehen.ili 
        -sql "SELECT * FROM Hoehen__Hoehenkurven" -nln hoehenkurven2d -overwrite

2. Convert PostgreSQL to DXF (or whatever target file format) while target layer/feature class is 3D containing Z value from hoehe:

 DOS> ogr2ogr -f DXF out\hoehenkurven3d.dxf PG:"dbname='gisdb' user=postgres password='postgres'" 
        -sql "SELECT ogc_fid, ST_Translate(ST_Force_3DZ(wkb_geometry),0,0,hoehe) AS the_geom from hoehenkurven"

Shapefile nach INTERLIS 1

Konvertieren von Shapefile nach INTERLIS 1-Dateien (.itf).

  • Input: bahnhoefe.itf und bahnhoefe.ili
  • Resultat: Eine INTERLIS 1-Datei Bahnhoefe.itf mit vom Programm generierten Transfer-Identifikatoren (TID).
 > ogr2ogr -f "INTERLIS 1" Bahnhoefe.itf Bahnhoefe.shp

Hinweise:

  • Schreibt fälschlicherweise noch 'TOPI Topic' (ca. Zeile 6) ins ITF. Unbedingt mit Editor abändern.
  • Sollte in Zukunft auch ein .ILI generieren, denn die Informationen aus dem Shapefile (DBF) sind bekannt; siehe ogrinfo.

INTERLIS 2-Reader und -Writer

Vorbereitungen: siehe INTERLIS 1-Reader und -Writer.

Shape to INTERLIS 2 (xml) mit .ili-file:

  • Input.: one Shape including shp-, shx- and dbf-file
  • Output: one INTERLIS 2.2 xml-file
 > ogr2ogr -f "INTERLIS 2" Bahnhoefe.xml,Bahnhoefe.ili Bahnhoefe.shp

Hinweis: Meldet eine Warnung ("Could not open standard...") und eine grosse Zahl von Fehlern(?) "<Xxxx> not found"... Diese können ignoriert werden.

INTERLIS 2 (.xml) to Shape without INTERLIS model ***

  • Input.: zpl_k23.xml
  • shapefiles in shpdir2/
 > ogr2ogr -f "ESRI Shapefile" shpdir2 zpl_k23.xml

KML-Writer mit SQL- und BBox-Optionen

KML ist ein Mix von Formattierung und Geometrie-/Sachdaten. Es gibt für OGR einen KML-Writer aber erst einen rudimentären KML-Reader.

Konvertiere Shapefile nach KML:

 > ogr2ogr -f KML Bahnhoefe.kml Bahnhoefe.shp

Konvertiere Shapefile nach KML mit den dsco-Optionen NameField (setzt das Namensfeld des Markers) und AltitudeMode, das im GE die Höhe gemäss Intputdaten (und nicht Geländemodell-anschmiegend) anzeigen lässt (Hinweis: eine einzige Zeile ohne Zeilenumbruch).

 > ogr2ogr -f KML Bahnhoefe.kml Bahnhoefe.shp -dsco NameField=Name -dsco AltitudeMode=absolute

Shapefile nach KML mit SQL ohne Geometrie (selektiere alle Bahnhöfe der Ostschweiz):

 > ogr2ogr -f KML bahnhoefe.kml bahnhoefe.shp -sql "SELECT name,type,level,
   cntryname,prov1name from bahnhoefe where prov1name = 'Ostschweiz'"

Shapefile nach KML mit spat-Option über eine BBox (Region Zürich):

 > ogr2ogr -spat 8.38 47.81 8.83 47.30 -f KML output.kml input.shp

KML nach Shapefile: Hinweis: Funktioniert z.Zt. nur, wenn nur ein Geometrietyp (im obersten Folder) enthalten ist (und -nlt point oder -sql funktioniert auch nicht).

 > ogr2ogr test.shp ge_export_test2.kml

PostgreSQL/PostGIS-Reader und -Writer

Tipp: Das mit PostGIS mitgelieferte Werkzeug shp2pgsql (siehe PostGIS_-_Tipps_und_Tricks) ist in diesem Fall einfacher in der Bedienung als ogr2ogr.

Zeige alle Attribute einer PostGIS-Datenbank (Layer towns)

 > ogrinfo -so -al PG:dbname=gisdb towns
 oder
 > ogrinfo PG:"dbname='gisdb' user=gisdb password='gisdb'" towns

PostgreSQL-DB nach Shapefile konvertieren:

  • Input: PostgreSQL/PostGIS-Datenbank gisdb
  • Resultat: out.gml-Datei
 > ogr2ogr -f gml out.gml PG:"host=localhost dbname=gisdb"
 Warning 1: Multi-column primary key in 'towns' detected but not supported.

Hinweis: Diese Warnung ist offensichtlich falsch, denn es gibt keinen primary key in dieser DB (Bug gemeldet --Stefan 22:15, 3. Jan. 2008 (CET)).

PostgreSQL-DB nach KML konvertieren und dabei Linien vereinfachen (simplify):

 > ogr2ogr -sql "select admin, case when area(the_geom) > 3000000000 then 
   transform(simplify(the_geom, 4), 4030) else transform(simplify(the_geom, 
   0.01), 4030) end from utlanduse" -f kml out.kml PG:"host=localhost 
   dbname=statewide user=xxx password=xxx"

Hinweis: user und password müssen noch gesetzt werden.

ESRI Personal Geobatabase

ESRI Personal Geobatabase (.mdb). Reader only. Siehe OGR#Dateiformate.

Zuerst muss ein Eintrag (sog. System DSN) in ODBC gemacht werden (siehe nachfolgend)! Dann kann man mit dem OGR-PGeo-Treiber darauf zugreifen.

Beispiel mit Datei Bahnhoefe.mdb:

 > odbcconf /a {CONFIGSYSDSN "Microsoft Access Driver (*.mdb)" "DSN=Bahnhoefe;DBQ=C:\temp\ogr\Bahnhoefe.mdb"}
 > ogrinfo PGeo:Bahnhoefe
   INFO: Open of `PGeo:ArcHydro'
         using driver `PGeo' successful.
   1: bahnhoefe

MS Access-Datei als DSN registrieren:

 > odbcconf /a {CONFIGSYSDSN "Microsoft Access Driver (*.mdb)" "DSN=<dbame>;DBQ=<file_mit_path.mdb>"}
 reg_odbc.bat:
 @ECHO OFF
 REM Assumes MS Access file is given with full path!
 REM SET FILEPATH=%cd%\%1.mdb
 SET FILEPATH=%1
 IF NOT EXIST %FILEPATH% GOTO ERROR1
 c:\windows\system32\odbcconf /a {CONFIGSYSDSN "Microsoft Access Driver (*.mdb)" "DSN=%1;DBQ=%FILEPATH%"}
 GOTO END
 :ERROR1
 ECHO ERROR - File %FILEPATH% not found.
 :END
 @ECHO OFF

MS Excel (.xls)

Ähnlich wie MS Access (siehe oben):

 > odbcconf /a CONFIGSYSDSN "Microsoft Excel Driver (*.xls)" "DSN=test|DBQ=c:\test.xls|DefaultDir=C:|Description=Test"

Comma Separated Values (CSV)

Über den OGR-CSV Writer/Reader:

  • Verwendet Kommas als Feld-Trennzeichen/Deliminter/Separator.
  • Die erste Zeile ist eine Header-Zeile.

CSV-Writer mit WKT-Attribut

CSV-Writer: Erzeuge aus einem Shapefile ein CSV mit WKT-Attribut:

Alte Option:

 > ogr2ogr -f CSV out Bahnhoefe.shp -sql "select *,OGR_GEOM_WKT from Bahnhoefe"
 1. Mit ogrinfo -ro Bahnhoefe.kml Name des Layers eruieren, sicherstellen, ob WGS84, dann:
 > ogr2ogr -f CSV out Bahnhoefe.kml -sql "select *,OGR_GOM_WKT from BahnhoefeWGS84"

Neue Option GEOMETRY (GDAL 1.6.0):

By default, the geometry of a feature written to a .CSV file is discarded. It is possible to export the geometry in its WKT representation by specifying GEOMETRY=AS_WKT. It is also possible to export point geometries into their X,Y,Z components (different columns in the CSV file) by specifying GEOMETRY=AS_XYZ, GEOMETRY=AS_XY or GEOMETRY=AS_YX. The geometry column(s) will be prepended to the columns with the attributes values.

 > ogr2ogr -f CSV out Bahnhoefe.shp -lco GEOMETRY=AS_XY

Hinweise:

  • -lco LINEFORMAT=CRLF erzwingt Zeilenenden für Windows.
  • MS Excel zuerst starten und dann das File importieren (Doppelklick funktioniert nicht wie erwartet).

CSV-Reader: Variante mit lat/lon-Punktgeometrie

Angenommen folgende CSV-Datei sample1.csv existiere:

 lon, lat, name
 -81.0, 32.0, Wert 1
 -82.0, 33.0, Wert 2
 -83.0, 34.0, Wert 3
  • Erzeuge Shapefile layer1 aus der sample1.dbf mit Hilfe der Konfigurationsdatei sample1.vrt (siehe VRT).
 > ogr2ogr -f "ESRI Shapefile" sample1_dir sample1.vrt
  • sample1.vrt-Datei (Erzeugt layer1.dbf, layer1.shp, layer1.shx und layer1.prj):
 <OGRVRTDataSource>
   <OGRVRTLayer name="layer1">
     <SrcDataSource relativeToVRT="1">sample1_dir</SrcDataSource>
     <SrcLayer>sample1</SrcLayer>
     <GeometryType>wkbPoint</GeometryType>
     <LayerSRS>WGS84</LayerSRS>
     <GeometryField encoding="PointFromColumns" x="lon" y="lat"/>
   </OGRVRTLayer> 
 </OGRVRTDataSource>

CSV-Reader: Variante mit Geometrieattribut im WKT-Format

Gegeben Datei sample2.csv (CSV) mit Geometrien codiert in WKT:

 ID, NAME, OGR_GEOM_WKT
 1, Wert 1, "POINT(12.375 49.618)"
 2, Wert 2, "POINT(16.198 50.431)"
 3, Wert 3, "POINT(19.628 51.389)"

Konvertiere CSV zu ESRI Shapefile:

 > ogr2ogr -f "ESRI Shapefile" sample2_dir sample2.vrt

wobei die VRT-Definition sample2.vrt wie folgt ist:

 <OGRVRTDataSource>
     <OGRVRTLayer name="sample2">
         <SrcDataSource relativeToVRT="0">sample2.csv</SrcDataSource>
         <SrcLayer>sample2</SrcLayer>
         <GeometryType>wkbPoint</GeometryType>
         <GeometryField encoding="WKT" field="OGR_GEOM_WKT" />
         <LayerSRS>epsg:4326</LayerSRS>
     </OGRVRTLayer>
 </OGRVRTDataSource>

Variante mit LineString:

sample3.csv:

 ID, NAME, OGR_GEOM_WKT
 1, Wert 1, "LINESTRING(12.375 49.618, 12.380 49.61, 12.474 49.634)"
 2, Wert 2, "LINESTRING(16.198 50.431, 16.205 50.434, 16.334 50.405)"
 3, Wert 3, "LINESTRING(19.628 51.389, 20.278 51.782, 20.350 51.840)"

sample3.vrt:

 <OGRVRTDataSource>
     <OGRVRTLayer name="sample3">
         <SrcDataSource relativeToVRT="0">sample3.csv</SrcDataSource>
         <SrcLayer>sample3</SrcLayer>
         <GeometryType>wkbLineString</GeometryType>
         <GeometryField encoding="WKT" field="OGR_GEOM_WKT" />
         <LayerSRS>epsg:4326</LayerSRS>
     </OGRVRTLayer>
 </OGRVRTDataSource>

CSV-Reader mit Schema (.csvt)

Der OGR CSV driver behandelt alle Attribute als String, falls keine Feld/Attribut-Typen Informations-Datei CSV-Types (.csvt) vorhanden ist.

Es gibt folgende sechs Typen in CSVT: Integer, Real, String, Date (YYYY-MM-DD), Time (HH:MM:SS+nn) und DateTime (YYYY-MM-DD HH:MM:SS+nn). Die Typen jeder Kolonne werden auf einer einzigen Zeile aufgereiht, in anführungszeichen und Komma-separiert.

Beispiel: Gegeben eine CSV-Datei sample4.csv:

 ID,NAME,CREATED
 1, Wert 1, 2007-01-13
 2, Wert 2, 2007-01-14
 3, Wert 3, 2007-01-15

Dann bestimmt diese Datei sample4.csvt die Typen (eine Zeile):

 "Integer","String","Date"

GPX-Reader und -Writer

Konvertiere GPX nach Shapefile:

 > ogr2ogr -f "ESRI Shapefile" tmpdir t.gpx

Konvertiere Shapefile nach GPX:

 > ogr2ogr -f "GPX" t2.gpx bahnhoefe.shp

Beispiel mit Attributen in <extensions>.

 > ogr2ogr -f "GPX" t2.gpx -dsco GPX_USE_EXTENSIONS=YES bahnhoefe.shp

Hinweise zum GPX-Writer:

  • Falls "ERROR 6..." auftritt siehe GPX_USE_EXTENSIONS.
  • GPX_USE_EXTENSIONS=YES gibt Attribute in XML-Element extensions aus.
  • FORCE_GPX_TRACK=YES: Ändere das Mapping "LineString => GPX Routes" nach "LineString => GPX Tracks"
  • FORCE_GPX_ROUTE=YES: Ändere das Mapping "MultiLineString => GPX Tracks" nach "MultiLineString => GPX Routes" (falls MultiLineString nur eine einzige Linie sind)

Über GPX: GPX kennt WayPoints, Routes und Tracks. Weitere Attribute können in einem extensions-Attribut versorgt werden (GPX_USE_EXTENSIONS). Default Geometrie-Typen-Mapping OGR-intern nach GPX:

  • Point => GPX Waypoints (<wpt>)
  • LineString => GPX Routes (<rte>)
  • MultiLineString => GPX Tracks (<trk>).
  • Andere Geometrietpen sind nicht unterstützt.

GML-Reader und -Writer

Shapefile nach GML konvertieren:

 > ogr2ogr -f GML bahnhoefe.gml bahnhoefe.shp
 

GML nach Shapefile konvertieren:

 > ogr2ogr -f "ESRI Shapefile" tmpdir bahnhoefe.gml

Hinweis: Falls folgender Fehler auftritt "ERROR 1: XML Parsing Error: An exception occurred! Type:UTFDataFormatException, Message: invalid byte 2 (g) of a 4-byte sequence." dann ist die Datei nicht im UTF-8-Encoding gespeichert. Das kann ggf. mit einem Werkzeug (Editor) korrigiert werden.

MapInfo MIF/MID-Reader und -Writer

Konvertiere Shapefile nach MapInfo Files MIF/MID (erzeugt bahnhoefe.mif und bahnhoefe.mid im Unterverzeichnis .\tmp\). Wenn FORMAT=MIF fehlt, werden die binären TAB-Dateien erzeugt:

 > ogr2ogr -f "MapInfo File" tmp -dsco FORMAT=MIF bahnhoefe.shp

Konvertiere alle MapInfo-Dateien MIF/MID im Unterverzeichnis .\tmp\ (z.B. die Dateien bahnhoefe.mif und bahnhoefe.mid) nach Shapefile im selben Unterverzeichnis:

 > ogr2ogr -f "ESRI Shapefile" tmp tmp