Werken met rasterdata

Werken met georuimtelijke data in Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Raster met waarderaster illustratie

Bron: QGIS-documentatie

Werken met georuimtelijke data in Python

Rasterdata

Kaart met regenkans

Werken met georuimtelijke data in Python

Rasterdata met meerdere banden

Werken met georuimtelijke data in Python

Het rasterio-pakket

import rasterio
  • "Pythonic" bindings voor GDAL
  • Lezen en schrijven van rasterbestanden
  • Verwerkingstools (maskeren, herprojectie, resampling, ..)

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

Werken met georuimtelijke data in Python

Een rasterbestand openen

import rasterio

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

Metadata:

src.count
1
src.width, src.height
(4320, 2160)
Werken met georuimtelijke data in Python

Rasterdata = numpy-array

array = src.read()

Standaard numpy-array:

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)
Werken met georuimtelijke data in Python

Een raster plotten

Met de methode rasterio.plot.show():

import rasterio.plot

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

Werken met georuimtelijke data in Python

Informatie extraheren op basis van vectordata

rasterstats: Samenvattende statistieken van geospatiale rasterdata op basis van vectorgeometrieën (https://github.com/perrygeo/python-rasterstats)

Werken met georuimtelijke data in Python

Rasterwaarden extraheren met rasterstats

  • Voor puntvectoren:

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

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Werken met georuimtelijke data in Python

Rasterwaarden extraheren met 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
..           ...          ...                          ...             ...
Werken met georuimtelijke data in Python

Laten we oefenen!

Werken met georuimtelijke data in Python

Preparing Video For Download...