Lavorare con dati raster

Lavorare con i dati geospaziali in Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Illustrazione di una griglia di valori

Fonte immagine: documentazione QGIS

Lavorare con i dati geospaziali in Python

Dati raster

Mappa della probabilità di pioggia

Lavorare con i dati geospaziali in Python

Dati raster con più bande

Lavorare con i dati geospaziali in Python

Il pacchetto rasterio

import rasterio
  • Binding "Pythonic" a GDAL
  • Lettura e scrittura di file raster
  • Strumenti di processing (mascheratura, riproiezione, ricampionamento, ..)

https://rasterio.readthedocs.io/en/latest/

Lavorare con i dati geospaziali in Python

Aprire un file raster

import rasterio

src = rasterio.open("DEM_world.tif")

Metadati:

src.count
1
src.width, src.height
(4320, 2160)
Lavorare con i dati geospaziali in Python

Dati raster = array numpy

array = src.read()

Array numpy standard:

array
array([[[-4290, -4290, -4290, ..., -4290, -4290, -4290],
        [-4278, -4278, -4278, ..., -4278, -4278, -4278],
        [-4269, -4269, -4269, ..., -4269, -4269, -4269],
        ...,
        [ 2804,  2804,  2804, ...,  2804,  2804,  2804],
        [ 2804,  2804,  2804, ...,  2804,  2804,  2804],
        [ 2804,  2804,  2804, ...,  2804,  2804,  2804]]], dtype=int16)
Lavorare con i dati geospaziali in Python

Grafici di un dataset raster

Usare il metodo rasterio.plot.show():

import rasterio.plot

rasterio.plot.show(src, cmap='terrain')

Lavorare con i dati geospaziali in Python

Estrarre informazioni basate su dati vettoriali

rasterstats: Statistiche riassuntive di dataset raster geospaziali basate su geometrie vettoriali (https://github.com/perrygeo/python-rasterstats)

Lavorare con i dati geospaziali in Python

Estrarre valori raster con rasterstats

  • Per vettori punto:

    rasterstats.point_query(geometries, "path/to/raster", 
                            interpolation='nearest'|'bilinear')
    
  • Per vettori poligono:

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Lavorare con i dati geospaziali in Python

Estrarre valori raster con rasterstats

result = rasterstats.zonal_stats(countries.geometry, "DEM_gworld.tif", 
                                 stats=['mean'])

countries['mean_elevation'] = pd.DataFrame(result)
countries.sort_values('mean_elevation', ascending=False).head()
            name    continent                     geometry  mean_elevation
157   Tajikistan         Asia  POLYGON ((74.98 37.41, ...      3103.231105
85    Kyrgyzstan         Asia  POLYGON ((80.25 42.34, ...      2867.717142
24        Bhutan         Asia  POLYGON ((91.69 27.77, ...      2573.559846
119        Nepal         Asia  POLYGON ((81.11 30.18, ...      2408.907816
6     Antarctica   Antarctica  (POLYGON ((-59.57 -80.04...     2374.075028
..           ...          ...                          ...             ...
Lavorare con i dati geospaziali in Python

Esercitiamoci!

Lavorare con i dati geospaziali in Python

Preparing Video For Download...