绘制从栅格图层中的数据框提取的点

Plotting points extracted from a dataframe in a Raster layer

我想将数据框中的点绘制到我拥有的栅格图层中。对于每个点,我希望单元格的值为 1(初始栅格图层上的所有其他单元格的值为零)。

我的数据框(数据)看起来像这样(仅前三行)

Year<-c(2020, 2019, 2018)
Lat<-c(48.3,48.79,48.4)
Long<-c(-123.62, -123.36, -123.29)

我设法用以下代码绘制了这些点

points = st_as_sf(data, coords = c("Long", "Lat"), crs = 4326)
plot(st_geometry(points), pch=16, col="navy")

得到这张图: 绘制的图表点

我现在想将这些点绘制到该区域的栅格图层中。 我的栅格层参数如下:

class      : RasterLayer 
dimensions : 44, 41, 1804  (nrow, ncol, ncell)
resolution : 0.2916667, 0.2916667  (x, y)
extent     : -133.2625, -121.3042, 41.3875, 54.22083  (xmin, xmax, ymin, ymax)
crs        : NA 
names      : Blank_Map 

这个栅格的每个单元格的值为 0,这正是我需要的。现在,我想将我的数据框中的点添加到这个栅格层,对这些数据点所在的每个单元格使用值 1。我还想将整个事物保存为一个新的栅格层(然后将具有 0 和 1 值)。

有人可以帮我实现这个吗? 我已经尝试了几天,但似乎没有任何效果 感谢您的帮助!

1.请在下面找到一个 reprex,它提供了使用 rastersf 库的可能解决方案。

library(raster)
library(sf)


# Create from scratch the raster with 0 values
raster0 <- raster(nrows = 44, ncols = 41, 
                  xmn = -133.2625, xmx = -121.3042, 
                  ymn = 41.3875, ymx = 54.22083, 
                  vals=0)


# Convert points 'sf' object into 'sp' object
points_sp <- as(points, "Spatial")

# Extract the cells of raster0 matching the points geometry of the 'sp' object
cells_ID <- extract(raster0, points_sp, cellnumbers=TRUE)[,"cells"]

# Copy raster0 (as you want the final result in another raster)
raster01 <- raster0

# Replace 0 values to 1 for cells matching points geometry in the 'raster01'
raster01[cells_ID] <- 1

# Visualization of the final result
plot(raster01)

reprex package (v2.0.1)

于 2021-12-07 创建

2。请在下方找到使用 terrasf

提供另一种解决方案的代表
library(terra)
library(sf)

# Create from scratch the 'SpatRaster' with 0 values
raster0 <- rast(nrows=44, ncols=41, 
                nlyrs=1, 
                xmin=-133.2625, xmax=-121.3042, 
                ymin=41.3875, ymax=54.22083, 
                vals = 0)


# Convert points 'sf' object into 'SpatVector' object
points <- vect(points)

# Extract the cells of raster0 matching the points geometry of the 'sp' object
cells_ID <- terra::extract(raster0, points, cells = TRUE)

# Copy raster0 (as you want the final result in another raster)
raster01 <- raster0

# Replace 0 values to 1 for cells matching points geometry in the 'raster01'
raster01[cells_ID[,"cell"]] <- 1

# Visualization of the final result
plot(raster01)

reprex package (v2.0.1)

于 2021-12-07 创建