Làm việc với dữ liệu raster

Làm việc với Dữ liệu Không gian địa lý trong Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Minh họa lưới giá trị

Nguồn ảnh: Tài liệu QGIS

Làm việc với Dữ liệu Không gian địa lý trong Python

Dữ liệu raster

Bản đồ xác suất mưa

Làm việc với Dữ liệu Không gian địa lý trong Python

Dữ liệu raster nhiều băng

Làm việc với Dữ liệu Không gian địa lý trong Python

Gói rasterio

import rasterio
  • Ràng buộc “Pythonic” cho GDAL
  • Đọcghi tệp raster
  • Công cụ xử lý (mặt nạ, phép chiếu lại, nội suy lại, ..)

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

Làm việc với Dữ liệu Không gian địa lý trong Python

Mở tệp raster

import rasterio

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

Siêu dữ liệu:

src.count
1
src.width, src.height
(4320, 2160)
Làm việc với Dữ liệu Không gian địa lý trong Python

Dữ liệu raster = mảng numpy

array = src.read()

Mảng numpy chuẩn:

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)
Làm việc với Dữ liệu Không gian địa lý trong Python

Vẽ biểu đồ dữ liệu raster

Dùng phương thức rasterio.plot.show():

import rasterio.plot

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

Làm việc với Dữ liệu Không gian địa lý trong Python

Trích xuất thông tin dựa trên dữ liệu vector

rasterstats: Thống kê tóm tắt cho raster địa lý dựa trên hình học vector (https://github.com/perrygeo/python-rasterstats)

Làm việc với Dữ liệu Không gian địa lý trong Python

Trích xuất giá trị raster với rasterstats

  • Với vector điểm:

    rasterstats.point_query(geometries, "path/to/raster", 
                            interpolation='nearest'|'bilinear')
    
  • Với vector đa giác:

    rasterstats.zonal_stats(geometries, "path/to/raster",
                            stats=['min', 'mean', 'max'])
    
Làm việc với Dữ liệu Không gian địa lý trong Python

Trích xuất giá trị raster với 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
..           ...          ...                          ...             ...
Làm việc với Dữ liệu Không gian địa lý trong Python

Ayo berlatih!

Làm việc với Dữ liệu Không gian địa lý trong Python

Preparing Video For Download...