计算网格单元格中的空间点

时间:2016-08-31 10:53:36

标签: r gis

SO-gurues! 我试图计算不同网格单元中幸存单位的密度。

我有两个shapefile,其中包含两个调查期间的点数(一个在死亡事件之前和一个之后)。我打算看看存活率是否存在差异,并将生存比例与从所需网格的栅格值获得的任何气候变量联系起来。在下面的代码片段中,我创建了一些随机栅格和shapefile。

packs = c('raster', 'rgdal', 'spatstat', 'sp' ,'dplyr')
sapply(packs, FUN = 'require', character.only = TRUE)
xy <- matrix(rnorm(1024),32,32) #Creating the desired raster
    image(xy)
    rast <- raster(xy)
    extent(rast) <- c(36,37,-3,-2)
    projection(rast) <- CRS("+proj=longlat +datum=WGS84")

    points <- runifpoint(n =4000, c(36,37,-3,-2))     # Creating the points
    x <- points$x
    y <- points$y
    values <- c(rep(1, 900), rep(0, 3100))
    xy <- cbind(x, y)
    points <- cbind(x, y, values)
    points <- data.frame(points)
    shp <- SpatialPointsDataFrame(coords = xy, data = data.frame(values) ) # creating shpfiles
    projection(shp) <- CRS("+proj=longlat +datum=WGS84")
    subs <- filter(points, values == 1)
    suxy <- select(subs, x,y)
    shpsub <- SpatialPointsDataFrame(coords = suxy, data = data.frame(subs$values)) # creating shpfiles
    projection(shpsub) <- CRS("+proj=longlat +datum=WGS84")

当我尝试提取点时,我使用以下代码行

shp <- spTransform(shp, projection(rast)) # make sure they have same transformation
shpsub <- spTransform(shpsub, projection(rast))
XY <- xyFromCell(rast, cell = 1:ncell(rast))
v <- as.data.frame(rast)                 #Extract values from raster
XY <- data.frame(XY, v)          # Creating a data frame containing coord., cellno and value
XY$cell <- c(1:ncell(rast))
cells <- cellFromXY(rast,shp)             # find which cells the points are in
cells <- rle(cells)                         # returns a value and a length, fast for counting
cellsfound <- cellFromXY(rast,shpsub)
cellsfound <- rle(cellsfound)
Proportion <- data.frame(cell = cells$values, shp = cells$lengths) 
test <- data.frame(cell = rep(NA,NROW(Proportion)), shpsub = rep(NA, NROW(Proportion))) 
test$cell <- c(cellsfound$values, rep(NA, nrow(test) - length(cellsfound$values))) 
test$shpsub  <- c(cellsfound$lengths, rep(NA, NROW(test) - length(cellsfound$lengths)))
Proportion <- full_join(Proportion, test, by = "cell")
test.Proportion <- mutate(Proportion, Proportion = shpsub/shp)    #Calculating Proportion
XY <- left_join(XY, test.Proportion, by = "cell") # Adding Proportion to coord and cell no.
XY.m <- summarise(XY, )
XY <- na.omit(XY) ; XY <- XY[,-4] 

我看到了。使用rle()多次返回相同的单元格,而不是像我的意图那样计算每个单独单元格中的点数。任何人都可以解释一下如何以检索单个单元格中出现次数的信息的方式来解释这个问题吗?

0 个答案:

没有答案