从R中的光栅文件中提取时的线性缓冲区

时间:2016-02-05 21:39:24

标签: r raster r-raster

这可能是gis.stackexchange的一个但是 - 我正在使用栅格数据,并试图提取值。我遇到的问题是我的坐标并不总是与栅格数据重叠(我在海岸线上有坐标,有时候像素是离岸的)。我可以使用缓冲区,但是,有时结果是不合适的,因为缓冲区半径可能会导致提取物穿过岬角,从与我感兴趣的GPS坐标无关的像素中获取数据。

相反,我想创建一种直接缓冲到东方或西方(或在某些情况下为北/南)的方法 - 从我的坐标中提取直线上第一个像素中的值。 / p>

请考虑以下事项:

library(raster)
set.seed(pi)
# example data
r <- raster(ncol=36, nrow=18, crs='+proj=utm +zone=14 +datum=WGS84')
r[] <- 1:ncell(r)
r[sample(length(r), 250)] <- NA

xy <- cbind(x=-50, y=-15)

plot(r)
plot(SpatialPoints(xy), add=T, pch=19)
segments(-180, -15, 180, -15, lty=2)

生成

map

如果我只用50米的缓冲液提取......

extract(r, xy, buffer=50)
[[1]]
 [1] 227 228 229 230  NA 232  NA  NA 264 265  NA 267 268 269 297 298 299  NA  NA  NA 303  NA 305 306
[25]  NA 334 335 336 337 338 339  NA 341 342  NA  NA 371  NA  NA  NA  NA 376 377  NA 405 406 407  NA
[49]  NA 410 411 412 413 414  NA 442 443 444  NA  NA 447  NA  NA 450  NA 479  NA 481 482  NA 484  NA
[73]  NA 516 517 518  NA 520

(实际上,这仍然应该让我获得NA,因为缓冲区以米为单位......现在我更加困惑 - 尽管这与这个问题没有密切关系)

那么,如何沿着虚线提取西边或东边的第一个值,而不是使用循环缓冲区?

1 个答案:

答案 0 :(得分:1)

这是一种方法

library(raster)
set.seed(pi)
r <- raster(ncol=36, nrow=18, crs='+proj=utm +zone=14 +datum=WGS84')
r[] <- 1:ncell(r)
r[sample(length(r), 250)] <- NA
xy <- cbind(x=-50, y=-15)

row <- rowFromY(r, xy[,2])
col <- colFromX(r, xy[,1])

left <- rev(na.omit(r[row, 1:col]))[1]
right <- na.omit(r[row, col:ncol(r)])[1]

left
##[1] 371
right
##[1] 376