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

通过网格区域标准化 R 星对象?

如何解决通过网格区域标准化 R 星对象?

第一篇文章:)

我已经将我的 R 代码从 sp() 转换为 sf()/stars(),我仍在尝试掌握的一件事是计算网格中的区域。

这是一个示例代码来解释我的意思。

library(stars)
library(tidyverse)

# Reading in an example tif file,from stars() vignette
tif = system.file("tif/L7_ETMs.tif",package = "stars")
x = read_stars(tif)
x

# Get areas for each grid of the x object. Returns stars object with "area" in units of [m^2]
x_area <- st_area(x)
x_area

我尝试松散地采用此小插图 (https://github.com/r-spatial/stars/blob/master/vignettes/stars5.Rmd) 中的代码将 x 中的每个值除以其网格面积,但没有按预期工作(可能是因为我的对象是星星而不是 sf?)

x$test1 = x$L7_ETMs.tif / x_area  # Some computationally intensive calculation seems to happen,but doesn't produce the results I expect?

x$test1 = x$L7_ETMs.tif / x_area$area # Throws error,"non-conformable arrays"

似乎有效的是以下内容

x %>%
  mutate(test1 = L7_ETMs.tif / units::set_units(as.numeric(x_area$area),m^2))

以下是我对这段代码的担忧。

  1. 我担心当我将 x_area$area(一个矩阵,以纬度/经度表示的区域)转换为数值向量时,我可能会弄乱网格和它的区域之间的纬度/经度匹配。我做了一些粗略的测试,看看这些区域是否符合我的预期,但我担心这可能会导致难以捕捉的错误

  2. 我以正确的单位从“x_area”开始,只是在计算过程中删除然后再次设置单位,这似乎并不干净。

有人可以为我正在尝试做的事情建议一个“更清洁”的实现,即在始终保持单位的同时乘以或除以网格的面积?或者让我相信我的代码没问题?

谢谢!

解决方法

我不知道如何改进stars代码,但是您可以将得到的结果与此进行比较

tif <- system.file("tif/L7_ETMs.tif",package = "stars")
library(terra)
r <- rast(tif)

a <- cellSize(r,sum=FALSE)
x <- r / a

对于平面数据,您可以在可以安全地假设没有失真的情况下执行此操作(通常情况并非如此,但可能是这种情况)

y <- r / prod(res(r))

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