Почему пакет terra сбрасывает эти значения при использовании функции извлечения?

Я использую пакет terra для извлечения пестицидов из растровых файлов. На этапе извлечения кажется, что terra удаляет несколько строк. В этом примере есть 19 предупреждений, в которых говорится:

Не удалось вычислить мин. / Макс., В выборке не обнаружены допустимые пиксели. (Ошибка GDAL 1)

После этапа извлечения у меня осталось меньше строк, и, похоже, несколько строк упало.

Этот шаг отлично работал с использованием растра (отсюда Использование растра для расчета среднего и общего внесения пестицидов, но числа не складываются ), но, к сожалению, он медленный, учитывая количество файлов, которые мне нужно обработать.

Есть идеи, что означает эта ошибка и как ее решить?

Вот код:

      ## 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)

1 ответ

Это происходит потому, что некоторые полигоны настолько малы, что не покрывают ячейку растра. Теперь это исправлено в разрабатываемой версии (terra>= 1.2.8); но вот альтернативный подход с exactrextractr package --- это быстро и дает вам очень точную оценку, что особенно актуально, когда ваши растровые ячейки относительно большие, как в этом случае (хотя wrld_simpl довольно неточно).

      library(raster)
library(sf)
library(exactextractr)
ra <- raster(a)
wsf = st_as_sf(wrld_simpl)
e <- exact_extract(ra, wsf, "sum")
Другие вопросы по тегам