我有两个 Raster 对象
> x1
class : RasterLayer
dimensions : 36, 72, 2592 (nrow, ncol, ncell)
resolution : 1.35, 1.291667 (x, y)
extent : -97.2, 0, 20, 66.5 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : in memory
names : layer
values : -9.527037, 15.03242 (min, max)
> x2
class : RasterLayer
dimensions : 36, 72, 2592 (nrow, ncol, ncell)
resolution : 1.351389, 1.333333 (x, y)
extent : -97.3, 0, 20, 68 (xmin, xmax, ymin, ymax)
coord. …Run Code Online (Sandbox Code Playgroud) 我有一个带有Name,longitude和latitude列的数据框。我想要一个遍历每一行的函数,从栅格堆栈中提取值并根据Name列写入 csv 文件。
Name Lon Lat
Name1 11.11 47.87
Name2 150.1 -40.4
Name3 -50.2 -3.5
Name4 -100.3 49.8
library(raster)
s <- stack(replicate(5, {raster(matrix(runif(2160*4320), 2160),
xmn=-180, xmx=180, ymn=-90, ymx=90)}))
I can do that one by one:
location <- data.frame(11.11, 47.87)
ex <- extract(s, location)
write.csv(ex, "Name1.csv")
Run Code Online (Sandbox Code Playgroud) 我有一个想要扩展的 shapefile(基本上是添加一些 NA 行和列)。有没有这样的功能raster::extend?不幸的是,这只适用于raster对象。
我可以使用 裁剪它raster::crop,它有一个 方法SpatialPolygonsDataFrame,但我找不到任何可以扩展的东西。
我有一个分类结果的整数栅格。现在我想用数据帧中的浮点值替换这些类,即栅格类 1 = 0.321; 2 级 = 0.232;3 级 = 3.211。数据框有很多列,我想替换几种不同情况的类:
Class C N ....
1 0.321 0.001
2 0.232 0.012
3 3.211 0.021
Run Code Online (Sandbox Code Playgroud)
有没有办法方便地做到这一点,例如将 data.frame 合并到栅格中?我需要将生成的栅格与另一个栅格相乘以生成输出。
这是光栅文件的元数据:
> LCC
class : RasterLayer
dimensions : 3296, 3711, 12231456 (nrow, ncol, ncell)
resolution : 2, 2 (x, y)
extent : 514151.8, 521573.8, 7856419, 7863011 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=55 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : /home/..../Raster.tif
names : Raster
values : 0, 255 (min, max) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在raster包中使用 distanceFromPoints 函数:
distanceFromPoints(object,xy,...)
Run Code Online (Sandbox Code Playgroud)
其中,对象是光栅,xy是矩阵x和y坐标
现在,例如,如果我的栅格有 1000 个像元并xy表示一个点,我将得到 1000 个值,表示xy每个栅格像元之间的距离。我的问题是当xy有多个坐标时,例如 10 点。函数描述表明xy可以是多个点,但是当我用多个XY点运行这个函数时,我仍然只得到 1000 个值,而我期望XY. 这是如何运作的?
谢谢!
我在 stackexchange 上看到过其他示例,但似乎无法使它们适应我的代码。
问题:我有一个包含 .rds 文件的文件夹,我想将其读入 R,然后将所有文件堆叠在一起,以便我可以获取平均值和标准差。当引入 R 时,所有 .rds 文件都是“正式类 RasterLayer”(如果相关的话)。
示例代码:
# file path to folder where .rds files are stored
path = "~/Predictions/"
# create place to store files
stack <-""
# create vector of all .rds files in folder
pred.dates <- dir(path, pattern =".rds")
# loop to bring in each .rds file
for(i in 1:length(pred.dates)){
file <- readRDS(file.names[i],".rds")
stack <- rbind(stack, file)
}
# take mean of all .rds files stacked together and plot
pred_mean <- …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 raster::adjacent() 创建一个 rooks case 邻接矩阵,但我无法理解输出。
可重现的例子:
library(raster)
r <- raster(nrow = 3, ncol = 3)
rAdjacent <- raster::adjacent(r, cells = 1:ncell(r), pairs = TRUE, directions = 4)
rAdjacent
from to
[1,] 1 3
[2,] 2 1
[3,] 3 2
[4,] 4 6
...
Run Code Online (Sandbox Code Playgroud)
从我对输出的解释来看,输出表明 1 和 3 具有 rooks 大小写关系(如果我正确理解了这种关系,则它们没有)。
问题 1. 这是正确的吗?我是否正确解释了这个输出?
问题 2. 我如何使用 next() 或其他方法创建输出,它可以为我提供相邻的单元格编号对?
谢谢 :)
我有一个光栅文件(在 QGIS 中从矢量文件创建)。
我想知道在 R 中是否可能:
1)改变像素的值?(我相信所有单元格都具有关联的值“1”,或者至少具有蓝色像素(检查下面的图像),并且我不知道白色像素的值,但我想将其设置为“2” ,例如,所以它将是二进制的)
2)“裁剪”光栅?
以下是输入栅格的特征:
> catC1raster
class : RasterLayer
dimensions : 1384, 2359, 3264856 (nrow, ncol, ncell)
resolution : 30, 30 (x, y)
extent : 325352.8, 396122.8, 4613074, 4654594 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=31 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
names : CAT_C1_30m
Run Code Online (Sandbox Code Playgroud)
这是情节:
我一直试图在下面的代码中将海洋涂成白色或透明,但到目前为止都没有成功。我在 Stack 上看到了其他帖子,但无法将它们应用到我的示例中(例如,我如何在美国地图中为海洋着色?)。我欢迎建议。非常感谢!
library(raster)
library(ggplot2)
library(maptools)
data("wrld_simpl")
#sample raster
r <- raster(ncol=10, nrow=20)
r[] <- 1:ncell(r)
extent(r) <- extent(c(-20, 20, -20, 20))
#plotting
var_df <- as.data.frame(rasterToPoints(r))
p <- ggplot() +
geom_polygon(data = wrld_simpl[wrld_simpl@data$UN!="10",],
aes(x = long, y = lat, group = group),
colour = "black", fill = "grey") # does the fortification automatically
p <- p + geom_raster(data = var_df, aes(x = x, y = y, fill = layer))
p <- p + coord_equal() + theme_bw() +labs(x="", y="") …Run Code Online (Sandbox Code Playgroud) 我正在更改我的空间工作流程以使用 terra 包而不是 raster 包。使用光栅包,我曾经将多个光栅直接读入堆栈。
filelist_temp <- list.files(datapath("Climate/World Clim 1 yr Monthly Weather/LCC June and July/June"), full.names = TRUE)
temp_rasters <- stack(filelist_temp)
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以在 terra 中进行相同的操作?
这是我最初想到的,但它不起作用。我最终得到了一个包含 25 个 spatRaster 的列表
temp_rasters <- c(lapply(filelist_temp, rast))
Run Code Online (Sandbox Code Playgroud)