../../_images/logo_gdal.png ../../_images/OSGeo_project.png

Guida rapida GDAL/OGR

Questa Guida Rapida è divisa in due parti: GDAL (dati raster) e OGR (dati vettoriali).

Questa Guida Rapida descrive come:

GDAL
  • Esplora i tuoi dati di immagine con gdalinfo

  • Formatta le traduzioni con gdal_translate

  • Riproietta i tuoi dati con gdalwarp

  • Mosaica i tuoi dati con gdal_warp o gdal_merge.py

  • Costruisci uno shapefile come tileindex raster con gdaltindex

OGR
  • ottieni informazioni sui tuoi dati con ogrinfo

  • usa ogr2ogr per trasformare i tuoi dati in altri formati

L’unica cosa di cui avrai bisogno per questo quickstart è un terminale. Se vuoi visualizzare i risultati, puoi usare una delle applicazioni Desktop GIS Software su OSGeoLive come QGIS.

Conosci GDAL

Trovi i dati demo in /usr/local/share/data. Guarda Natural Earth in questa guida rapida. Lavora con una copia dei dati. Quindi il primo passo è copiare i dati nella tua directory home.

cd /home/user
cp -R /usr/local/share/data/natural_earth2/ ./gdal_natural_earth

Troverai quindi un file Raster NaturalEarth e un file World .tfw presso:

ls /home/user/gdal_natural_earth/HYP_50M_SR_W.*

Suggerimento

Apri il file con un Desktop GIS come QGIS e guardalo.

Ottieni informazioni sui dati raster con gdalinfo

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
Nota:
  • Driver è «GTiff/GeoTIFF»

  • La dimensione è 10800x5400

  • 3 Bande di tipo Byte.

  • Coordinate

  • nessun sistema di coordinate

Traduzione del formato semplice

Per prima cosa conosci i tuoi driver. Lo switch a riga di comando –formats di gdal_translate può essere usato per vedere una lista di driver di formato disponibili.

Ogni formato riporta se è
  • read only (ro),

  • read/write (rw) o

  • read/write/update (rw+).

gdal_translate --formats

Lo switch da riga di comando –format può essere usato per interrogare i dettagli su un particolare driver, incluse le opzioni di creazione e i tipi di dati consentiti.

gdalinfo --format jpeg
gdal_translate --format png

Traduzione

Le traduzioni sono effettuate con il comando gdal_translate. Il formato in uscita predefinito è GeoTIFF. Il flag -of è usato per selezionare un formato in uscita e il flag -co è usato per specificare un’opzione di creazione:

gdal_translate -of JPEG -co QUALITY=40 HYP_50M_SR_W.tif HYP_50M_SR_W.jpg

Lo switch -ot può essere usato per modificare il tipo di dati in uscita.

gdal_translate -ot Int16 HYP_50M_SR_W.tif HYP_50M_SR_W_Int16.tif

Usa gdalinfo per verificare il tipo di dati.

Ridimensionamento

Lo switch -outsize può essere usato per impostare la dimensione del file in uscita.

gdal_translate -outsize 50% 50% HYP_50M_SR_W.tif  HYP_50M_SR_W_small.tif

Usa gdalinfo per verificare la dimensione.

Lo switch -scale può essere usato per ridimensionare i dati. È disponibile anche il controllo esplicito degli intervalli di ingresso e uscita. Lo switch gdalinfo -mm può essere usato per vedere i valori min/max dei pixel.

Dividi la tua immagine in due con -srcwin che fa una copia basata sulla posizione dei pixel/linea (xoff yoff xsize ysize). Si potrebbe anche usare -projwin e definire gli angoli in coordinate georeferenziate (ulx uly lrx lry).

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

Raster tileindex con gdaltindex

È possibile costruire uno shapefile come un tileindex raster. Per ogni immagine viene generato un poligono con i limiti dell’estensione del poligono e il percorso del file.

gdaltindex index_natural_earth.shp *st.tif

Guarda il tuo shapefile in uscita con QGIS e ogrinfo (imparerai di più su ogrinfo più avanti in questo tutorial)

../../_images/gdal_gdaltindex.png
ogrinfo index_natural_earth.shp index_natural_earth
INFO: Open of `index_natural_earth.shp'
    using driver `ESRI Shapefile' successful.

Layer name: index_natural_earth
Geometry: Polygon
Feature Count: 2
Extent: (-180.000000, -90.000000) - (180.000000, 90.000000)
Layer SRS WKT: (unknown)
location: String (255.0)
OGRFeature(index_natural_earth):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_natural_earth):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))

Riproiezione

Per questo processo assumi che HYP_50M_SR_W.tif sia stato creato correttamente con i limiti. Come hai visto prima con gdainfo nessun sistema di coordinate è stato impostato. Quindi assegna WGS84 come sistema di coordinate all’immagine nel primo passo.

gdal_translate -a_srs WGS84 HYP_50M_SR_W.tif HYP_50M_SR_W_4326.tif

Il comando gdalwarp può essere usato per riproiettare le immagini. Qui riproietta l’immagine geografica WGS84 alla proiezione Mercator:

gdalwarp -t_srs '+proj=merc +datum=WGS84' HYP_50M_SR_W_4326.tif mercator.tif

Usa gdalinfo per verificare il cambiamento e vedi l’immagine.

../../_images/gdal_mercator.png

Qui riproietta alla proiezione Ortho.

gdalwarp -t_srs '+proj=ortho +datum=WGS84' HYP_50M_SR_W_4326.tif ortho.tif
../../_images/gdal_ortho.png

Noti come i poli sono tagliati? Questo perché i bordi al polo non possono essere riproiettati, gdalwarp non legge tutti i dati. Possiamo forzare gdalwarp a leggere un mucchio di dati in eccesso intorno ai pezzi come un modo per risolvere questo. Leggi di più su questo nel RasterTutorial https://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial.

Mosaico

gdal_merge.py è uno script python che può essere usato per semplici compiti di mosaico. Mosaico di east.tif e west.tif in un unico file:

gdal_merge.py  east.tif west.tif -o merged.tif

Lo stesso compito può essere svolto con gdalwarp. gdalwarp ha una varietà di vantaggi rispetto a gdal_merge, ma può essere lento per unire molti file:

gdalwarp east.tif west.tif warpmerged.tif

Conosci OGR

cd /home/user/gdal_natural_earth/

Suggerimento

Apri il file shape con un Desktop GIS come QGIS e guardalo.

Ottieni informazioni sui dati vettoriali con ogrinfo

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)

Produci un sommario sui tuoi dati con ogrinfo con l’opzione -so.

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)

Se esegui ogrinfo senza un parametro, otterrai un riassunto dei tuoi dati e poi una sezione per ogni set di dati.

ogrinfo -ro ne_10m_admin_0_countries.shp ne_10m_admin_0_countries

Puoi inoltrare il risultato da ogrinfo a grep per filtrare e ottenere solo l’attributo COUNTRY.

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.

Puoi convertire i tuoi dati in altri formati. Ottieni la lista dei formati supportati con –formats.

Usa ogr2ogr per convertire dati tra formati di file

Puoi usare ogr2ogr per convertire semplici dati di elementi tra formati di file. Puoi usare –formats per ottenere la lista dei formati supportati con informazioni di lettura/scrittura.

Coverte i paesi in GML.

ogr2ogr --formats
ogr2ogr -f GML countries.xml ne_10m_admin_0_countries.shp

Cose da provare

Ecco alcune sfide aggiuntive da provare:

  • Prova gdalwarp o gdal_merge.py per mosaicare i tuoi dati

  • Prova gdaladdo per costruire panoramiche interne

  • QGIS usa anche GDAL/OGR per supportare molti formati. Fornisce anche il plugin GdalTools per elaborare i dati raster. Questo plugin integra i gdal-tools in QGIS.

  • Prova ogr2ogr per importare/esportare i tuoi dati vettoriali in altri formati come PostGIS. Guarda le opzioni che ogr2ogr fornisce.

  • Prova il plugin QGIS OGR-Layer-Konverter.

E ora?

Questo è solo il primo passo sulla strada per usare GDAL e OGR. Ci sono molte altre funzionalità che puoi provare.

Sito web del Progetto GDAL

Tutorial GDAL Raster

GDAL Workshop