这可能是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)
生成
如果我只用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,因为缓冲区以米为单位......现在我更加困惑 - 尽管这与这个问题没有密切关系)
那么,如何沿着虚线提取西边或东边的第一个值,而不是使用循环缓冲区?
答案 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