【发布时间】:2018-07-11 19:34:00
【问题描述】:
我一直在尝试使用 spsample 从栅格图层(例如,24 个气候变量图层中的任何一个,在 Lambert Conformal Conic 投影中,来自 https://sites.ualberta.ca/~ahamann/data/climatewna.html)随机采样一个用户定义数量的点,在一个区域的范围由多边形定义,我通过围绕一组点形成圆圈并聚合它们的边界来生成,但无法弄清楚如何仅对定义的区域内的栅格部分进行采样。下图显示了我正在使用的栅格图层和多边形:
我知道可以在该区域内进行采样,然后使用栅格图层作为蒙版,以从采样点中删除落在该图层的 NA 区域内的点,但是,在此过程中,背景的数量剩余点数小于用户在 spsample 函数中指定的点数。这是我为完成此操作而编写的代码:
circles <- circles(coordinate_dat_train, 150000)
circle_polygon <- polygons(circles)
proj4string(circle_polygon) <- CRS("+proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0")
sample_mask <- raster("C:/...path.../cv_NORM_6190_AHM.tif")
r_sample <- spsample(circle_polygon, 1000, type='random')
r_sample_cells <- as.data.frame(extract(sample_mask, r_sample, cellnumbers = TRUE))
r_sample_cells <- as.data.frame(r_sample_cells[!is.na(r_sample_cells$cv_NORM_6190_AHM),])
r_sample_cells <- r_sample_cells[,-2]
r_sample_coords <- xyFromCell(sample_mask, r_sample_cells, spatial = TRUE)
我还尝试使用rasterToPolygon 函数将栅格转换为多边形,找到该多边形与原始多边形的交点,并仅在该交点内采样,但我正在使用的栅格图层如此大,完成这个过程所需的时间是不可行的。
是否有其他方法可以完成此操作,在计算时间方面相当快?提前致谢!
【问题讨论】:
-
如果您提供示例操作的代码(包括您正在使用的地图、您的掩码等),这可能会更容易。
-
@r2evans:完成;我已将脚本的相关部分添加到问题中。我没有使用
mask函数,而是提取落在栅格非NA 区域的随机点。
标签: r random polygon intersection raster