在 Python 中处理地理空间数据
Joris Van den Bossche
Open source software developer and teacher, GeoPandas maintainer

图片来源:QGIS 文档



import rasterio
import rasterio
src = rasterio.open("DEM_world.tif")
元数据:
src.count
1
src.width, src.height
(4320, 2160)
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)
使用 rasterio.plot.show():
import rasterio.plot
rasterio.plot.show(src, cmap='terrain')


rasterstats:基于矢量几何对栅格数据集计算汇总统计 (https://github.com/perrygeo/python-rasterstats)
点要素:
rasterstats.point_query(geometries, "path/to/raster",
interpolation='nearest'|'bilinear')
多边形要素:
rasterstats.zonal_stats(geometries, "path/to/raster",
stats=['min', 'mean', 'max'])
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 中处理地理空间数据