在 R 中计算高纬度栅格面积的最准确方法?

时间:2021-02-11 23:46:47

标签: r raster spatial projection rgeo-shapefile

我希望计算跨纬度的多个栅格(~110 公里乘 20 公里)的面积(以 m^2 为单位)。我无法就最佳方式达成一致,以处理经度与纬度之间关系的变化。我发现的三种不同方法包括将 raster::area 函数应用于未投影的栅格以计算平均像元面积,另一种将 raster::area 函数应用于从具有 +proj=eqearth 投影的栅格导出的多边形,最后将 rgeos:::gArea 函数应用于从具有 +proj=eqearth 投影的栅格导出的多边形。我没有得到类似的结果。我在下面提供了一些代码。最好的技术是什么?提前致谢!

library(raster)
library(rgeos)
library(sp)
library(rgdal)

#generate a polygon to start off

#coordinates for outside of donut polygon
outer <- Polygon(rbind(c(-15.5376528679349, 79.4881322107174), c(-7.48352810724904, 79.908837268938), c(-6.66906605279766, 78.6475974600555), c(-15.4471570841069, 78.7892258712421), c(-15.5376528679349, 79.4881322107174)))

#coordinates for inside of donut polygon
inner <- Polygon(rbind(c(-13.6190362010361, 79.3320228496385), c(-13.7164252183978,79.039680481742), c(-9.04175238503622, 79.039680481742), c(-9.23653041975962, 79.3859727584367), c(-13.6190362010361, 79.3320228496385)), hole = T)

#create polygon from coordinates
h1 <- Polygons(list(outer, inner), "donut1")

# create spatial polygons object
onedonut <- SpatialPolygons(list(h1))

#equal area projection
projection(onedonut) <- CRS("+proj=eqearth")



Convert polygon to raster

r <- raster(ncol=100, nrow=100)
extent(r) <- extent(onedonut)
onedonut.raster <- rasterize(onedonut, r)


#Calculate area using raster::area on non-projected raster

   #raster area calculation
      #get sizes of all cells in raster
    cell_size_raster<-area(onedonut.raster, na.rm=TRUE, weights=FALSE)

    #delete NAs from vector of all raster cells
    cell_size_raster<-cell_size_raster[!is.na(onedonut.raster)]

    #compute area of all cells
    segment_area_raster <-length(cell_size_raster)*median(cell_size_raster)

#Calculating area using raster::area on projected shapefile

    cell_size_sp<-area(onedonut, na.rm=TRUE, weights=FALSE)

    #compute area [km2] of all polygons in shape file
    segment_area_equalarea <-length(cell_size_sp)*median(cell_size_sp)


#Calculate area using rgeos::gArea on projected shapefile

rgeos_shapefile_area <- gArea(onedonut)
  
  


#Are these values close?

segment_area_raster
segment_area_equalarea
rgeos_shapefile_area

#The values are not the same

0 个答案:

没有答案
相关问题