Ole F. Christensen 和 Paulo J. Ribeiro Jr 将 rongelap 数据集存放在 geoRglm(Christensen 和 Ribeiro Jr. 2002) 包内,后来,geoRglm 不维护,已从 CRAN 移除了,笔者从他们主页下载了数据。数据集 rongelap 记录了 157 个测量点的伽马射线强度,即在时间间隔 time (秒)内放射的粒子数目 counts(个),测量点的横纵坐标分别为 cX (米)和 cY(米),下 表格 26.1 展示部分朗格拉普岛核辐射检测数据及海岸线坐标数据。
library(nlme)spatDat <-data.frame(x = (1:4) /4, y = (1:4) /4)cs3Exp <-corExp(c(1.2, 0.2), form =~ x + y, nugget =TRUE)cs3Exp <-Initialize(cs3Exp, spatDat)corMatrix(cs3Exp)
ggplot() +geom_sf(data = rongelap_coastline_grid, fill =NA, color ="gray") +geom_sf(data = rongelap_coastline_sfp, fill =NA, color ="gray30") +geom_sf(data = rongelap_coastline_buffer, fill =NA, color ="black") +theme_void()
图 26.13: 朗格拉普岛规则化网格操作
接下来,调用 sf 包函数 st_intersects() 将小网格落在缓冲区和岛内的筛选出来,一共 1612 个小网格,再用函数 st_centroid() 计算这些网格的中心点坐标。函数 st_intersects() 的作用是对多边形和网格取交集,包含与边界线交叉的网格,默认返回值是一个稀疏矩阵,与索引函数 [.sf (这是 sf 包扩展 [ 函数的一个例子)搭配可以非常方便地过滤出目标网格。与之相关的函数 st_crosses() 可以获得与边界线交叉的网格。
# 将 sfc 类型转化为 sf 类型rongelap_coastline_grid <-st_as_sf(rongelap_coastline_grid)rongelap_coastline_buffer <-st_as_sf(rongelap_coastline_buffer)rongelap_grid <- rongelap_coastline_grid[rongelap_coastline_buffer, op = st_intersects]# 计算网格中心点坐标rongelap_grid_centroid <-st_centroid(rongelap_grid)
ggplot() +geom_sf(data = rongelap_coastline_sfp, fill =NA, color ="gray30", linewidth =0.5) +geom_sf(data = rongelap_grid, fill =NA, color ="gray30") +theme_void()
Christensen, O. F., 和 P. J. Ribeiro Jr. 2002. 《geoRglm: A package for generalised linear spatial models》. R News 2 (2): 26–28.
Pebesma, Edzer. 2018. 《Simple Features for R: Standardized Support for Spatial Vector Data》. The R Journal 10 (1): 439–46. https://doi.org/10.32614/RJ-2018-009.