HowTo OGR2OGR: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
(ESRI Personal GeoDatabase (.mdb))
(ESRI Personal GeoDatabase (.mdb))
Zeile 116: Zeile 116:
  
 
== ESRI Personal GeoDatabase (.mdb) ==
 
== ESRI Personal GeoDatabase (.mdb) ==
 +
 +
Reader only. Siehe [[OGR]].
  
 
Zuerst muss ein Eintrag (sog. System DSN) in ODBC gemacht werden (siehe nachfolgend)! Dann kann man mit dem OGR-PGeo-Treiber darauf zugreifen.
 
Zuerst muss ein Eintrag (sog. System DSN) in ODBC gemacht werden (siehe nachfolgend)! Dann kann man mit dem OGR-PGeo-Treiber darauf zugreifen.

Version vom 14. Januar 2010, 01:25 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.

 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.

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

Zeige alle Attribute einer PostGIS-Datenbank (Layer towns)

 > ogrinfo -so -al PG:dbname=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 GeoDatabase (.mdb)

Reader only. Siehe OGR.

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

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