Робота з растровими даними

Робота з геопросторовими даними в Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Ілюстрація сітки значень

Джерело зображення: документація QGIS

Робота з геопросторовими даними в Python

Растрові дані

Мапа ймовірності опадів

Робота з геопросторовими даними в Python

Растрові дані з кількома каналами

Робота з геопросторовими даними в Python

Пакет rasterio

import rasterio
  • «Пайтонічні» прив'язки до GDAL
  • Читання і запис растрових файлів
  • Інструменти обробки (маскування, репроєкція, ресемплінг тощо)

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

Робота з геопросторовими даними в Python

Відкриття растрового файлу

import rasterio

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

Метадані:

src.count
1
src.width, src.height
(4320, 2160)
Робота з геопросторовими даними в Python

Растрові дані = масив numpy

array = src.read()

Стандартний масив 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)
Робота з геопросторовими даними в Python

Візуалізація растрового набору даних

Використання методу rasterio.plot.show():

import rasterio.plot

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

Робота з геопросторовими даними в Python

Витяг інформації на основі векторних даних

rasterstats: зведена статистика растрових геопросторових наборів даних на основі векторних геометрій (https://github.com/perrygeo/python-rasterstats)

Робота з геопросторовими даними в Python

Витяг значень растру за допомогою rasterstats

  • Для точкових векторів:

    rasterstats.point_query(geometries, "path/to/raster", 
                            interpolation='nearest'|'bilinear')
    
  • Для полігональних векторів:

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Робота з геопросторовими даними в Python

Витяг значень растру за допомогою 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
..           ...          ...                          ...             ...
Робота з геопросторовими даними в Python

Давайте потренуємось!

Робота з геопросторовими даними в Python

Preparing Video For Download...