HowTo OGR2OGR: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
(CSV-Reader-Variante mit lat/lon-Punktgeometrie)
(CSV-Reader-Variante mit Geometrieattribut im WKT-Format)
Zeile 153: Zeile 153:
 
Gegeben Datei sample2.csv (CSV) mit Geometrien codiert in [[WKT]]:
 
Gegeben Datei sample2.csv (CSV) mit Geometrien codiert in [[WKT]]:
  
   ID,NAME,OGR_GEOM_WKT
+
   ID, NAME, OGR_GEOM_WKT
 
   1, Wert 1, "POINT(12.375 49.618)"
 
   1, Wert 1, "POINT(12.375 49.618)"
 
   2, Wert 3, "POINT(16.198 50.431)"
 
   2, Wert 3, "POINT(16.198 50.431)"
Zeile 177: Zeile 177:
  
 
sample3.csv:
 
sample3.csv:
   ID,NAME,OGR_GEOM_WKT
+
   ID, NAME, OGR_GEOM_WKT
 
   1, Wert 1, "LINESTRING(12.375 49.618, 12.380 49.61, 12.474 49.634)"
 
   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)"
 
   2, Wert 2, "LINESTRING(16.198 50.431, 16.205 50.434, 16.334 50.405)"

Version vom 13. Januar 2008, 23:35 Uhr

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 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 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 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.

CSV-Reader und Writer

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, 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 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="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>

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