r语言 - 如何将"im"像素图像转换为栅格?



我正在尝试转换一个"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)

这是我得到的情节:绘制

我想做的是将其转换为光栅。然后我想使用ebird数据的坐标从光栅中提取密度值。

这里是一个最小的、自包含的、可重复的示例(基于?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中,您可以使用例如as.ppp()直接从sf转换为spatstat格式。

如果您想要对数据点的强度进行内核密度估计,可以使用density.ppp():中的选项at = "points"

a <- density(coordinates, 2, at = "points")

a只是长度等于包含每个数据点的强度估计的点的数量的向量。这使用";省略一个";默认情况下的估计,以最大限度地减少偏差(请参阅density.ppp的帮助文件(。

最新更新