当前位置: 首页 > 知识库问答 >
问题:

将光栅层规格化为矩阵以用作剪裁帧

法池暝
2023-03-14

我被指派了从中剪裁光栅的任务。来自的nc文件。tif文件。

编辑(来自注释):我想提取临时值。来自的信息。nc,因为我需要检查特定区域的年平均温度。要进行比较,必须在完全相同的区域进行比较。这个nc文件比之前选中的区域大,因此我需要将其“剪裁”到。如果我有。这个tif数据的格式为0 | 1,其中为0(或.tif小于.nc)。nc数据应“剪辑”。最后,我想保留。nc数据,但在范围内。tif同时仍保留其分辨率

现在通常这不会是一个问题,因为我可以使用光栅::crop。不过,这不会处理不同的投影和不同的像素大小/分辨率。(我仍然使用它来生成近似值,但对于最终的信息来说不够精确,正如下面的代码片段所示)。生成更可靠的数据集/光栅集的明显方法是首先使用光栅::Project ectRaster光栅::sp这样的方法。Transform#addsp.transform是在编辑原始问题和均匀化数据集时完成的,但这种方法需要太多时间,因为我必须为相当多的. nc文件这样做。

我被告知最好的方法是从较小的光栅“clip\u frame”生成一个归一化矩阵,然后将其与“nc\u to\u clip”光栅相乘。这样做可以防止由于地图投影或其他因素造成的任何错误。这在理论上对我来说很有意义,但我不知道如何在实践中做到这一点。我将非常感谢任何类型的提示/代码片段或任何其他帮助。

我研究了StackOverflow(和其他站点)上的类似问题,如:

  • 将R中的矩阵转换为光栅
  • 使用R将光栅转换为矩阵
  • https://www.researchgate.net/post/Hi_Is_there_a_way_to_multiply_Raster_value_by_Raster_Latitude

由于我甚至不知道如何正确地表达这个问题,我可能忽略了这个问题的答案,如果是这样,请指出我在哪里!

到目前为止,我的(工作)代码只是为了让您了解我想如何处理这个主题(这里使用作物函数)。

#library(ncdf4)
library(raster)
library(rgdal)
library(tidyverse)

nc_list<-list.files(pattern = ".*0.nc$")                   # list of .nc files containing raster and temperature information
#nc_to_clip <- lapply(nc_list, raster, varname="GST")      # read in as raster
nc_to_clip < -raster(ABC.nc, vername="GST)

clip_frame <- raster("XYZ.tif")                         # read in .tif for further use as frame


mean_temp_from_raster<-function(input_clip_raster, input_clip_frame){  # input_clip_raster= raster to clip, input_clip_frame
  
  r2_coord<-rasterToPoints(input_clip_raster, spatial = TRUE)   # step 1 to extract coordinates
  map_clip <- crop(input_clip_raster, extent(input_clip_frame)) # use crop to cut the input_clip_raster (this being the function I have to extend on)
  temp<-raster::extract(map_clip, r2_coord@coords)              # step 2 to extract coordinates 
  temp_C<-temp*0.01-273.15                                      # convert kelvin*100 to celsius
  temp_C<-na.omit(temp_C)
  mean(temp_C)
  
  return_list<-list(map_clip, mean(temp_C))
  return(return_list)
  
}

mean_tempC<-lapply(nc_to_clip, mean_temp_from_raster,clip_frame)

谢谢

附言:我没有太多的工作经验。R中的nc文件和/或RasterLayers,正如我以前使用ArcGIS/Python(arcpy)处理此类问题时所使用的一样,这现在不是一个选项。

共有1个答案

韦俊英
2023-03-14

也许是这样的?

library(raster)
nc <- raster(ABC.nc, vername="GST)
clip <- raster("XYZ.tif")

x <- as(extent(clip), "SpatialPolygons")
crs(x) <- crs(clip)
y <- sp::spTransform(x, crs(nc))

clipped <- crop(nc, y)
 
 类似资料:
  • 我目前正在将原始矩阵转换为光栅以使用焦距函数,然后我想将光栅转换回矩阵。但是,当我尝试将光栅函数用作时,出现了一条错误消息。矩阵()。即使有这个非常简单的例子: 以下是我得到的: 如果(!is.null(names(x)))列表(names(x),,则数组(x,c(length(x),1L)中出错: “dimnames”[1]的长度不等于数组范围 我正在使用RstuIO、R版本3.4.0和、和库。

  • 我有50多个需要裁剪的光栅文件(ASCII格式)。我已经以ASCII格式从ArcMap导出了遮罩,并将其加载到R中。如何使其适用于一行中的所有光栅,并以与之前相同的名称导出它们(当然是在不同的文件夹中,以避免覆盖)? 我知道光栅软件包中有裁剪功能,但到目前为止我从未使用过。我只是把它们堆放起来做进一步的栖息地分析。 到目前为止,我的代码:

  • 我有一个带有空间坐标和一个变量的矩阵数据。空间分辨率为1000米。 我想将其转换为光栅格式。 我使用下面的代码来完成它。但我得到的决心与我得到的不一样。有没有更好的方法可以用我的真实数据获得相同的分辨率?

  • 我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来

  • 我需要先转换表格中的Excel矩阵,然后再转换: 第一: 后来:

  • 我正在尝试裁剪一些栅格数据并进行一些计算(特别是获得平均海面温度)。 但是,当比较在进行计算之前裁剪光栅数据的范围时,我得到的结果与在裁剪结果数据之前进行计算的结果相同。 光栅数据的原始范围是-180、180、90、90(xmin、xmax、ymin、ymax),我需要将其裁剪到由纬度和经度坐标定义的任何所需区域。 这是我正在使用的脚本进行测试: 这是平均值的输出。brick1-平均值。砖2: 如