我有一个从多边形形状文件转换而来的Spatialline(基于"imagebrick"中的特征手动数字化-这意味着在空间上"polyline"one_answers"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
.. ... ... ... ...
然后,我试图使用rastertoppoints函数来拉出xy坐标。这需要一个栅格层,其中包含我想要xy的所有像素。我试过使用"裁剪"来获得光栅"线",但它不起作用。
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.p。我也在考虑使用Rasterize函数栅格化"SpatialLine",然后使用rastertoppoints拉出xy坐标。但是我不能控制"栅格化的SpatialLine"的每个像素等于原始imagebrick中"线"所触及的像素。
感谢大家花时间看我的问题,提前感谢你们的帮助。
你说你"正在考虑使用Rasterize函数栅格化"SpatialLine",然后使用rastertoppoints拉出xy坐标。"
你想要的似乎是正确的
但是你说你"不能控制'栅格化的SpatialLine '的每个像素等于原始imagebrick中'线'所触及的像素。"
但它们是,除了多行单元格只表示一次。
另一种方法:
# 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))