OGR: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
(Weitere Dateiformate)
(Weitere Dateiformate)
Zeile 111: Zeile 111:
 
* Binäre Dateiformate:
 
* Binäre Dateiformate:
 
** Microstation (DGN)
 
** Microstation (DGN)
** ESRI Personal GeoDatabase (.mdb): [http://www.gdal.org/ogr/drv_pgeo.html PGeo Reader] - ESRI Personal GeoDatabase lesen. Dieses Format ist unter Windows z.Zt. nur via ODBC (PGeo) verfügbar. Siehe auch MS Access unten.
+
** [http://www.gdal.org/ogr/drv_pgeo.html PGeo Reader]: ESRI Personal GeoDatabase (.mdb) - ESRI Personal GeoDatabase lesen. Dieses Format ist unter Windows z.Zt. nur via ODBC (PGeo) verfügbar. Siehe auch MS Access unten.
 
* Datenbanken:
 
* Datenbanken:
 
** [http://www.gdal.org/ogr/drv_pg.html PostgreSQL PG:... Reader + Writer] (Datenbank) - [[PostgreSQL]]
 
** [http://www.gdal.org/ogr/drv_pg.html PostgreSQL PG:... Reader + Writer] (Datenbank) - [[PostgreSQL]]

Version vom 14. Januar 2010, 01:31 Uhr

OGR Simple Feature Library: OGR ist eine ansehnliche Sammlung von Werkzeugen, namentlich OGR2OGR, die Lese- und manchmal Schreib-Zugriffe zu einer Vielzahl von Vektor-Dateiformaten, Datenbanken und übers Internet anbieten. OGR ist Teil der GDAL-Rasterformate-Bibliothek, die wiederum in den FWTools (C++ Open Source-Programme von Frank Warmerdam) zusammengefasst sind und typischerweise über die Kommandozeile gesteuert werden.

Zum HowTo OGR2OGR

Siehe auch:


Über OGR

Was ist OGR?
OGR2OGR ist ein sog. 'starrer' Konverter (1:1-Mapping), der auch Funktionen bzw. SQL-Befehle interpretieren kann - auch ohne Datenbank. SQL-Anfragen an SQL-fähige Treiber (z.B. PostgreSQL/PostGIS, Personal Geodatabase) werden direkt weitergeleitet, so dass die ganze Funktionalität des beteiligten Datenbank-Treibers zugänglich ist (vgl. Kapitel über SQL unten).
Grundbegriffe von OGR
OGR wurde auf Basis der OpenGIS "Simple Features"-Spezifikation entworfen. Diese definiert im Wesentlichen eine Geodaten-Architektur und ein Geometrie-Typenmodell. Dieses Geometrie-Typenmodell enthält Definitionen über (Feature) Klassen, Datentypen und Methoden. Geometrietypen sind spezielle Datentypen (siehe auch WKT). Ein Feature kapselt ein vollständiges (Geo-)Objekt mit seiner Geometrie und seinen Sachattributen. Eine Feature Class-Definition enthält die Struktur-Informationen (d.h. Felder-Definitionen) einer ganzen Gruppe von Features-Objekten, d.h. ein ganzer Layer. Ein Layer-Objekt ist also eine Sammlung von Feature-Objekten derselben Feature Klasse. Einer Geometrie und damit auch einem Layer (und einer Feature Klasse) ist ein Koordinatensystem zugeordnet. Layers stammen von einer Datenquelle. Eine Datenquelle repräsentiert eine Datei oder eine Datenbank und kann eine oder mehrere Layer enthalten. Man beachte, dass 'layer' und 'feature' (und Objekt) im Wesentlichen identisch sind.
Hilfe/Community
Die Dokumentation von OGR geht etwas in GDAL/FWTools unter (Link siehe unten). Wer Hilfe braucht, sollte sich zuerst diese anschauen und kann sich dann an die FWTools-Mailingliste wenden, die sich auch mit OGR befasst und an GDAL/Maptools anlehnt. Hilft das nicht weiter, steht das GISpunkt HSR-Team gerne zur Seite.
GDAL, FWTools und OSGeo
OGR wird als Teil GDAL und diese als Teil der FWTools verteilt (Linux und Windows-Version). Immer mehr Open Source-Software (darunter bald auch OGR) wird auch über die OSGeo Binary Distribution verteilt.
Gibt es weitere Werkzeuge für OGR?
Ja, z.B. ein grafisch-interaktives Frontend namens ogr2gui (Windows, Opensource) und natürlich die Webapplikation GeoConverter.

Installation FWTools (OGR)

OGR wird vorwiegend von Programmierern entwickelt, die Linux als Entwicklungsumgebung verwenden. Die Unterstützung von Windows steht daher etwas zurück. Wir helfen gerne bei Fragen.

Download:

Installation unter Windows:

  • Schritt 1: FWTools in ein (temporäres) Verzeichnis downloaden und installieren, z.B. in C:\Program Files\FWTools1.3.9
  • Schritt 2: Arbeitsverzeichnis anlegen, z.B. C:\work\OGR\
  • Schritt 3: setfw.bat von "C:\Program Files\FWTools1.3.9\" hineinkopieren (Alternative: PATH-Environment-Variable ergänzen). Hinweis: setfw.bat enthält einen lokalen Pfad. Das Batchfile muss allenfalls editiert und der Pfad mit Anführungszeichen unklammert werden, wie folgt:
 @echo off
 SET FWTOOLS_DIR=C:\Program Files\FWTools1.3.9
 call "%FWTOOLS_DIR%\bin\setfwenv.bat"
  • Schritt 4: INTERLIS-Compiler 'ili2c.jar' herunterladen (interlis.ch > "Compiler für INTERLIS 2.3") und ili2c.jar in das Arbeitsverzeichnis kopieren (Java muss installiert sein).
  • Abschluss: Test ob Installation bereit ist:
 > cd C:\work\OGR\>
 > setfw.bat
 > gdalinfo --version
 GDAL 1.5dev, FWTools 1.3.9, released 2007/10/11
  • Jetzt sollte OGR - und die anderen FWTools - bereit sein. Einige Beispiele sind unten angegeben.

Dokumentation

Dateiformate

Übersicht

Übersichts-Tabelle: OGR-Driver (Quelle: OGR-Website)
Driver-Name File-Ext. R./W. KRS Grafik Beschreibung
Interlis 1 .ITF,.ILI Reader n/a. nein INTERLIS 1; Datei ili2c.jar zusätzlich installieren (vgl. INTERLIS). In ITF-Datei darf keine Zeile 'TOPI Topic' stehen (mit Editor abändern). In ILI-Datei dürfen Attributnamen nicht res. INTERLIS-Schlüsselwörtersein, z.B. nicht TYPE oder NAME.
Interlis 1 .ITF Writer ja nein INTERLIS 1 (ITF/ILI); schreibt fälschlicherweise noch 'TOPI Topic' ins ITF.
Interlis 2 .XML,.ILI Reader n/a. nein INTERLIS 2; ili2c.jar zusätzlich installieren
Interlis 2 .XML,.ILI Writer ja nein INTERLIS 2; z.Zt. nur beschränkt benutzbar (u.a. wegen ILI Version 2.2!)
CSV .CSV,(.vrt,.csvt) Reader n/a. nein Comma Separated Value (CSV), vgl. auch VRT und das Kapitel über "SQL-Queries" unten.
CSV .CSV Writer nein nein Comma Separated Value (CSV). Durch einen SQL-Befehl (-sql "select *,OGR_GEOM_WKT FROM ...") kann auch WKT-Geometrie geschrieben werden.
ESRI Shapefile .SHP,.DBF,.shx Reader n/a. nein Shapefile (SHP)
ESRI Shapefile .SHP,.DBF,.shx Writer ja nein Shapefile (SHP). Falls Quellformat Angaben zum SRS enthält, wird auch eine PRJ-Datei erzeugt.
GML .GML Reader n/a. nein Geographic Markup Language GML v.2.0(!)
GML .GML Writer ja nein Geographic Markup Language GML v.2.0(!)
GPX .GPX Reader n/a. (ja) GPS Exchange Format GPX; ACHTUNG: ab FWTools 2.0.1 auf Windows (expat-Problem)
GPX .GPX Writer ja (ja) GPS Exchange Format GPX; ab FWTools 2.0.1 auf Windows;
KML .KML Writer nein ja Keyhole Markup Language KML. Writer berücksichtig zwar kein SRS transformiert aber autom. nach WGS84. Kein Reader vorhanden.
MapInfo File .MIF,.MID Reader n/a. nein MapInfo Interchange File (MIF), textbasiert mit .MIF (Schema/Geometrie) und .MID (Sachdaten) (siehe auch .TAB, binär).
MapInfo File .MIF,.MID Writer ja ja MapInfo Interchange File (MIF), textbasiert mit .MIF (Schema/Geometrie) und .MID (Sachdaten) (siehe auch .TAB, binär).

Weitere Dateiformate

Alphabetisch geordnete Liste:

  • INTERLIS
    • Die aktuelle Version 2.3 könnte voraussichtlich im April 2008 bereit sein.
  • XML-Formate:
    • XML sind 'streng' definierte ASCII-Formate, die sich u.a. validieren, d.h. automatisch testen lassen. Einige XML-Reader achten z.B. streng darauf, dass wenn UTF-8 angegeben ist, die Datei auch in UTF-8 codiert ist.
  • ASCII-Formate:
  • Binäre Dateiformate:
    • Microstation (DGN)
    • PGeo Reader: ESRI Personal GeoDatabase (.mdb) - ESRI Personal GeoDatabase lesen. Dieses Format ist unter Windows z.Zt. nur via ODBC (PGeo) verfügbar. Siehe auch MS Access unten.
  • Datenbanken:
    • MySQL
    • ORACLE

OGR-Werkzeuge

ogr2gui

Graphical user interface for ogr2ogr.

  • Homepage & Download.
  • Allows also batch processing.
  • Source code as well as the binary executables for Windows and Linux available.

ogr2ogr

Quelle: http://www.gdal.org/ogr/ogr2ogr.html

 Usage: ogr2ogr [-skipfailures] [-append] [-update] [-f format_name]
                [-select field_list] [-where restricted_where] 
                [-sql <sql statement>] [--help-general]
                [-spat xmin ymin xmax ymax] [-preserve_fid] [-fid FID]
                [-a_srs srs_def] [-t_srs srs_def] [-s_srs srs_def]
                [[-dsco NAME=VALUE] ...] dst_datasource_name
                src_datasource_name
                [-lco NAME=VALUE] [-nln name] [-nlt type] [layer [layer ...]]

Häufig gebrauchte Optionen:

-skipfailure
Bei Fehler weiter-konvertieren.
-f format_name
Output-Dateiformat-Name. Siehe oben.
-select field_list
Comma-delimited list of fields from input layer to copy to the new layer (defaults to all)
-sql sql_statement
SQL statement to execute. The resulting table/layer will be saved to the output.
-where restricted_where
Attribute query (like SQL WHERE)
-spat xmin ymin xmax ymax
spatial query extents (x und y korrespondieren typischerweise zu lon/lat)
-dsco NAME=VALUE
Dataset creation option, format-spezifisch (dsco= DataSet Creation Option)
-lco NAME=VALUE
Layer creation option, format-spezifisch (lco= Layer Creation Option)
-nlt type
Define the geometry type for the created layer (nlt= New Layer Type). One of NONE, GEOMETRY, POINT, LINESTRING, POLYGON, GEOMETRYCOLLECTION, MULTIPOINT, MULTILINE, MULTIPOLYGON or MULTILINESTRING. Add "25D" to the name to get 2.5D versions.
-nln name
Neuer Name dem Output Layer geben (nln= New Layer Name)
-t_srs srs_def
Reproject/transform to this spatial reference system (SRS, Koordinatensystem) on output (t_srs= Transform SRS)

Seltenere Optionen:

-append
Zu bestehendem Layer hinzufügen (Append) anstelle einen neuen zu erzeugen versuchen (falls vom Treiber unterstützt).
-overwrite
Output Layer löschen vor dem Schreiben (falls vom Treiber unterstützt).
-update
Existierender Output Layer mit Daten ergänzen (Unterschied zu append?).
-a_srs srs_def
Assign an output spatial reference system (SRS, Koordinatensystem) (a_srs= Assign SRS).
-s_srs srs_def
Override source spatial reference system (SRS, Koordinatensystem) (s_srs= Source SRS)
-fid fid
If provided, only the feature with this feature id will be reported (fid= Feature ID). Operates exclusive of the spatial or attribute queries.

ogrinfo

Dokumentation im Web: ogrinfo.

Mit dem ogrinfo-Tool kann man Schema-Informationen über die unterstützten Formate abfragen.

 Usage: ogrinfo [--help-general] [-ro] [-q] [-where restricted_where]
                [-spat xmin ymin xmax ymax] [-fid fid]
                [-sql statement] [-al] [-so] [--formats]
                datasource_name [layer [layer ...]]

Wichtige Optionen:

  • -ro: Open the data source in read-only mode.
  • -so: Summary Only.
  • -al: Zeige alle Layers ab (All Layers). Wird durch den Parameter layer überschrieben.
  • layer: One or more layer names may be reported.

Zeige alle Attribute eines Shapefile (es gibt nur einen Layer):

 > ogrinfo -so -al Bahnhoefe.shp

Zeige alle Attribute einer PostGIS-Datenbank (Layer towns)

 > ogrinfo -so -al PG:dbname=gisdb towns

Erzeuge einen Spatial Index (.qix) für Shapefile/OGR:

 > ogrinfo -sql "CREATE SPATIAL INDEX ON Bahnhoefe" Bahnhoefe.shp

ERRORs mit Erläuterungen

  • ERROR 1: Attempt to write non-polygon (LINESTRING) geometry to type shapefile.
    • This error occurs in the shapefile writer if another object appears from an input stream and the geometry types is not the same as in the first object.

Koordinatensystem-Transformation (ogr2ogr-Option SRS)

Beispiel CH1903 nach WGS84

Transformiere Shapefile, das im Koordinatensystem CH1903 vorliegt nach WGS84:

 > ogr2ogr out Bahnhoefe.shp -s_srs EPSG:21781 -t_srs EPSG:4326

Erläuterungen:

  • EPSG:4326 steht für WGS84, also GPS-Koordinaten.
  • EPSG:21781 ist der EPSG-Code für CH1903.
  • Eine Liste aller Codes befindet sich in der Datei gcs.csv im data-Verzeichnis der FWTools.
  • EPSG
  • PRJ

SRS-Option als URL

"GDAl 1.5 release allows you to import a spatial reference definition from a URL. It’s expected that you might use http://spatialreference.org URLs, but any old URL will do. For example, this command will reproject the world_borders shapefile to an Albers projection that a user contributed that focuses on the Northern Pacific:"

Dasselbe Beispiel wie oben, nun aber mit einer URL:

 > ogr2ogr out Bahnhoefe.shp -t_srs http://spatialreference.org/ref/epsg/4326/ 

Erläuterungen:

Räumlicher Ausschnitt (ogr2ogr-Option spat)

Über die spat-Option kann eine BBox angegeben als "xmin ymin xmax ymax" (hier: Region Zürich):

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

Vergrössern/Verkleinern der BBox:

 > ogr2ogr -spat 3500000 5300000 3540000 5400000 out.shp in.shp

Hinweis: -spat does not actually clip the returned geometries. It looks for all features whose geometries touch the selection region and returns the geometries intact, not clipped.

SQL-Queries (ogrinfo/ogr2ogr-Option SQL)

Siehe OGR SQL.

Analyse

ogrinfo als Analyse-Werkzeug kann auch mit SQL verwendet werden, z.B. zur Analyse.

Type Casting

Manchmal will man den Typ oder den Namen eines Datenfeldes beim Konvertieren ändern. Dazu gibt es ab GDAL/OGR 1.6 ev. eine Möglichkeit im Rahmen der OGR SQL select list (d.h. der sql-Option): Siehe rfc21_ogrsqlcast.

Beispiel: Importiert volle 255 Zeichen (statt nur den Default von 80) und ändert gleichzeitig das Datenfeld 'OGR_STYLE' zu 'style'.

 > ogr2ogr -f "ESRI Shapefile" -sql "select *, CAST(OGR_STYLE AS character(255)) AS 'style' from rivers" rivers.shp rivers.tab

Selektion und Projektion

Zeige alle Bahnhöfe mit Namen Rapperswil (falls es mehrere gibt...):

 > ogrinfo -al -ro Bahnhoefe.shp -sql "SELECT * FROM bahnhoefe WHERE name='Rapperswil'"

Konvertiere nur die Bahnhöfe mit Namen 'Rapperswil' (falls es mehrere gibt...):

> ogr2ogr Bahnhoefe_Rapperswil.shp Bahnhoefe.shp -sql "SELECT * FROM bahnhoefe WHERE name='Rapperswil'"

Join (Beschriftungen, Lookup-Tabellen)

Beispiel Zonenplan (SG):

  • Quellen:
    • Geodaten: zuzwil.itf,zuzwil.ili
    • Tabelle 'A': Beschriftung_Kuerzel_rk, Attribute Entstehung_Gde_Kuerzel (Fremdschlüssel )
    • Tabelle 'B': Zone_rechtskraeftig, Attribute _TID, Identifikator, etc.
  • Ziel: Zonenbeschriftung (Layer)
    • Tabelle Zonenbeschriftung mit Attributen _TID, Identifikator,Grundnutzungsflaeche,Zonenart_Gde_Kuerzel

Umweg von ILI über Shape1 nach joined Shape2...:

 1. ogr2ogr out -nln Zonenbeschriftung zuzwil.itf,zuzwil.ili
 2. rename ... zu Zone_Pos.shp und Zone.shp
 3. ogr2ogr -f "ESRI Shapefile" out -nln Zonenbeschriftung Zone_Pos.shp 
    -sql "SELECT Zonenart_G,_TID FROM Zone_Pos 
          JOIN 'Zone.shp'.Zone 
          ON Zone_Pos.Entstehung = Zone._TID"

Variante direkt von ILI joined nach Shape:

 ogr2ogr out -nln Zonenbeschriftung zuzwil.itf,zuzwil.ili 
   -sql "SELECT _TID,Identifikator,Grundnutzungsflaeche,Zonenart_Gde_Kuerzel 
         FROM Zonenplan__Beschriftung_Kuerzel_rk 
         JOIN 'zuzwil.itf,zuzwil.ili'.Zonenplan__Zone_rechtskaeftig 
         ON Zonenplan__Beschriftung_Kuerzel_rk.Entstehung_Gde_Kuerzel = 
            Zonenplan__Zone_rechtskraeftig._TID"

Test mit ogrinfo:

 ogrinfo zuzwil.itf,zuzwil.ili
   -sql ... (dasselbe SQL-Statement wie oben)

Beispiel amtliche Vermessung (AV-CH 01):

  • Quellen:
    • Geodaten. gossau_ch01.itf,gossau_ch01.ili
    • Tabelle 'A': Liegenschaften__GrundstueckPos, Attribute GrundstueckPos_von, ...
    • Tabelle 'B': Liegenschaften__Grundstueck, Attribute _TID,Nummer
  • Ziel: Parzellenbeschriftung (Layer)
 ogr2ogr out gossau_ch01.itf,gossau_ch01.ili 
   -skipfailures
   -nln Parzellenbeschriftung 
   -sql "SELECT _TID,Nummer 
         FROM Liegenschaften__GrundstueckPos 
         JOIN 'gossau_ch01.itf,gossau_ch01.ili'.Liegenschaften__Grundstueck 
         ON Liegenschaften__GrundstueckPos.GrundstueckPos_von = 
            Liegenschafen__Grundstueck._TID"

Treiber-spezifisches SQL

Falls das Quell-Format ein OGR-Treiber für Datenbanken (MySQL, PostgreSQL, Oracle, SQLite, ODBC und Personal Geodatabase) ist, wird der SQL-Befehl direkt an diesen Treiber weitergeleitet.

Hier ein Beispiel, bei dem das Attribut geom (aus Tabelle gisdb) vom Typ Linie zu einem solchen vom Typ Punkt umgewandelt wird. Dazu wird eine PostGIS-Funktion verwendet, welche den ersten Stützpunkt jeder Linie nimmt (Funktion ST_Startpoint(...)). Das Resultat wird in einen Layer (Shapefile) vom Typ POINT geschrieben (Option -nlt):

 ogr2ogr point.shp PG:dbname=gisdb 
         -sql "SELECT ST_Startpoint(geom)::geometry AS geom FROM gtest" 
         -nlt POINT

ogr2ogr-Optionen Split- und Skipfailures

Split Files

To split a DGN file into shapefiles with distinct geometry types try:

 > ogr2ogr -skipfailures -nlt point      out\demo_point.shp demo.dgn
 > ogr2ogr -skipfailures -nlt linestring out\demo_line.shp  demo.dgn
 > ogr2ogr -skipfailures -nlt polygon    out\demo_poly.shp  demo.dgn

You will see lots of error messages which you can ignore.

Merge Files

How to merge several Shapefiles into one?

Windows:

 > for %f in (dir1\*.shp dir2\*.shp) do (ogr2ogr -f "ESRI Shapefile" -append merged %f) 

Unix:

 > for i in $(ls *.shp); do ogr2ogr -f 'ESRI Shapefile' -update -append merged $i -nln abcdef

Grafik in OGR

Seit kurzen gibt es eine akzeptierten Draft 'OGR-Feature Style Specification' wie das Konzept eines Grafikmodells ('Features Styles') und deren Konfiguration aussehen soll. Features Styles werden soweit wie möglich beim Konvertieren (translating) zwischen Formaten, die Styles unterstützen, beibehalten.

Zurzeit wird die Grafik-Information nur bei den Formaten MIF/TAB und DGN berücksichtigt.

Anwendungen von Styles:

  • UMN MapServer und das 'OpenEV' machen Gebrauch davon.
  • Zukunft:
    • Der KML-Driver wäre ein Kandidat, unterstützt aber leider noch keine.
    • Eine Erweiterung des VRT-Formats (siehe oben) wäre naheliegend und könnte relativ einfach realisiert werden.

Quelle: OGR-Feature Style Specification draft V0.010 - 2006/09/23

Was sind die Gemeinsamkeiten und Unterschiede von SLD und Mapfile (UMN MapServer)?

The concept of assigning rendering rules to geometries is shared in both cases but that's about it. The terminology (pen/brush/etc vs SLD symbolizers) and encoding (compact text strings vs verbose XML) are completely different. SLD also supports building up classifications using filter encoding which is not part of the OGR style concept. Why did OGR invent its own encoding instead of reusing SLD? Mostly because the OGR style encoding predates the days when SLD became well known. But even if we were to do this again today I'm not sure if we would opt for a verbose XML encoding... we'd probably spend a lot of time debating the performance issues vs the benefits of interoperability with SLD.

Beispiele:

 > ogrinfo -al -ro Bahnhoefe.mif -sql "SELECT *,OGR_STYLE FROM Bahnhoefe WHERE OGR_STYLE LIKE '%'"

Weblinks