r - 如何找出两个栅格层的 x/y 偏移?
问题描述
关于由于数据缺陷而不完全匹配的两个栅格层,我想知道如何找出这两个层之间的 x/y 偏移,以使用 raster::shift() 正确对齐它们
我已经尝试使用 qgis 研究 x/y 位移,但我刚刚找到了地理配准工具,提供重新定位栅格图层但不是交互式的。我正在寻找一种可能性,可以在底图上移动有缺陷的栅格并获取有关 x/y 偏移的信息。
我不是在寻找一种解决方案,我必须设置特定的地理参考点来对齐两个栅格图层,因为我正在处理一个很难找到匹配点的高度动态的景观,但是可以通过以下方式对齐栅格图层数据集提供的纹理信息。
代码示例应类似于用户@dTanMan URL:https ://gis.stackexchange.com/users/77712/dtanman在此帖子中提供的解决方案 URL: https ://gis.stackexchange.com/a/201750
raster <- raster()
raster <- shift(raster, x=5, y=-15)
非常感谢,干杯,Explorer
解决方案
也许你可以使用这样的东西
示例数据
library(raster)
a <- raster(ncol=20, nrow=20, xmn=0,xmx=20,ymn=0,ymx=20)
values(a) <- 1:400
set.seed(3)
b <- a + runif(400)
比较单元格值相似性的函数
rmse <- function(obs, prd) {
sqrt(mean((obs-prd)^2, na.rm=TRUE))
}
来自参考栅格的值。如果栅格非常大,可能需要采样
nsamples <- 10000
s <- sampleRegular(a, nsamples, cells=TRUE)
sample_a <- s[,2]
要比较的位置
xy <- xyFromCell(a, s[,1])
细胞移位的测试范围
xrange <- -5:5 * xres(a)
yrange <- -5:5 * yres(a)
存储结果的矩阵
result <- cbind(rep(xrange, each=length(yrange)), rep(yrange, length(xrange)), NA)
colnames(result) <- c("dx", "dy", "rmse")
循环单元移位组合
i <- 1
for (dx in xrange) {
for (dy in yrange) {
x <- shift(b, dx, dy)
sample_b <- extract(x, xy)
result[i,3] <- rmse(sample_a, sample_b)
i <- i + 1
}
}
结果表明 dx=0 和 dy=0 在这种情况下是最好的。
r <- result[order(result[,3]), ]
head(r)
# dx dy rmse
#[1,] 0 0 0.5734866
#[2,] 1 0 0.5800670
#[3,] -1 0 1.5252878
#[4,] 2 0 1.5302921
#[5,] -2 0 2.5153573
#[6,] 3 0 2.5157728
测试
bb <- shift(b, dx=r[1,1], dy=r[1,2])
rmse(values(a), values(bb))
#[1] 0.5734866
推荐阅读
- python - 为什么在 OpenCV Python 中按位发送错误?
- c# - C# 返回(动态还是匿名?)对象,具有来自其他方法的返回值作为属性
- xml - 定义我的 sympleTypes 给出“类型未声明,或者不是简单类型”
- testing - TestCafe 使用 --ssl 命令抛出 Mac 验证失败错误
- c# - 如果未在 ASP.NET 中进行身份验证,将用户重定向到登录页面?
- db2 - 复合主键列的索引
- windows - 无法使用 microsoft buisniss 帐户登录 onedrive
- python - 我收到错误:ModuleNotFoundError: No module named 'PIL'
- php - 移动关联数组时保留键
- angular - 在 Angular 应用程序中安装“fabric-customise-controls”