如何在R中创建SpatialPixelsDataFrame对象(与adehabitat包兼容)

时间:2014-07-20 23:04:15

标签: r raster

我的问题很简单。我在R中找到了名为 adehabitat 的非常好的包。要使用它,我需要将我的数据转换为包含栅格地图数据和动物坐标的特定结构对象。要查看它,请输入:

# example data in adahabitat package
data(bauges)
bauges
str(bauges)

如何将我的数据(下图)转换为此类结构? 我想出了如何将 $locs转换为SpatialPoints,但我不知道如何转换地图(在我的示例中是栅格值分类各种类型栖息地的代码 - 不是连续变量。)

# My example data:
library(raster)
library(adehabitatHS)

# map
habitat_type_temp <- matrix(c(1,1,1,1,1,1,1,1,2,2,
                              1,1,2,2,1,1,1,2,2,2,
                              1,2,2,2,3,3,3,2,2,2,
                              2,2,2,1,1,1,3,2,2,1,
                              2,2,1,1,1,1,3,2,1,1,
                              2,1,1,1,1,1,3,3,1,1,
                              2,1,1,1,1,3,3,3,3,1,
                              1,1,1,1,1,1,1,3,3,3), 10)
habitat_type <- t(habitat_type_temp)

# coordinates
animal_coords <- data.frame(x = c(2,4,5,5,6,9),
                            y = c(2,8,3,2,4,3))


# see the situation
plot(raster(habitat_type, xmn=1, xmx=10, ymn=1, ymx=8))
points(animal_coords$x, animal_coords$y)


# creating object which could be manipulated in adehabitat package
my.hab <- list()
my.hab$map <- SpatialPixelsDataFrame(...)
my.hab$locs <- SpatialPoints(animal_coords)

是否有可能将这样的手工制作的数据插入到这种特定类型的对象中,或者我需要一些具有特定CRS的原始 tiff?

1 个答案:

答案 0 :(得分:4)

您可以将位置放在某处以生成SpatialPixelsDataFrame,我认为这大致是爱荷华州:

x <- 93+rep(1:8,each=10)/100
y <- rep(seq(42.01,42.1,by=0.01), 8)
z <- c(1,1,1,1,1,1,1,1,2,2,
  1,1,2,2,1,1,1,2,2,2,
  1,2,2,2,3,3,3,2,2,2,
  2,2,2,1,1,1,3,2,2,1,
  2,2,1,1,1,1,3,2,1,1,
  2,1,1,1,1,1,3,3,1,1,
  2,1,1,1,1,3,3,3,3,1,
  1,1,1,1,1,1,1,3,3,3)
xy.df <- data.frame(x,y)
xy.coords <- SpatialPixels(SpatialPoints(xy.df))
llCRS <- CRS("+proj=utm +zone=15 +ellps=WGS84")
xy.sp <- SpatialPoints(xy.coords, proj4string = llCRS)
xyz <- as.data.frame(cbind(x,y,z))
xyz.spdf <- SpatialPixelsDataFrame(xy.coords, xyz)
plot(xyz.spdf)

您的空间点必须以类似方式进行更改。