2017-06-27 110 views
1

我有以下問題。我有CH(弗裏堡州)的一個州的數據,我想用這個區域內創建的一個網格單元交叉3個圓圈。下面是一些代碼來生成附加地圖和多邊形:與圓相交的網格

data file

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") 

enter image description here

我基本上想要做的就是值1的圈子之外的所有網格單元,並2表示圓圈內的網格單元格。是什麼讓它有點棘手是網格單元格不完全在圓圈內。對於這些網格單元,我想分別給出加權平均值1和2,分別用圓圈內外的面積加權。

例如讓我們說我們有一個網格單元與一個圓如下面的圖像重疊(紅色圓圈和藍色境內關外的部分)

enter image description here

我想這個小區取值(1 * | A | + 2 * | B |)/ 2

任何任何想法?

回答

1

您可以在庫raster中使用函數rasterize,參數getCover=TRUE

如果爲TRUE,則返回由多邊形覆蓋的每個網格單元格的分數(並忽略field,fun,mask和update的值,覆蓋的分數通過將每個單元格分爲100子電池,並確定在每個的中心存在/不存在多邊形的子電池

如果你想要的東西更精確的,則可以disaggregate自己光柵到一個更精確的光柵(高於100,否則是相同的getCover),並檢索原始柵格和分解柵格之間的對應關係。