计算栅格的重心

4
我有一个列表(s),其中包含有关南美洲许多动物可能位置的信息。例如,这是存储信息的类型以及绘制第一个个体时它的外观。
例如:
> s[1]
[[1]]
class       : RasterLayer 
dimensions  : 418, 313, 130834  (nrow, ncol, ncell)
resolution  : 0.16666, 0.16666  (x, y)
extent      : -86.333, -34.16842, -55.91633, 13.74755  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : 0, 1  (min, max)
> plot(s[[1]])

enter image description here

注意:绿色区域都是“可能”的位置,而灰色区域则是“不可能”的位置。
我想要计算这个可能位置的质心(即绿色区域的质心)。
以下是@dww提出的解决方案(对于模拟数据有效),但在我的数据中出现错误信息。
colMeans(xyFromCell(s, which(s[]==1)))

Error in xyFromCell(s[1], which(s[] == 1)) : 
trying to get slot "extent" from an object of a basic class ("list") with no slots

1
你可以尝试在这里搜索和询问:https://gis.stackexchange.com/,因为你的答案基本上是在寻找一个工具,而那个网站更偏向于这种类型的问题。 - MichaelChirico
https://gis.stackexchange.com/search?q=centroid+raster+%5Br%5D - MichaelChirico
我建议不要这样做。如果你的绿色斑点看起来像这样:O O(两个斑点中间有一个间隙),那么质心不在任何一个斑点中。质心也不是最可能的位置。 - Richard
@MichaelChirico,感谢您提供的有用建议。我之前已经找过那里了,但显然我没有使用正确的搜索词,因为我只看到了ArcGIS相关的问题。 - tnt
2
@Richard 我也对这种方法持谨慎态度,但我想通过视觉检查结果来确保质心确实落在可能的值范围内。 - tnt
1
@moody_mudskipper 我相信自从我第一次发表意见以来,已经进行了相当大的编辑。 - MichaelChirico
1个回答

6
为了找到栅格r值为1的单元格的质心,您可以使用以下方法:
colMeans(xyFromCell(r, which(r[]==1)))

基本上,质心位于子集位置的纬度/经度的平均值处。

以下是一些可重复的虚拟数据以进行测试:

r = raster(matrix(sample(0:1, 10000,T), nrow=100,ncol=100))

谢谢您的建议。根据您提供的示例数据,这似乎可以工作。然而,当我尝试在我的数据上运行时,出现以下错误信息: Error in xyFromCell(s, which(s[] == 1)) : trying to get slot "extent" from an object of a basic class ("list") with no slots您有什么想法,为什么这不起作用? - tnt
您没有提供示例数据,因此我无法百分之百确定。但我几乎可以肯定,s 是一个栅格对象的列表,而不是一个单独的栅格对象。您需要对列表中的元素执行栅格分析,而不是对整个列表进行操作。 - dww
您对如何实现有什么想法吗?我已经尝试过:colMeans(xyFromCell(s[1], which(s[1]==1)))以便只提取列表中的第一个对象。但是我仍然收到相同的错误消息。除此之外,我不知道还有什么其他方法可以一次只处理一个光栅。 - tnt
我真的没有办法生成全部或部分数据集,这是一个长时间的多步骤过程才能到达这个点。 - tnt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接