如何在spatstat中基于pp3高程数据创建im对象?
解决方法
首先得明确:pp3是3D点模式对象,而im是2D像素图像,直接用as.im转换肯定报错——R不知道你要把3D里的哪个维度映射成2D图像的像素值。你的需求是把x、y作为平面坐标,z作为对应位置的高程值,生成和bei.extra$elev一样的2D图像,按下面两种场景处理:
场景1:你的数据是规则网格
如果elev_test里的x、y是规则排列的网格点(比如像bei数据集那样的网格),直接构造im对象最省事:
# 提取x、y的范围和唯一值 x_vals <- unique(elev_test$x) y_vals <- unique(elev_test$y) x_range <- range(x_vals) y_range <- range(y_vals) # 把z值整理成矩阵,再生成im对象 z_matrix <- matrix(elev_test$z, nrow = length(x_vals), ncol = length(y_vals)) Elev_im <- im(z_matrix, xcol = x_vals, yrow = y_vals, xrange = x_range, yrange = y_range)
场景2:你的数据是离散点
如果x、y是随机离散的点,需要先把3D点转成带高程标记的2D点模式,再插值生成连续图像:
# 从pp3提取2D坐标和z标记,生成ppp对象 X_ppp <- ppp(X$x, X$y, window = owin(X$window$xrange, X$window$yrange), marks = X$z) # 用薄板样条插值生成im图像(也可以换用method="idw"等其他插值方法) Elev_im <- Smooth(X_ppp, method = "tp")
这样生成的Elev_im就是和bei.extra$elev同类型的im对象了。
内容的提问来源于stack exchange,提问作者Tieygons
相关产品推荐
相关产品推荐

