HowTo OGR2OGR
Zurück zu OGR
Inhaltsverzeichnis
- 1 HowTo 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