HowTo OGR2OGR

Aus Geoinformation HSR
Version vom 10. Januar 2008, 14:19 Uhr von Stefan (Diskussion | Beiträge) (INTERLIS 1-Daten der amtl. Vermessung nach Shapefile)

Wechseln zu: Navigation, Suche

Zurück zu OGR

HowTo 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 LIE_GrundstueckPos.shp 
    -nln Parzellenbeschriftung 
    -sql "SELECT Grundstuec,Nummer FROM LIE_GrundstueckPos 
          JOIN 'LIE_Grundstueck.shp'.LIE_Grundstueck 
          ON LIE_GrundstueckPos.Grundstuec = LIE_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 noch keinen 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

PostgreSQL/PostGIS-Reader und -Writer

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

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.

CSV-Reader und Writer (mit/ohne WKT)

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

 > ogr2ogr -f CSV out Bahnhoefe.shp -sql "select *,OGR_GEOM_WKT from Bahnhoefe"

Hinweise:

  • Erzeugt immer "," als Delimiter. D.h. man muss MS Excel zuerst starten und dann das File importieren (Doppelklick funktioniert nicht wie erwartet).
  • -lco LINEFORMAT=CRLF erzwingt Zeilenenden für Windows

CSV-Reader-Variante mit lat/lon-Punktgeometrie

Angenommen folgende CSV-Datei sample1.csv existiere:

 lon,lat,value
 -81.0,32.0,13
 -82.0,33.0,14
 -83.0,34.0,15
  • 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,VALUE,THEGEOM
 1, Wert 1, "POINT(12.375 49.618)"
 2, Wert 3, "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="THEGEOM" />
         <LayerSRS>epsg:4326</LayerSRS>
     </OGRVRTLayer>
 </OGRVRTDataSource>

Variante mit LineString:

.csv:

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

.vrt:

         <GeometryType>wkbLineString</GeometryType>

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