Práce s rastrovými daty

Práce s geoprostorovými daty v Pythonu

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Ilustrace mřížky hodnot

Zdroj obrázku: dokumentace QGIS

Práce s geoprostorovými daty v Pythonu

Rastrová data

Mapa pravděpodobnosti srážek

Práce s geoprostorovými daty v Pythonu

Rastrová data s více pásmy

Práce s geoprostorovými daty v Pythonu

Balíček rasterio

import rasterio
  • „Pythonovské" vazby na GDAL
  • Čtení a zápis rastrových souborů
  • Nástroje pro zpracování (maskování, reprojekce, převzorkování, ..)

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

Práce s geoprostorovými daty v Pythonu

Otevření rastrového souboru

import rasterio

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

Metadata:

src.count
1
src.width, src.height
(4320, 2160)
Práce s geoprostorovými daty v Pythonu

Rastrová data = pole numpy

array = src.read()

Standardní pole numpy:

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)
Práce s geoprostorovými daty v Pythonu

Vizualizace rastrového datasetu

Pomocí metody rasterio.plot.show():

import rasterio.plot

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

Práce s geoprostorovými daty v Pythonu

Extrakce informací z vektorových dat

rasterstats: Souhrnné statistiky rastrových geodatasetů na základě vektorových geometrií (https://github.com/perrygeo/python-rasterstats)

Práce s geoprostorovými daty v Pythonu

Extrakce rastrových hodnot pomocí rasterstats

  • Pro bodové vektory:

    rasterstats.point_query(geometries, "path/to/raster", 
                            interpolation='nearest'|'bilinear')
    
  • Pro polygonové vektory:

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Práce s geoprostorovými daty v Pythonu

Extrakce rastrových hodnot pomocí 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
..           ...          ...                          ...             ...
Práce s geoprostorovými daty v Pythonu

Pojďme procvičovat!

Práce s geoprostorovými daty v Pythonu

Preparing Video For Download...