Saya menggunakan paket terra untuk mengekstrak aplikasi pestisida dari file raster. Pada langkah ekstrak tampaknya terra menghapus beberapa baris. Dalam contoh ini ada 19 peringatan di mana dikatakan:

Gagal menghitung min/maks, tidak ada piksel valid yang ditemukan dalam pengambilan sampel. (Galat GDAL 1)

Setelah langkah ekstrak, saya memiliki lebih sedikit baris yang tersisa dan tampaknya telah menjatuhkan beberapa baris.

Langkah ini bekerja dengan baik menggunakan raster (dari sini Menggunakan raster untuk menghitung rata-rata aplikasi dan total aplikasi pestisida, tetapi jumlahnya tidak bertambah) tetapi sayangnya lambat mengingat jumlah file yang harus saya proses.

Adakah ide apa arti kesalahan ini dan bagaimana cara mengatasinya?

Berikut kodenya:

## Terra ----

data(wrld_simpl)

## Need to create a SparVector for terra
wrld_simpl = vect(wrld_simpl)

r <- terra::rast("https://raw.github.com/hansronald/Pesticide-data/master/APR_Soybean_Glyphosate_2015_L.tif")

## Remove 
r <- terra::clamp(r, lower=0, values=FALSE)

# area is in ha (values in raster are kg / ha per year)
a <- terra::area(r, sum=FALSE, mask=TRUE) * 0.0001

## Get the total area that pesticide has been applied to
tot_area <- terra::extract(a, wrld_simpl, fun = sum, na.rm = TRUE)

## Calculate total application in each cell
rtot  <- r * a

## Calculate total application in each country
tot_app  <- terra::extract(rtot, wrld_simpl, fun = sum, na.rm = TRUE)

## Mean application rate in each country
mean_app <- terra::extract(r, wrld_simpl, fun = mean, na.rm = TRUE)

## Save data to corresponding country
world_data = data.frame(wrld_simpl$NAME, wrld_simpl$ISO3)
world_data = data.frame(world_data, mean_app, tot_app, tot_area)
2
Robin Lindström 9 Mei 2021, 00:40

1 menjawab

Jawaban Terbaik

Ini terjadi karena beberapa poligon sangat kecil sehingga tidak menutupi sel raster. Ini sekarang telah diperbaiki di versi pengembangan (terra >= 1.2.8); tapi di sini ada pendekatan alternatif dengan paket exactrextractr --- ini cepat dan memberi Anda perkiraan yang sangat tepat, yang sangat relevan ketika sel raster Anda relatif besar seperti dalam kasus ini (walaupun wrld_simpl agak tidak tepat).

library(raster)
library(sf)
library(exactextractr)
ra <- raster(a)
wsf = st_as_sf(wrld_simpl)
e <- exact_extract(ra, wsf, "sum")
1
Robert Hijmans 9 Mei 2021, 02:45