栅格数据处理

在 Python 中处理地理空间数据

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

数值网格示意图

图片来源:QGIS 文档

在 Python 中处理地理空间数据

栅格数据

降雨概率地图

在 Python 中处理地理空间数据

多波段栅格数据

在 Python 中处理地理空间数据

rasterio 包

import rasterio
  • GDAL 的"Pythonic"绑定
  • 读取写入栅格文件
  • 处理工具(掩膜、重投影、重采样等)

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 中处理地理空间数据

Passons à la pratique !

在 Python 中处理地理空间数据

Preparing Video For Download...