用圆圈相交网格

时间:2017-06-27 08:44:02

标签: r grid gis raster r-raster

我有以下问题。我有来自CH(弗里堡州)的数据,我想与这个区域中创建的网格单元交叉3个圆圈。以下是生成附加地图和多边形的一些代码:

file:// access schema

library(raster)

centroid.x <- c(566052, 576768, 560652)
centroid.y <- c(155501, 185501, 165325)`

centroids <- data.frame(centroid.x = centroid.x, centroid.y = centroid.y)

radius <- 1000
n = 1000
pts = seq(0, 2 * pi, length.out = n)
ZH = cbind(centroid.x[1] + radius * sin(pts), centroid.y[1] + radius * cos(pts))
WH <- cbind(centroid.x[2] + radius * sin(pts), centroid.y[2] + radius * cos(pts))
GL <- cbind(centroid.x[3] + radius * sin(pts), centroid.y[3] + radius * cos(pts))
sl = SpatialPolygons(list(Polygons(list(Polygon(ZH)), 1), Polygons(list(Polygon(WH)), 2) 
                          Polygons(list(Polygon(GL)), 3))) `

CRS_CH <- CRS("+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs")
crs(sl) <- CRS_CH
GRID <- 1000
grid <- raster(extent(pol))

res(grid) <- GRID
proj4string(grid)<-proj4string(pol)

gridpolygon <- rasterToPolygons(grid)
plot(gridpolygon)

dry.grid1000 <- intersect(pol, gridpolygon)
plot(dry.grid1000)
plot(sl, add = TRUE, border = "red")

data file

我基本上想要做的是为圆圈外的所有网格单元格获取值1,为圆圈内的网格单元格获取2。让它有点棘手的是网格单元并不完全在圆圈中。对于这些网格单元格,我想分别加权由圆圈外部和内部加权的加权平均值1和2。

例如,假设我们有一个与圆形重叠的网格单元格,如下图所示(红色是圆形以外的部分,内部是蓝色)

enter image description here

我希望这个单元格取值(1 * | A | + 2 * | B |)/ 2

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您可以在库rasterize中使用函数raster,参数getCover=TRUE

  

如果为TRUE,则返回由多边形覆盖的每个网格单元格的分数(并忽略字段,乐趣,掩码和更新的值。通过将每个单元格划分为100个子单元并确定所覆盖的分数来估算在每个子电池的中心存在/不存在多边形

如果你想要更精确的东西,你可以disaggregate自己将光栅变成更精确的光栅(高于100,否则它与getCover相同),并检索原始光栅之间的对应关系光栅和分解的光栅。