You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在spatstat中保留多边形属性并将强度结果追加回SpatialPolygonsDataFrame

保留SpatialPolygonsDataFrame属性的spatstat镶嵌表面处理方案

在使用spatstat计算镶嵌表面的点强度时,将SpatialPolygonsDataFrame转为owin再生成tess对象的过程中,原多边形的标签/属性会丢失。以下是两种保留或追加原属性的可行方案:


方案一:基于rgdal的手动属性关联

1. 简化转换流程并保留多边形ID

原代码的拆分转换步骤过于繁琐,可直接提取多边形并命名列表元素,对应原数据的ID:

library(spatstat)
library(rgdal)

# 读取SpatialPolygonsDataFrame
SF <- readOGR(dsn="D:/", layer="sf")
# 提取原数据属性表
sf_attr <- SF@data
# 获取多边形唯一ID(对应属性表行名)
poly_ids <- row.names(sf_attr)

# 批量转换多边形为owin并命名列表
winlist <- lapply(SF@polygons, function(p) {
  as.owin(SpatialPolygons(list(p)))
})
names(winlist) <- poly_ids

# 创建tess对象并附加原属性表
e <- tess(tiles = winlist, window = as.owin(SF))
e$sf_attributes <- sf_attr

2. 关联强度计算结果与原属性

计算完成后,可直接将强度值与原属性合并:

# B为已创建的ppp点模式对象
QB <- quadratcount(B, tess = e)
Qi.B <- intensity(QB)

# 合并属性与强度值
result_df <- cbind(sf_attr, intensity = Qi.B)

3. 带标签的可视化(可选)

若需在图中标注原多边形标签,可使用text.owin:

plot(intensity(QB, image=TRUE), las=1, main=NULL)
plot(B, pch=20, cex=0.5, col="white", add=TRUE)
# 添加多边形ID标签
text.owin(e, labels = poly_ids, cex=0.6)

方案二:使用sf包简化转换(推荐)

rgdal已停止维护,sf包与spatstat兼容性更好,可直接转换并保留所有属性:

library(sf)
library(spatstat)

# 读取sf格式数据
SF_sf <- st_read(dsn="D:/", layer="sf")
# 直接转为tess对象,自动保留原属性
e_sf <- as.tess(SF_sf)
# 查看附加的属性
e_sf$marks

# 后续强度计算流程不变
QB_sf <- quadratcount(B, tess = e_sf)
Qi.B_sf <- intensity(QB_sf)

内容的提问来源于stack exchange,提问作者Sean Basquill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:25:20