微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 terra 包在使用提取功能时会删除这些值?

如何解决为什么 terra 包在使用提取功能时会删除这些值?

我使用 terra 包从光栅文件提取农药应用。在提取步骤中, terra 似乎删除了一些行。在这个例子中,有 19 个警告说:

无法计算最小值/最大值,在采样中找不到有效像素。 (GDAL 错误 1)

提取步骤之后,我剩下的行变少了,而且似乎减少了一些行。

此步骤使用光栅(来自此处 Using raster to calculate the mean application and total application of pesticides,but numbers not adding up)运行良好,但不幸的是,考虑到我需要处理的文件数量,速度变慢了。

任何想法这个错误意味着什么以及如何解决它?

代码如下:

## 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,na.rm = TRUE)

## Mean application rate in each country
mean_app <- terra::extract(r,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)

解决方法

发生这种情况是因为某些多边形太小以至于无法覆盖栅格像元。现在已在 development version (terra >= 1.2.8) 中修复;但这里有一种使用 exactrextractr 包的替代方法 --- 这很快并且可以为您提供非常精确的估计,这在您的栅格单元相对较大时尤其重要(尽管 wrld_simpl相当不精确)。

library(raster)
library(sf)
library(exactextractr)
ra <- raster(a)
wsf = st_as_sf(wrld_simpl)
e <- exact_extract(ra,wsf,"sum")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?