我被指派了从中剪裁光栅的任务。来自的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(和其他站点)上的类似问题,如:
由于我甚至不知道如何正确地表达这个问题,我可能忽略了这个问题的答案,如果是这样,请指出我在哪里!
到目前为止,我的(工作)代码只是为了让您了解我想如何处理这个主题(这里使用作物函数)。
#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)处理此类问题时所使用的一样,这现在不是一个选项。
也许是这样的?
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: 如