GIS Shapefile转spatstat中PPP遇问题:tess命令运行超时
问题解答
操作问题分析
你之前的操作存在两个关键问题:
- 使用了
maptools::readShapeSpatial这种已被弃用的旧函数,导入和转换效率低,且对复杂多边形的兼容性差; - 错误使用了
tess()函数:如果你的目标只是创建PPP所需的研究区范围,根本不需要创建镶嵌对象(tess)——镶嵌是用于划分区域单元(比如分区分析)的工具,而多多边形组成的研究区直接用复合owin对象即可,强行创建tess会因多边形数量多、顶点复杂导致运算卡死。
正确获取owin研究区并创建PPP的流程
1. 替换工具包,高效导入Shapefile
spatstat 3.0+版本推荐配合sf包处理空间数据(替代旧的sp、maptools),步骤如下:
- 安装并加载必要包:
install.packages(c("sf", "spatstat.geom")) library(sf) library(spatstat.geom)
- 导入多多边形Shapefile:
UMshape1 <- st_read("F:/GIS/export_shape/Clipped_urban_matrix.shp")
2. 直接转换为复合owin研究区
无需拆分多边形为列表,直接将sf对象转换为包含所有多边形的复合owin:
study_area_owin <- as.owin(UMshape1)
这个对象就是你创建PPP需要的研究区窗口。
3. 创建PPP点模式数据集
假设你有点数据的x、y坐标,或者已导入sf格式的点数据:
- 若用坐标创建:
# 替换x_coords、y_coords为你的点坐标向量 points_ppp <- ppp(x = x_coords, y = y_coords, window = study_area_owin)
- 若从sf点对象转换:
# sf_points是你的sf格式点数据 points_ppp <- as.ppp(sf_points) # 自动关联研究区窗口(若sf点数据的CRS和研究区一致) points_ppp <- points_ppp[study_area_owin]
若确实需要创建镶嵌对象(tess)的优化方案
如果你的研究需要用每个多边形作为一个镶嵌单元,先优化多边形减少运算压力:
- 简化多边形顶点(根据数据精度调整
dTolerance,单位和数据CRS一致):
UMshape_simplified <- st_simplify(UMshape1, dTolerance = 10)
- 转换为owin列表后创建镶嵌:
UM_windows_list <- as.list(as.owin(UMshape_simplified)) teUM1 <- tess(tiles = UM_windows_list)
内容的提问来源于stack exchange,提问作者Juniper
相关产品推荐
相关产品推荐

