计算具有相关坐标的每个网格单元的平均值

时间:2016-07-26 09:06:24

标签: r gis spatial raster r-raster

我有一个名为gridmap的光栅文件,以UTM投影,类:SpatialGridDataFrame,如下所示:

Object of class SpatialGridDataFrame
Coordinates:
        min    max
[1,]  415.0  545.5
[2,] 6371.5 6493.0
Is projected: TRUE 
proj4string :
[+proj=utm +ellps=WGS84 +datum=WGS84 +zone=30 +units=km +towgs84=0,0,0]
Grid attributes:
  cellcentre.offset cellsize cells.dim
1            415.25      0.5       261
2           6371.75      0.5       243
Data attributes:
     values     
 Min.   :    1  
 1st Qu.:15856  
 Median :31712  
 Mean   :31712  
 3rd Qu.:47568  
 Max.   :63423  

我还有一个数据框,其中包含与这些坐标相关的坐标和值(V1)。某些坐标可以有多个值。

DF <- data.frame(
    Lat = c(6384.705, 6384.701, 6384.698, 6384.698, 6384.691, 6384.687)
    Lon = c(439.7384, 439.7385, 439.7386, 439.7387, 439.7389, 439.7390)
    V1 = c(34, 0.006, 76, 34, 777, 0.0000348)
)

我想要做的是为我的栅格中的每个GRID-CELL取平均值V1,而不是数据帧中的每个离散坐标,并创建一个具有网格单元格值,栅格坐标值的数据帧和意思是V1。我可以弄清楚如何将位置叠加到gridmap上,以使用此代码获取每个观察的网格单元ID:

coords <- data.frame(cbind(DF$Lon, DF$Lat))   
coords <- SpatialPointsDataFrame(coords, data = data.frame(DF), proj4string = CRS(projUTM))
siteSpo <- over(x=coords, y=gridmap) 
DF$siteID <- siteSpo$values  

但我无法弄清楚下一步是为每个单独的网格单元ID平均每个值并创建一个新的SpatialGridDataFrame,它具有所有平均网格单元格值,包括我没有数据的0。

1 个答案:

答案 0 :(得分:1)

我首先会制作一个RasterLayer对象

library(raster)
#r <- raster("gridmap file")

由于我们没有您的文件,以下是一个示例(您也可以r <- raster(gridmap))。

r <- raster(ncol=261, nrow=243, xmn=415, xmx=545.5, ymn=6371.5, ymx=6493.0)
values(r) <- 1:ncell(r)

现在:

df <- data.frame(
    y = c(6372, 6378, 6384, 6384, 6485, 6487),
    x = c(419, 429, 439, 439, 539, 500),
    V1 = c(34, 0.006, 76, 34, 777, 0.0000348)
)
df <- aggregate(df[, 'V1', drop=FALSE], df[,2:1], mean)
df$grid <- extract(r, df[,c('x', 'y')])

df
#    x    y       V1  grid
#1 419 6372 3.40e+01 63171
#2 429 6378 6.00e-03 60059
#3 439 6384 5.50e+01 56947
#4 539 6485 7.77e+02  4425
#5 500 6487 3.48e-05  3303