绘制从栅格图层中的数据框提取的点
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,它提供了使用 raster
和 sf
库的可能解决方案。
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。请在下方找到使用 terra
和 sf
库
提供另一种解决方案的代表
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 创建
我想将数据框中的点绘制到我拥有的栅格图层中。对于每个点,我希望单元格的值为 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,它提供了使用 raster
和 sf
库的可能解决方案。
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。请在下方找到使用 terra
和 sf
库
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 创建