GDAL/OGR Quickstart¶
Sie brauchen lediglich ein Terminal für die Übungen. Zur Visualisierung der Ergebnisse können Sie ein Desktop GIS von OSGeo-Live wie beispielsweise QGIS verwenden.
Dieses Quickstart besteht aus zwei Teilen - GDAL (Rasterdaten) und OGR (Vektordaten). Wir werden mit der Betrachtung von GDAL beginnen.
Das Quickstart beschreibt Folgendes:
- GDAL
- Untersuchen von Rasterdaten mit gdalinfo
- Formatumwandlung mit gdal_translate
- Transformieren von Daten mit gdalwarp
- Zusammenfassen von Daten mit gdal_warp oder gdal_merge.py
- Erzeugen eines Bildkatalogs in Form einer Shapedatei mit gdaltindex
- OGR
- Untersuchen von Vektordaten mit ogrinfo
- Verwendung von ogr2ogr zur Umwandlung von Vektordaten in andere Formate
Lernen Sie GDAL kennen¶
Sie finden die Demodaten unter /usr/local/share/data
. Für die folgenden Übungen werden
die Natural Earth Daten verwendet. Wir werden mit einer Kopie der Daten arbeiten.
Daher ist der erste Schritte, die Daten in Ihr home-Verzeichnis zu kopieren.
cd /home/user
cp -R /usr/local/share/data/natural_earth2/ ./gdal_natural_earth
Unter dem folgenden Pfad finden Sie eine Natural Earth Rasterdatei und die dazugehörige tfw-Datei:
ls /home/user/gdal_natural_earth/HYP_50M_SR_W.*
Tip
Schauen Sie sich die Datei mit einem Desktop GIS beispielsweise QGIS an.
gdalinfo - zum Untersuchen von Rasterdaten¶
gdalinfo HYP_50M_SR_W.tif
Driver: GTiff/GeoTIFF
Files: HYP_50M_SR_W.tif
HYP_50M_SR_W.tfw
Size is 10800, 5400
Coordinate System is `'
Origin = (-179.999999999999972,90.000000000000000)
Pixel Size = (0.033333333333330,-0.033333333333330)
Metadata:
TIFFTAG_SOFTWARE=Adobe Photoshop CS3 Macintosh
TIFFTAG_DATETIME=2009:09:19 10:13:17
TIFFTAG_XRESOLUTION=342.85699
TIFFTAG_YRESOLUTION=342.85699
TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left (-180.0000000, 90.0000000)
Lower Left (-180.0000000, -90.0000000)
Upper Right ( 180.0000000, 90.0000000)
Lower Right ( 180.0000000, -90.0000000)
Center ( -0.0000000, 0.0000000)
Band 1 Block=10800x1 Type=Byte, ColorInterp=Red
Band 2 Block=10800x1 Type=Byte, ColorInterp=Green
Band 3 Block=10800x1 Type=Byte, ColorInterp=Blue
- Hinweis:
- Treiber (Driver) : “GTiff/GeoTIFF”
- Größe (Size) ist 10800x5400
- 3 Bands (1-3) vom Typ Byte.
- Ausgabe der Koordinaten
- es liegt keine Angabe zum Koordinatenreferenzsystem vor
gdal_translate zur einfachen Formatumwandlung¶
Als Erstes lassen wir uns die verfügbaren Treiber ausgeben. Über die Angabe des zusätzlichen Parameters –formats gibt gdal_translate die Liste der verfügbaren Formate aus.
- Zu jedem Format wird ausgegeben, welche Operationen verfügbar sind:
- read only (ro) - nur lesend,
- read/write (rw) - lesend/schreibend oder
- read/write/update (rw+) - lesend/schreibend/Aktualisierung.
gdal_translate --formats
Die Angabe –format kann auch verwendet werden, um Details zu einem bestimmten Treiber auszugeben, diese Details beinhalten Angaben zur Erzeugung und zu erlaubten Datentypen.
gdalinfo --format jpeg
gdal_translate --format png
Formatumwandlung¶
Formatumwandlungen erfolgen mit gdal_translate. Das Standardausgabeformat ist GeoTIFF. Über die Angabe -of kann ein Ausgabeformat angegeben werden. Über -co können weitere Optionen für die Erzeugung gesetzt werden.
gdal_translate -of JPEG -co QUALITY=40 HYP_50M_SR_W.tif HYP_50M_SR_W.jpg
Der Parameter -ot kann zur Veränderung des Ausgabedatentyps verwendet werden.
gdal_translate -ot Int16 HYP_50M_SR_W.tif HYP_50M_SR_W_Int16.tif
Verwenden Sie gdalinfo zur Prüfung des Datentyps.
Größenanpassung¶
Der -outsize Parameter wird zur Steuerung der Größe der Ausgabedatei verwendet.
gdal_translate -outsize 50% 50% HYP_50M_SR_W.tif HYP_50M_SR_W_small.tif
Verwenden Sie gdalinfo zur Prüfung der Bildgröße.
Der Parameter -scale wird zur Skalierung verwendet. Eine explizite Kontrolle der Eingabe- und Ausgabegröße ist ebenfalls möglich. Über gdalinfo mit der Parameterübergabe -mm können die Pixel min/max-Werte ausgegeben werden.
Lassen Sie unser Bild in zwei Bilder über -srcwin aufsplitten, das eine Kopie auf Grundlage Pixel/line location (xoff yoff xsize ysize) erzeugt. Sie können auch -projwin verwenden und die Eckkoordinaten in Georeferenzierten Koordinaten (ulx uly lrx lry) angeben.
gdalinfo -mm HYP_50M_SR_W.tif
gdal_translate -srcwin 0 0 5400 5400 HYP_50M_SR_W.tif west.tif
gdal_translate -srcwin 5400 0 5400 5400 HYP_50M_SR_W.tif east.tif
Bildkatalog (tileindex) mit gdaltindex erzeugen¶
Sie können eine Shapedatei als Rasterbildkatalog erzeugen. Für jedes Bild wird ein Polygon mit dem Umring der Rasterdatei und dem Pfad zur Rasterdatei erzeugt.
gdaltindex index_natural_earth.shp *st.tif
Schauen Sie sich Ihre Ausgabe-Shapedatei mit QGIS und ogrinfo an (später werden Sie noch mehr über ogrinfo erfahren).
ogrinfo ../HYP_50M_SR_W/ index
INFO: Open of `../HYP_50M_SR_W/'
using driver `ESRI Shapefile' successful.
Layer name: index
Geometry: Polygon
Feature Count: 2
Extent: (-180.000000, -90.000000) - (180.000000, 90.000000)
Layer SRS WKT: (unknown)
location: String (255.0)
OGRFeature(index):0
location (String) = east.tif
POLYGON ((-0.00000000001796 90.0,179.999999999964047 90.0,179.999999999964047 -89.999999999982009,-0.00000000001796 -89.999999999982009,-0.00000000001796 90.0))
OGRFeature(index):1
location (String) = west.tif
POLYGON ((-179.999999999999972 90.0,-0.00000000001796 90.0,-0.00000000001796 -89.999999999982009,-179.999999999999972 -89.999999999982009,-179.999999999999972 90.0))
Umprojektion¶
Für diese Operation gehen wir davon aus, dass HYP_50M_SR_W.tif mit korrekten Grenzen angelegt wurde. Wir haben zu Beginn gesehen, dass die Datei über keine Angaben zum Koordinatenreferenzsystem verfügt. Der erste Schritt ist nun, dem Bild WGS84 als Koordinatenreferenzsystem zu zu weisen.
gdal_translate -a_srs WGS84 HYP_50M_SR_W.tif HYP_50M_SR_W_4326.tif
gdalwarp kann zur Umprojektion von Daten verwendet werden. Wir werden unser Bild nun von der Geographischen Projektion WGS84 in die Mercator Projektion umwandeln:
gdalwarp -t_srs '+proj=merc +datum=WGS84' HYP_50M_SR_W_4326.tif mercator.tif
Verwenden Sie gdalinfo, um sich die Veränderung anzuschauen. Schauen Sie sich das Bild auch mit QGIS an.
Nun projizieren wir in die Orthoprojektion.
gdalwarp -t_srs '+proj=ortho +datum=WGS84' HYP_50M_SR_W_4326.tif ortho.tif
Beachten Sie, wie die Pole abgeschnitten werden. Weil die Ecken an den Polen nicht umprojiziert werden können, kann gdalwarp nicht alle Daten lesen. Als Lösung können wir gdalwarp zwingen, ein wenig zusätzliche Daten zu lesen. Zu diesem Thema erfahren Sie mehr im Raster-Tutorial http://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial.
Zusammenfassen von Daten¶
gdal_merge.py ist ein Python Skript, das für einfache Zusammenfassungen verwendet werden kann. Fassen Sie die Dateien east.tif und west.tif in eine Datei zusammen.
gdal_merge.py east.tif west.tif -o merged.tif
Diese Aufgabe kann auch mit gdalwarp gelöst werden. gdalwarp hat einige Vorteile gegenüber gdal_merge, kann aber langsam sein, wenn es darum geht, viele Dateien zusammen zu fassen:
gdalwarp east.tif west.tif warpmerged.tif
Lernen Sie OGR kennen¶
cd /home/user/gdal_natural_earth/
Tip
Schauen Sie sich die Shapedatei mit einem Desktop GIS wie QGIS an.
Nutzen Sie ogrinfo zur Ausgabe von Informationen über Vektordaten¶
ogrinfo -ro /home/user/gdal_natural_earth
INFO: Open of `/home/user/gdal_natural_earth'
using driver `ESRI Shapefile' successful.
1: ne_10m_populated_places (3D Point)
2: ne_10m_geography_regions_polys (3D Polygon)
3: ne_10m_admin_1_states_provinces_shp (3D Polygon)
4: ne_10m_urban_areas (3D Polygon)
5: ne_10m_geography_marine_polys (3D Polygon)
6: ne_10m_land (3D Polygon)
7: ne_10m_geography_regions_elevation_points (3D Point)
8: ne_10m_admin_0_countries (3D Polygon)
9: ne_10m_rivers_lake_centerlines (3D Line String)
10: ne_10m_lakes (3D Polygon)
11: ne_10m_geography_regions_points (3D Point)
12: ne_10m_ocean (3D Polygon)
Lassen Sie sich eine Zusammenfassung zu Ihren Daten mit ogrinfo und -so ausgeben.
ogrinfo -ro -so ne_10m_admin_0_countries.shp ne_10m_admin_0_countries
INFO: Open of `ne_10m_admin_0_countries.shp'
using driver `ESRI Shapefile' successful.
Layer name: ne_10m_admin_0_countries
Geometry: 3D Polygon
Feature Count: 254
Extent: (-180.000000, -90.000000) - (180.000000, 83.634101)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
DATUM["WGS_1984",
SPHEROID["WGS_84",6378137.0,298.257223563]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]
scalerank: Integer (4.0)
featurecla: String (30.0)
labelrank: Real (16.6)
sovereignt: String (254.0)
sov_a3: String (254.0)
adm0_dif: Real (16.6)
level: Real (16.6)
type: String (254.0)
admin: String (254.0)
adm0_a3: String (254.0)
geou_dif: Real (16.6)
geounit: String (254.0)
gu_a3: String (254.0)
su_dif: Real (16.6)
subunit: String (254.0)
su_a3: String (254.0)
brk_diff: Real (16.6)
name: String (254.0)
name_long: String (254.0)
brk_a3: String (254.0)
brk_name: String (254.0)
brk_group: String (254.0)
abbrev: String (254.0)
postal: String (254.0)
formal_en: String (254.0)
formal_fr: String (254.0)
note_adm0: String (254.0)
note_brk: String (254.0)
name_sort: String (254.0)
name_alt: String (254.0)
mapcolor7: Real (16.6)
mapcolor8: Real (16.6)
mapcolor9: Real (16.6)
mapcolor13: Real (16.6)
pop_est: Real (16.6)
gdp_md_est: Real (16.6)
pop_year: Real (16.6)
lastcensus: Real (16.6)
gdp_year: Real (16.6)
economy: String (254.0)
income_grp: String (254.0)
wikipedia: Real (16.6)
fips_10: String (254.0)
iso_a2: String (254.0)
iso_a3: String (254.0)
iso_n3: String (254.0)
un_a3: String (254.0)
wb_a2: String (254.0)
wb_a3: String (254.0)
woe_id: Real (16.6)
adm0_a3_is: String (254.0)
adm0_a3_us: String (254.0)
adm0_a3_un: Real (16.6)
adm0_a3_wb: Real (16.6)
continent: String (254.0)
region_un: String (254.0)
subregion: String (254.0)
region_wb: String (254.0)
name_len: Real (16.6)
long_len: Real (16.6)
abbrev_len: Real (16.6)
tiny: Real (16.6)
homepart: Real (16.6)
Wenn Sie ogrinfo ohne einen zusätzlichen Parameter aufrufen, erhalten Sie zuerst die Zusammenfassung der Daten gefolgt von einer Sektion für jeden einzelnen Datensatzes.
ogrinfo -ro ne_10m_admin_0_countries.shp ne_10m_admin_0_countries
Sie können die Ergebnisse von ogrinfo an grep weitergeben, um die Daten zu filtern und so beispielsweise nur das Attribut admin auszugeben.
ogrinfo ne_10m_admin_0_countries.shp ne_10m_admin_0_countries | grep 'admin '
admin (String) = Aruba
admin (String) = Afghanistan
admin (String) = Angola
admin (String) = Anguilla
admin (String) = Albania
admin (String) = Aland
admin (String) = Andorra
etc.
Sie können Ihre Daten in andere Formate konvertieren. Über –formats erhalten Sie die Liste der unterstützten Formate.
Nutzen Sie ogr2ogr um Vektordaten in verschiedene Formate zu konvertieren¶
Sie können ogr2ogr nutzen, um Daten aus einem Format in ein anderes Format zu konvertieren. Eine Liste der unterstützen Formate mit der Information, ob auf diese nur lesend bzw. auch schreibend zugegriffen werden kann, wenn die Option –formats ohne weitere Paramater verwendet wird.
Konvertieren Sie die Länder in das GML-Format.
ogr2ogr --formats
ogr2ogr -f GML countries.xml ne_10m_admin_0_countries.shp
Weitere Aufgaben¶
Hier sind ein paar weitere Aufgaben, die Sie lösen können.
- Verwenden Sie gdalwarp oder gdal_merge.py, um Ihr Daten zu kacheln
- Verwenden Sie gdaladdo, um interne Übersichten aufzubauen
- QGIS verwendet GDAL/OGR als Datenschnittstelle für die unterstützten Formate. Es steht auch ein GdalTools Plugin für die Verarbeitung von Rasterdaten zur Verfügung. Dieses ist auch in QGIS integriert.
- Verwenden Sie ogr2ogr für den Import/Export von Vektordaten in andere Formate, wie z.B. PostGIS. Schauen Sie sich auch die anderen Optionen von ogr2ogr an.
- Testen Sie das QGIS Plugin OGR-Layer-Konverter.
Der nächste Schritt¶
Dies war lediglich der erste Einstieg in GDAL und OGR. Es gibt sehr viele weitere Funktionalitäten zu entdecken.
GDAL Projektseite
Alles über OGR
GDAL Tutorial