我有一个光栅太大,无法在这里发布,但可以从这里下载:https://login.filesanywhere.com/fs/v.aspx?v=8c6c688b586472bcab6a。当我绘制它时,我看到水和土地的混合。我想用以下标准来区分它:如果值大于1,则为陆地,如果值小于1,则为水。
然后,将水类转换为多边形特征。然后使用它来裁剪原始栅格以仅显示水。任何帮助都非常感谢。
Here is what I tried:
library(terra)
library(mapview)
library(raster)
xx <- rast("MyRaster.asc")
xx
ncell(xx)
plot(xx)
#Convert to raster first to vizualise with mapview
xxx <- raster(xx)
mapview(xxx)
2条答案
按热度按时间bf1o4zei1#
您可以使用terra轻松完成此操作,避免转换和潜在错误。请参阅https://gis.stackexchange.com/questions/421821/how-to-subset-a-spatraster-by-value-in-r,terra开发人员对此进行了进一步解释。
一个mock文件的例子:
创建于2023-04-21带有reprex v2.0.2
我尝试了你的文件(~1.3Gb),这个过程可能需要一点时间,但上面的代码应该仍然可以工作。只看水的结果:
k4ymrczo2#
读取数据:
创建二进制0/1栅格,其中陆地为1,海洋为0:
转换为多边形(需要一段时间):
显示(也需要一段时间):
请注意,这里的两个“多边形”是非常复杂的多多边形,每行
pol
表示该值的所有小区域。要完成将栅格裁剪到水域范围的最后一步,您实际上不必执行此多边形化过程,只需将所有土地值设置为缺失值并从所有侧面切割完整的行和列-
terra
中可能有一个函数可以做到这一点-是的,它称为trim()
,您可以向其传递一个值以计数为缺失。