我把我的问题简化了一点,希望它有意义。
我有三个栅格,我正在使用。
library(raster)
LC <- raster("finalRRaster2018.tif")
nativeAET <- raster('kohala_aet_mm_ann_int.tif')
nonnativeAET <- raster('pred_AET.tif`)
栅格LC
是一个栅格,其土地覆盖属性值1为本地土地覆盖,0为非本地土地覆盖。
本地蒸散量和非本地蒸散量分别是本地物种和非本地物种的蒸散量。两个光栅的属性都在[015000]之间
id要做的是将1的所有值替换为nativeet值,将0的所有值替换为nonnativeet值。
我的想法是将土地覆盖光栅(值为1或0)转换为AET光栅(值介于0和15000之间)。
我使用了以下代码
native <- values(LC) == 1
nonative <- values(LC) ==0
LC[native] <- values(nativeAET)[native]
LC[nonnative] <- values(nonnativeAET)[nonnative]
但是当我绘制图表时,我得到警告,要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数
情节是这样的,
我的问题是,我希望生成的图看起来不那么厚。我觉得栅格没有正确对齐,但是当我检查栅格的范围和尺寸时,它们似乎都共享相同的投影。
非常感谢您的帮助!
假设更正了nonative
(one"n"
)中的错字,您的代码应该可以工作(并且速度很快)。
错误可能来自光栅的空间分辨率差异。因此,<代码>ncell(LC)!=ncell(nativeAET)和ncell(LC)!=ncell(非本地设置)。如果情况并非如此,则需要使用以下方法对光栅重新采样,例如:
nativeAET <- resample(LC, nativeAET, method='ngb')
nonnativeAET <- resample(LC, nonnativeAET, method='ngb')
如果LC光栅中只有两个值(0和1),则可以通过执行以下操作来加快代码速度:
AET <- nativeAET
AET[values(LC) == 0] <- values(nonnativeAET)[values(LC) == 0]
如果您提供一些代码生成的示例数据,这个问题将更容易回答。
示例数据:
library(raster)
nativeAET <- nonnativeAET <- LC <- raster(ncol=4, nrow=4)
values(nativeAET) <- 1:16
values(nonnativeAET) <- 21:36
values(LC) <- c(rep(0,8), rep(1,8))
方法1:
AETnative <- mask(nativeAET, LC, maskvalue=1, updatevalue=0)
AETnonnative <- mask(nonnativeAET, LC, maskvalue=0, updatevalue=0)
AET <- AETnative + AETnonnative
方法2:
AET <- mask(nativeAET, LC, maskvalue=1)
AET <- cover(AET, nonnativeAET)
问题内容: 我正在尝试拍摄图像并将其存储在16x16子图像数组中。我使用的图像是512x512像素。但是,在遍历循环时,getSubimage()被Raster异常停止。 这是代码: 这是错误: 问题答案: 您将错误的参数传递给。文档说… 参数: x-指定矩形区域的 左上角的X坐标y- 指定矩形区域的左上角的Y坐标 w- 指定矩形区域的宽度 h-指定高度矩形区域 您正在传递,这意味着如果= 256
下面的代码在我的图像上生成两个框。我正计划进一步分析这些框内的像素。 在下面的例子中,在红色方块的情况下,我不想继续下去,因为它的右上角有黑色像素。而我想继续在绿色方块的情况下,因为它没有一个黑色像素沿着它的边缘。
字符串方法有什么区别? 在下面的示例中,代码给出了< code >相同的输出。在这两种情况下,字符串的< code >所有实例都会被替换。 输出: 这里有一只狗,那里有一只 输出: 这里有一只狗,那里有一只
我目前正在将原始矩阵转换为光栅以使用焦距函数,然后我想将光栅转换回矩阵。但是,当我尝试将光栅函数用作时,出现了一条错误消息。矩阵()。即使有这个非常简单的例子: 以下是我得到的: 如果(!is.null(names(x)))列表(names(x),,则数组(x,c(length(x),1L)中出错: “dimnames”[1]的长度不等于数组范围 我正在使用RstuIO、R版本3.4.0和、和库。
我有一个带有空间坐标和一个变量的矩阵数据。空间分辨率为1000米。 我想将其转换为光栅格式。 我使用下面的代码来完成它。但我得到的决心与我得到的不一样。有没有更好的方法可以用我的真实数据获得相同的分辨率?
我有一个问题,我必须选择部分在一个圆内的所有正方形(想想像素)(即使圆只穿过正方形的一个小角,但如果它穿过角顶点中的一个就不是)。半径是像素大小的整数倍。 问题是圆心在像素之间,即在四个像素的角顶点上。 我只想访问每个像素一次。 例如,我想选择以下图像中的所有白色像素: 对于圆心位于像素中心的圆,这不是问题,我可以使用Bresenham算法的通常形式: