Lucrul cu date raster

Lucrul cu date geospațiale în Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Ilustrație grilă de valori

Sursă imagine: documentația QGIS

Lucrul cu date geospațiale în Python

Date raster

Hartă probabilitate precipitații

Lucrul cu date geospațiale în Python

Date raster cu benzi multiple

Lucrul cu date geospațiale în Python

Pachetul rasterio

import rasterio
  • Legături „Pythonice" cu GDAL
  • Citirea și scrierea fișierelor raster
  • Instrumente de procesare (mascare, reproiectare, reșantionare, ..)

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

Lucrul cu date geospațiale în Python

Deschiderea unui fișier raster

import rasterio

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

Metadate:

src.count
1
src.width, src.height
(4320, 2160)
Lucrul cu date geospațiale în Python

Date 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)
Lucrul cu date geospațiale în Python

Vizualizarea unui set de date raster

Utilizând metoda rasterio.plot.show():

import rasterio.plot

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

Lucrul cu date geospațiale în Python

Extragerea informațiilor pe baza datelor vectoriale

rasterstats: Statistici rezumative ale seturilor de date raster geospaciale bazate pe geometrii vectoriale (https://github.com/perrygeo/python-rasterstats)

Lucrul cu date geospațiale în Python

Extragerea valorilor raster cu rasterstats

  • Pentru vectori de tip punct:

    rasterstats.point_query(geometries, "path/to/raster", 
                            interpolation='nearest'|'bilinear')
    
  • Pentru vectori de tip poligon:

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Lucrul cu date geospațiale în Python

Extragerea valorilor raster cu 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
..           ...          ...                          ...             ...
Lucrul cu date geospațiale în Python

Să exersăm!

Lucrul cu date geospațiale în Python

Preparing Video For Download...