如何将 "im" 像素图像转换为光栅图像?
How to convert "im" pixel image to raster?
我正在尝试将我制作的“im”像素图像转换为光栅图像。 “im”是使用以下代码创建的:
library(sf)
library(spatstat)
library(rgeos)
library(raster)
# read ebird data
ebd_species <- ("ebd_hooded.txt") %>%
read_ebd()
# extracting coordinates
latitude_species <- ebd_species$latitude
longitude_species <- ebd_species$longitude
#convert to spatial object
coordinates1 <- data.frame(x = longitude_species, y = latitude_species) %>% st_as_sf(coords = c("x", "y"))
# converting to point pattern data
coordinates <- as.ppp(coordinates1)
# density image
a <- density(coordinates,2)
plot(a)
这是我得到的情节:
plot
我想做的是将其转换为光栅。然后我想使用 ebird 数据的坐标从栅格中提取密度值。
这是一个最小的、self-contained、可重现的例子(基于 ?im
中的第一个例子):
library(spatstat)
mat <- matrix(1:1200, nrow=30, ncol=40, byrow=TRUE)
m <- im(mat)
解决方案
library(raster)
r <- raster(m)
看来您是直接在 spatstat 中使用地理坐标(经度、纬度)。您确定这在您的上下文中可以吗?对于远离赤道的地区,这可能会产生误导。考虑使用 sf::st_transform()
投影到平面坐标(请参阅本网站上我的其他答案以获取执行此操作的代码)。此外,在较新版本的 sf
中,您可以直接从 sf
转换为 spatstat
格式,例如as.ppp()
.
如果您想要数据点强度的核密度估计,您可以使用 density.ppp()
中的选项 at = "points"
:
a <- density(coordinates, 2, at = "points")
然后 a
只是一个向量,其长度等于包含每个数据点的强度估计的点数。这默认使用“leave-one-out”估计来最小化偏差(请参阅 density.ppp
的帮助文件)。
我正在尝试将我制作的“im”像素图像转换为光栅图像。 “im”是使用以下代码创建的:
library(sf)
library(spatstat)
library(rgeos)
library(raster)
# read ebird data
ebd_species <- ("ebd_hooded.txt") %>%
read_ebd()
# extracting coordinates
latitude_species <- ebd_species$latitude
longitude_species <- ebd_species$longitude
#convert to spatial object
coordinates1 <- data.frame(x = longitude_species, y = latitude_species) %>% st_as_sf(coords = c("x", "y"))
# converting to point pattern data
coordinates <- as.ppp(coordinates1)
# density image
a <- density(coordinates,2)
plot(a)
这是我得到的情节: plot
我想做的是将其转换为光栅。然后我想使用 ebird 数据的坐标从栅格中提取密度值。
这是一个最小的、self-contained、可重现的例子(基于 ?im
中的第一个例子):
library(spatstat)
mat <- matrix(1:1200, nrow=30, ncol=40, byrow=TRUE)
m <- im(mat)
解决方案
library(raster)
r <- raster(m)
看来您是直接在 spatstat 中使用地理坐标(经度、纬度)。您确定这在您的上下文中可以吗?对于远离赤道的地区,这可能会产生误导。考虑使用 sf::st_transform()
投影到平面坐标(请参阅本网站上我的其他答案以获取执行此操作的代码)。此外,在较新版本的 sf
中,您可以直接从 sf
转换为 spatstat
格式,例如as.ppp()
.
如果您想要数据点强度的核密度估计,您可以使用 density.ppp()
中的选项 at = "points"
:
a <- density(coordinates, 2, at = "points")
然后 a
只是一个向量,其长度等于包含每个数据点的强度估计的点数。这默认使用“leave-one-out”估计来最小化偏差(请参阅 density.ppp
的帮助文件)。