我有一个Spatialline,我从多边形shapefile转换(根据“imagebrick”中的功能手动数字化 - 这意味着“polyline”和“imagebrick”在空间上重叠,如我所愿)
polyline <- as(shapefiles_data[1,],"SpatialLines")
> polyline
class : SpatialLines
features : 1
extent : 357714.3, 357719, 4076030, 4076035 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=11 +datum=NAD27 +units=m +no_defs +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat
和Rasterbrick
> imagebrick
class : RasterBrick
dimensions : 29180, 14940, 435949200, 4 (nrow, ncol, ncell, nlayers)
resolution : 0.6, 0.6 (x, y)
extent : 354038.4, 363002.4, 4066992, 4084500 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=11 +datum=NAD27 +units=m +no_defs +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat
names : band1, band2, band3, band4
min values : 0, 0, 0, 0
max values : 65535, 65535, 65535, 65535
我试图提取Rasterbrick中被Line(SpatialLine)触摸的像素。但我还想提取与这些提取像素相关联的xy坐标,并将它们存储在SpatialPointsDataFrame中。我试过了:
extract_polyline_test <- extract(imagebrick, polyline)
extract_polyline_test <- as.data.frame(extract_polyline_test)
> extract_polyline_test
band1 band2 band3 band4
1 125 156 73 392
2 129 161 80 366
3 156 208 122 374
4 142 175 97 330
5 102 117 31 389
6 117 143 57 381
7 162 221 127 413
8 213 302 204 405
.. ... ... ... ...
然后,我试图使用RasterToPoints函数来拉出xy坐标。这需要一个包含我想要xy的所有像素的栅格图层。我试图使用“crop”来获得光栅“线”,但它不起作用。
rastercrop_polyline <-crop(imagebrick,polyline)
rastercrop_polyline
> rastercrop_polyline
class : RasterBrick
dimensions : 8, 7, 56, 4 (nrow, ncol, ncell, nlayers)
resolution : 0.6, 0.6 (x, y)
extent : 357714.6, 357718.8, 4076030, 4076035 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=11 +datum=NAD27 +units=m +no_defs +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat
data source : in memory
names : band1, band2, band3, band4
min values : 72, 63, 0, 156
max values : 274, 415, 299, 497
s.polyline <- rasterToPoints(rastercrop_polyline)
> s.polyline
x y band1 band2 band3 band4
[1,] 357714.9 4076035 93 96 17 342
[2,] 357715.5 4076035 72 63 0 377
[3,] 357716.1 4076035 90 93 17 371
[4,] 357716.7 4076035 125 156 73 392
[5,] 357717.3 4076035 129 161 80 366
[6,] 357717.9 4076035 156 208 122 374
[7,] 357718.5 4076035 142 175 97 330
[8,] 357714.9 4076034 100 108 25 326
.. ........ ....... ... .. .. ...
似乎“裁剪”功能不会裁剪光栅的“线”,而是整个“多边形”。有没有其他方法来获取我提取的像素的xy坐标?
P.S。我还试图提取每个提取像素的周围像素。我该怎么做?我注意到提取函数中有一个函数参数。我应该在提取函数中编写一个小函数,还是有其他方法可以做到这一点?
p.p.s我还想使用Rasterize函数来栅格化“SpatialLine”,然后使用RasterToPoints拉出xy坐标。但我无法控制“栅格化的SpatialLine”的每个像素等于原始图像砖中“线”所触及的像素。
感谢大家抽出时间查看我的问题,并提前感谢您的帮助。
答案 0 :(得分:4)
你说你“正在考虑使用Rasterize函数来栅格化”SpatialLine“,然后使用RasterToPoints来拉出xy坐标。”
这对你想要的东西来说似乎是正确的
但是你说你“无法控制”栅格化的SpatialLine“的每个像素等于原始图像砖中”线“所触及的像素。”
但它们是,除了具有多行的单元格仅表示一次。
另一种方法:
# set up some example data
r <- raster()
values(r) <- runif(ncell(r))
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 <- SpatialLines(list(Lines(list(Line(cds1)), "1"), Lines(list(Line(cds2)), "2") ))
# values for lines
v <- extract(r, lines)
# create raster with cell numbers
ids <- init(r, v='cell')
# extract these
cells <- extract(ids, lines)
# compute xy
xy = lapply(cells, function(x) xyFromCell(r, x))