0

我试图总结 NDVI 值的卫星图像栅格的值。我已经提取了数据,它似乎已经填充了一个我可以在控制台窗口中看到的列表,但是我无法使用“查看”功能看到它,也无法将其转换为 .csv。

示例数据

library(raster)
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
ndvi <- stack(r, r*2, r*3)
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
polys <- spPolygons(cds1, cds2)

提取值

v <- extract(ndvi, polys)

写入文件

write.csv(v, "test.csv")
#Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : arguments imply differing number of rows: 38, 23

str(v)
#List of 2
# $ : num [1:38, 1:3] 326 327 328 329 330 331 332 333 334 335 ...
#  ..- attr(*, "dimnames")=List of 2
#  .. ..$ : NULL
#  .. ..$ : chr [1:3] "layer.1" "layer.2" "layer.3"
# $ : num [1:23, 1:3] 173 208 209 244 245 280 281 282 315 316 ...
#  ..- attr(*, "dimnames")=List of 2
#  .. ..$ : NULL
#  .. ..$ : chr [1:3] "layer.1" "layer.2" "layer.3"

我希望能够在某个时候使用 NDVI 图像的单元格值的分布将其与另一组数据相关联,所以为了做到这一点,我需要有一个所有值的工作 csv细胞。先感谢您。

4

2 回答 2

0

我们不知道对象类型vals_03_01是什么,因为您没有提供有关shp对象的信息。根据 raster 和 sp 的输入,输出可能会有很大不同。如果空间矢量对象包含多边形,那么vals_03_01将是一个列表。如果shp是点,则提取将返回一个向量(对于单个栅格)或矩阵(对于堆栈/砖,其中列代表堆栈中的每个栅格)。

请使用 和 来查看vals_03_01对象的类别class、尺寸dim和结构str。这将告诉您您的数据是否适合将结果直接写入平面文件或lapply在导出前需要额外的处理/摘要(例如,)。很可能extract返回一个包含矩阵对象的列表。

于 2019-04-29T20:10:35.623 回答
0

v是一个列表。列表的每个元素都有一个多边形覆盖的栅格像元值。单元格的数量因多边形而异,因此您不能将其转换为矩形矩阵。

这意味着您不能使用write.csvor View

无论如何,您是否需要一个“csv”文件(您如何需要某种文件类型来进行关联)?你可以这样做saveRDS(v, "test.rds")

也许您希望每个多边形都有一个值?在这种情况下,您可以这样做:

v <- extract(ndvi, polys, mean, na.rm=TRUE)
v
#      layer.1  layer.2   layer.3
#[1,] 387.8158 775.6316 1163.4474
#[2,] 329.3913 658.7826  988.1739

write.csv(v, "test.csv")

?raster::extract

于 2019-04-30T01:50:29.043 回答