Trabalhando com dados raster

Trabalhando com Dados Geoespaciais em Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Ilustração de grade de valores

Fonte da imagem: documentação do QGIS

Trabalhando com Dados Geoespaciais em Python

Dados raster

Mapa de chance de chuva

Trabalhando com Dados Geoespaciais em Python

Dados raster com múltiplas bandas

Trabalhando com Dados Geoespaciais em Python

O pacote rasterio

import rasterio
  • Bindings "pythonic" para GDAL
  • Leitura e escrita de arquivos raster
  • Ferramentas de processamento (masking, reprojection, resampling, ..)

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

Trabalhando com Dados Geoespaciais em Python

Abrindo um arquivo raster

import rasterio

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

Metadados:

src.count
1
src.width, src.height
(4320, 2160)
Trabalhando com Dados Geoespaciais em Python

Dados raster = numpy array

array = src.read()

numpy array padrão:

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)
Trabalhando com Dados Geoespaciais em Python

Plotando um conjunto raster

Usando o método rasterio.plot.show():

import rasterio.plot

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

Trabalhando com Dados Geoespaciais em Python

Extraindo informações com base em dados vetoriais

rasterstats: Estatísticas de resumo de conjuntos raster geoespaciais com base em geometrias vetoriais (https://github.com/perrygeo/python-rasterstats)

Trabalhando com Dados Geoespaciais em Python

Extrair valores raster com rasterstats

  • Para vetores de pontos:

    rasterstats.point_query(geometries, "path/to/raster", 
                            interpolation='nearest'|'bilinear')
    
  • Para vetores de polígonos:

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Trabalhando com Dados Geoespaciais em Python

Extrair valores raster com 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
..           ...          ...                          ...             ...
Trabalhando com Dados Geoespaciais em Python

Vamos praticar!

Trabalhando com Dados Geoespaciais em Python

Preparing Video For Download...