我正尝试使用R将我的shapefile从LHS转换为RHS,如下所示。
原始数据(如LHS中所示)取自2016年加拿大人口普查。它包括加拿大不列颠哥伦比亚省萨里市的所有传播区域(最小的基本单位之一)。可以下载形状文件here。
将其转换为RHS的理由是因为典型的面插值函数(例如st_interpolate_aw
中的sf
)假设值在单位面积上是恒定的。我希望对其他地理单位的普查数据进行插值,而我使用的数据包则利用st_interpolate_aw
进行插值。结果,有人建议我计算shapefile的“人口普遍”。向我发送RHS shapefile的人在GIS中进行了分析,他描述了以下步骤:
使用内核插值器估算shapefile上的总体密度度量
提取具有合理密度(例如50 ppl / km ^ 2)的区域
将这些提取的区域转换为整数蒙版
将蒙版转换为shapefile,然后将其“蒙版”(与之相交)。
虽然这些步骤看起来很简单,但对我来说,在R中实现它却非常具有挑战性。我尝试了各种空间插值/平滑技术,包括简单的平滑,idw,克里金法,没有运气复制或实现结果。我最接近的是smooth_map
库中的tmaptools
函数,如下所示。
library(rgdal)
library(GISTools)
library(tmaptools)
## Read-in file, add `Pop_Den` column for population density
Surrey_census16_geom.sp <- readOGR("./Surrey_DA_geometry_16.shp"),
layer = "Surrey_DA_geometry_16")
Surrey_census16_geom.sp$Pop_Den <- Surrey_census16_geom.sp$Population / Surrey_census16_geom.sp$Shape.Area
## smooth_map doesn't seem to play well with `longlat` projections
Surrey_census16_proj.sp <- set_projection(Surrey_census16_geom.sp, projection = "eck4")
x <- smooth_map(Surrey_census16_proj.sp, "Pop_Den", unit.size = 100, smooth.raster = T, extracting.method="grid", to.Raster = T)
xr <- x$raster
但是如果我尝试使用xr>50
或focal(xr >= 50, w, sum, na.rm = T, pad = T )
之类的代码从栅格中“提取”(其中w简单定义为1的3 * 3矩阵,因为我不确定是什么这样做),似乎提取的是不符合该条件的整个多边形,而不是单个单元格。
如果能的话,我将不胜感激
1)...任何人都可以指出我该怎么做以人口密度进行核密度估计并基于阈值提取网格/栅格单元(即,修复上面的代码)
2)...任何人都可以推荐一种替代方法,以实现基于人口密度“收缩”密度多边形区域的目标,从而获得类似RHS的结果
(注意:RHS图是通过将每个多边形的总人口与阈值进行比较而创建的。在这里,我希望通过人口密度进行比较,因此实际结果可能会有所不同)