我有一个从多边形 shapefile 转换的空间线(根据“imagebrick”中的特征手动数字化 - 这意味着“折线”和“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
还有一个光栅砖
> 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
我试图提取线(空间线)触及的光栅砖中的像素。但我也想提取与这些提取像素相关的 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 的所有像素。我尝试使用“裁剪”来获取该光栅“线”,但它不起作用。
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 坐标?
ps 我还试图提取每个提取像素的周围像素。我该怎么做?我注意到提取函数中有一个函数参数。我应该在提取函数中编写一个小函数还是有其他方法可以做到这一点?
pps 我也在考虑使用 Rasterize 函数来栅格化“SpatialLine”,然后使用 RasterToPoints 拉出 xy 坐标。但我无法控制“光栅化空间线”的每个像素等于原始图像砖中“线”所触及的像素。
感谢大家花时间查看我的问题,并提前感谢您的帮助。