沿样条提取栅格像素的位置

时间:2019-08-07 03:37:19

标签: r gis r-raster

我有以下栅格

library(raster)
r <- raster(ncol=2421, nrow=5005)
r:
     class      : RasterLayer 
     dimensions : 2421, 5005, 12117105  (nrow, ncol, ncell)
     resolution : 1, 1  (x, y)
     extent     : 501121, 506126, 2809088, 2811509  (xmin, xmax, ymin, 
     ymax)
      crs        : +proj=utm +zone=17 +datum=WGS84 +units=m +no_defs 
     +ellps=WGS84 +towgs84=0,0,0 
     source     : E:/Datat Layers/Clip/Harney_XMerge.tif 
     names      : Harney_XMerge 
    values     : -3.126388e-13, 57.14  (min, max)

及其后的折线以折线的形式

Line:
class       : SpatialLinesDataFrame 
features    : 7 
extent      : 500864.6, 505506.2, 2809553, 2811079  (xmin, xmax, ymin, 
ymax)
crs         : +proj=utm +zone=17 +datum=WGS84 +units=m +no_defs 
+ellps=WGS84 +towgs84=0,0,0 
variables   : 3
names       : OBJECTID, Id,    Shape_Leng 
min values  :        1,  0, 2716.24783826 
max values  :        7,  0, 3188.64130203

我想提取沿着断面落下的每个像素的坐标,但是我自己找不到任何能够做到这一点的函数。

我使用了以下提取功能,但在这种情况下,它仅从栅格中提取信息树高数据。我是否可以使用提取函数或其他函数来提取沿已建立的样线落入的每个像素的UTM坐标?

 extract(r,line )

1 个答案:

答案 0 :(得分:1)

在提问时,请提供一个最小的可复制示例。看一下R帮助文件的例子。例如(从明显的地方?raster::extract复制:

library(raster)
r <- raster(ncol=36, nrow=18, vals=1)
cds1 <- rbind(c(-50,0), c(0,60), c(40,5), c(15,-45), c(-10,-25))
cds2 <- rbind(c(80,20), c(140,60), c(160,0), c(140,-55))
lines <- spLines(cds1, cds2)

extract(r, lines)

在摘录(?extract)的文档中,您可以看到有一个参数cellnumbers。你可以做

e <- extract(r, lines, cellnumbers = TRUE)

这将为每个折线返回一个包含单元格编号和值的矩阵的列表。从单元号中可以获得坐标。

f <- lapply(e, function(x) xyFromCell(r, x[,1]))

或者,如果您更喜欢data.frame

e <- extract(r, lines, cellnumbers = TRUE, df=T)
d <- data.frame(ID=e[,1], xyFromCell(r, e[,2]))

head(d)
#     ID   x  y
#[1,]  1  -5 55
#[2,]  1   5 55
#[3,]  1 -15 45
#[4,]  1  -5 45
#[5,]  1   5 45
#[6,]  1  15 45

如果需要沿线对点进行排序,请使用提取参数along=TRUE