Working with Geospatial Data in Python
Joris Van den Bossche
Open source software developer and teacher, GeoPandas maintainer

Image source: QGIS documentation



import rasterio
import rasterio
src = rasterio.open("DEM_world.tif")
Metadata:
src.count
1
src.width, src.height
(4320, 2160)
array = src.read()
Standard 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)
Using the rasterio.plot.show() method:
import rasterio.plot
rasterio.plot.show(src, cmap='terrain')


rasterstats: Summary statistics of geospatial raster datasets based on vector geometries (https://github.com/perrygeo/python-rasterstats)
For point vectors:
rasterstats.point_query(geometries, "path/to/raster",
interpolation='nearest'|'bilinear')
For polygon vectors:
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
.. ... ... ... ...
Working with Geospatial Data in Python