Arbeta med rasterdata

Arbeta med geospatial data i Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Illustration av ett rutnät med värden

Bildkälla: QGIS-dokumentation

Arbeta med geospatial data i Python

Rasterdata

Karta över sannolikhet för regn

Arbeta med geospatial data i Python

Rasterdata med flera band

Arbeta med geospatial data i Python

Paketet rasterio

import rasterio
  • "Pythoniska" bindningar till GDAL
  • Läsning och skrivning av rasterfiler
  • Bearbetningsverktyg (maskering, reprojektion, omsampling, ...)

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

Arbeta med geospatial data i Python

Öppna en rasterfil

import rasterio

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

Metadata:

src.count
1
src.width, src.height
(4320, 2160)
Arbeta med geospatial data i Python

Rasterdata = numpy-array

array = src.read()

Vanlig 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)
Arbeta med geospatial data i Python

Visualisera en rasterdatamängd

Använd metoden rasterio.plot.show():

import rasterio.plot

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

Arbeta med geospatial data i Python

Extrahera information baserat på vektordata

rasterstats: Sammanfattande statistik för geospatiala rasterdatamängder baserat på vektorgeometrier (https://github.com/perrygeo/python-rasterstats)

Arbeta med geospatial data i Python

Extrahera rastervärden med rasterstats

  • För punktvektorer:

    rasterstats.point_query(geometries, "path/to/raster", 
                            interpolation='nearest'|'bilinear')
    
  • För polygonvektorer:

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Arbeta med geospatial data i Python

Extrahera rastervärden med 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
..           ...          ...                          ...             ...
Arbeta med geospatial data i Python

Nu kör vi en övning!

Arbeta med geospatial data i Python

Preparing Video For Download...