【发布时间】:2018-10-09 04:32:31
【问题描述】:
我有一个名为 cr1 的对象,它是湖的大型 SpatialPixelsDataFrame。 这是该文件的链接: https://www.dropbox.com/s/uuvlmxmri144hp2/macrosmall.rdata?dl=0
我认为每个像素都有一个 1m x 1m 的单元格大小,但是我认为没有指定此属性。 “宏”是湖中沉水植物的测量高度。 结构是这样的。
Formal class 'SpatialPixelsDataFrame' [package "sp"] with 7 slots
..@ data :'data.frame': 252234 obs. of 1 variable:
.. ..$ macro: num [1:252234] 0.0468 0.0518 0.0445 0.046 0.0477 ...
..@ coords.nrs : num(0)
..@ grid :Formal class 'GridTopology' [package "sp"] with 3 slots
.. .. ..@ cellcentre.offset: Named num [1:2] 3404494 5872334
.. .. .. ..- attr(*, "names")= chr [1:2] "x" "y"
.. .. ..@ cellsize : Named num [1:2] 1 1
.. .. .. ..- attr(*, "names")= chr [1:2] "x" "y"
.. .. ..@ cells.dim : Named int [1:2] 776 536
.. .. .. ..- attr(*, "names")= chr [1:2] "x" "y"
..@ grid.index : int [1:252234] 415333 415334 415335 415336 415337 415338
415339 414554 414555 414556 ...
..@ coords : num [1:252234, 1:2] 3404666 3404667 3404668 3404669 3404670 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:252234] "949" "950" "951" "952" ...
.. .. ..$ : chr [1:2] "x" "y"
..@ bbox : num [1:2, 1:2] 3404493 5872333 3405269 5872869
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:2] "x" "y"
.. .. ..$ : chr [1:2] "min" "max"
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
.. .. ..@ projargs: chr NA
我想计算某些大型植物高度间隔所覆盖的面积(即“宏观”间隔所覆盖的面积)。
如何指定每个单元格的分辨率或大小 (=1m x 1m)? 哪个包和函数处理 SpatialPixelsDataFrame 的面积估计?
其实我目前只加载了地图
library(sp)
library(raster)
load("macrosmall.rdata")
并尝试了几件事:
area(cr1)
这将是我想要什么以及我想如何计算它的一个例子,但是数据框的规范不允许它
intervals <- list(c(0.1,0.2),
c(0.2,0.3),
c(0.3,0.4))
sapply(intervals, function(x) {
sum(cr1[] > x[1] & cr1s[] <= x[2])
})
但我基本上总是以同样的警告信息告终
警告信息: 在 .local(x, ...) 中: 此功能仅对具有经度/纬度坐标的 Raster* 对象有用
请注意,该区域非常小(25 公顷)。
谁能把我推向正确的方向?
【问题讨论】:
-
维度是
776和536,所以776 * 536 = 415936 m^2? -
这可能适用于地图的整个矩形区域。但是,湖不是矩形的,不会填满所有像素。
-
仅根据您提供的代码,例如
area(r),看起来您想要整个区域。由于您没有提供数据集的可重现示例,因此无法提供详细答案。 -
我编辑了原始问题并添加了我想要估计面积的“宏”变量的区间。
-
请分享您的数据的可重现示例
标签: r maps raster area spatial-data-frame