我有以下栅格
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 )
答案 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