繁体   English   中英

在空间栅格上提取样方的平均数据

[英]Extracting mean data for quadrats over a spatial raster

我将提供一点背景。 我不是 100% 确定我目前遵循的获取 output 的路径是正确的,但我使用了一个非常相似的过程来获取每个样方内遥测 ping 的计数数据。

我想要

  • 将我的研究区域水道划分为一系列 20 平方米和 50 平方米的样方
  • 然后我想为每个样方分配从生物量栅格中提取的平均生物量值
  • 对于任何有一个样方不与部分生物量栅格重叠的地方,只需给出 0 的值(这是我目前需要帮助的部分)
  • 然后我想将其导出为空间栅格,然后我将对其进行分析,以将每个样方的生物量平均值与每个样方的计数数据进行比较
telemetry <- read.csv("Outputs/2015/2015-nov-tsdata-1m.csv")

biomass <- raster("GIS/Interpolations/IDWBio/15NovIDWBio.tif")

#############################
# set class for id and date #
#############################

telemetry$id <- as.factor(telemetry$id)
telemetry$DateTime <- as.POSIXct(telemetry$DateTime, format = "%Y-%m-%d %H:%M:%S")

######################################################
# Set Spatial Points and Coordinate Reference System #
######################################################

telemetry.sp <- SpatialPoints(coords=cbind(telemetry$lon, telemetry$lat), 
                            proj4string = CRS("+init=epsg:4326"))

proj4string(biomass) <- projection(telemetry.sp)

telemetry.sp$id <- telemetry$id    #import Sat Tag ID

#####################################################################
# Import ShapeFile of Focus Study Area and set CRS same as sat data #
#####################################################################

StudyArea <- readOGR("GIS/ShapeFiles/Landscape/PelicanBanks.shp")

proj4string(StudyArea) <- projection(telemetry.sp)

##################################
# Turn the Shapefile into Raster #
##################################

rStudyArea20 <- raster(StudyArea)
rStudyArea50 <- raster(StudyArea)

#############################################################################
# Set Resolution / Cell Size of Raster, this will impact Quadrat size later #
#############################################################################

res(rStudyArea20) <- 0.0002
res(rStudyArea50) <- 0.0005

#### 0.0005 = 50m2,  0.0002 = 20m2

###################################################################################
# Add ShapeFile of StudyArea to above Raster, defining Rasters spatial attributes #
###################################################################################

rStudyArea20 <- rasterize(StudyArea, rStudyArea20)
rStudyArea50 <- rasterize(StudyArea, rStudyArea50)


####################################################
# Build 'quadrats' around our predefined Cell Size #
####################################################

quadrat20 <- as(rStudyArea20, "SpatialPolygons")
quadrat50 <- as(rStudyArea50, "SpatialPolygons")

### original biomass raster is over a very large area, so to minimise computing time I'm creating a 
### subset of a smaller area while I'm trying to work out the code

biomass.mask <- mask(biomass, StudyArea)

##################################################
# Summarise the mean biomass within each quadrat #
##################################################

bioQuadrats20 <- rasterize(biomass.mask, rStudyArea20, fun='mean', background=0)
bioQuadrats50 <- rasterize(biomass.mask, rStudyArea50, fun='mean', background=0)

### this is where my train of thought falls apart and I receive the following error 

** 无法为签名 '"RasterLayer"、"RasterLayer"' 找到 function 'rasterize' 的继承方法 **

任何帮助将不胜感激。 提前致谢。

我认为最后一部分可以通过extract多边形内的生物量值来完成。 你不需要mask 你可以试试这个:

library(exactextractr)
library(sf)
quadrat20 <- as(rStudyArea20, "SpatialPolygons")
quadrat50 <- as(rStudyArea50, "SpatialPolygons")

quadrat20.sf <- st_as_sf(quadrat20)
quadrat50.sf <- st_as_sf(quadrat50)

extraction <-  exact_extract(biomass, quadrat20.sf,"mean")

function exact_extract带有exactextractr package,是从多边形内的栅格中提取值的最快方法。 function 还返回多边形的像素覆盖率,因此您可以轻松处理部分覆盖的像素。 此外,内置的汇总函数非常快,默认情况下会忽略 NA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM