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

如何使用 terra 复制此光栅脚本特别是在使用掩码功能时遇到困难?

如何解决如何使用 terra 复制此光栅脚本特别是在使用掩码功能时遇到困难?

我想从包含农药使用情况的栅格文件提取一些施用率、总施用量和面积。我有很多文件需要执行此操作,而光栅速度很慢,因此我需要在 terra 中执行此操作,但要努力复制蒙版功能

这是光栅中的代码(从这里复制:Using raster to calculate the mean application and total application of pesticides,but numbers not adding up):

library(tidyverse)

## With raster ----
data(wrld_simpl)
r <- raster::raster("https://raw.github.com/hansronald/pesticide-data/master/APR_Soybean_Glyphosate_2015_L.tif")
r <- raster::clamp(r,lower=0,useValues=FALSE)

# area in ha
a <- raster::area(r) * 100

## Get the mean application rate
mean_app <- raster::extract(r,wrld_simpl,fun = mean,na.rm = TRUE)
rtot  <- r * a

## Get the total application for each country
tot_app  <- raster::extract(rtot,fun = sum,na.rm = TRUE)

## Get the total area for each country
rarea <- mask(a,r)
tot_area <- raster::extract(rarea,na.rm = TRUE)

在地球上

## Terra ----

data(wrld_simpl)
wrld_simpl = vect(wrld_simpl)

r <- terra::rast("https://raw.github.com/hansronald/pesticide-data/master/APR_Soybean_Glyphosate_2015_L.tif")
r <- terra::clamp(r,values=FALSE)

# area in ha
a <- terra::area(r) * 100

mean_app <- terra::extract(r,na.rm = TRUE)
rtot  <- r * a
tot_app  <- terra::extract(rtot,na.rm = TRUE)

rarea <- terra::mask(a,r)
tot_area <- terra::extract(rarea,na.rm = TRUE)

但是当我尝试使用掩码时出现此错误

Error in (function (classes,fdef,mtable)  : 
  unable to find an inherited method for function ‘mask’ for signature ‘"numeric","SpatRaster"’

任何想法如何解决这个问题?

解决方法

area 中的 terra 方法与 raster 中的方法略有不同。在 terra 中,它可以返回一个 SpatRaster(每个像元的面积)或一个数字(总面积)。在您的情况下,a 是总面积,因此您不能将它与 mask 一起使用也就不足为奇了(在每一步检查对象当然很好。)

您可以使用 sum=FALSE 获得您想要的东西。通过添加 mask=TRUE,您可以完全跳过掩码步骤。

a <- terra::area(r,sum=FALSE,mask=TRUE) / 10000

还要注意单位是m2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?