如何将“ 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)

这是我得到的情节: plot

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

解决方法

在询问R问题时,请提供一个最小的,独立的,可复制的示例。也就是说,不要显示您的实际代码,尤其是当它引用我们没有的数据时,而是显示类似的代码(基于?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()

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

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

那么a就是一个向量,其长度等于包含每个数据点强度估计值的点数。默认情况下,这会使用“留一法”估计来最大程度地减少偏差(请参见density.ppp的帮助文件)。