R SF中的大空间数据集相交

问题描述 投票:1回答:1

我有两个空间数据集。一个数据集包含许多指定不同要素(例如河流,植被)的多边形(总计超过15万个)。另一个数据集包含更少的指定不同区域的多边形(500)。我需要将这两个数据集相交以获得不同区域中的要素。我可以通过不同的功能对第一个数据集进行子集化。如果使用小要素(2,500个多边形)中的子集,则与区域的交点会非常快(5分钟)。但是,如果我想对更大的要素子集(20,000个多边形)感兴趣,则计算会非常长(我在两个小时后终止了计算)。这甚至不是我需要相交的最大特征(50,000个多边形)。

这是我运行的代码片段:

    clean_intersect_save = function(geo_features, areas) {

  # make geometries valid
  data_valid_geoms = st_parallel(sf_df = st_geometry(geo_features), 
                                 sf_func = st_make_valid, 
                                 n_cores = 4)

  # remove unnecessary columns
  data_valid = st_drop_geometry(x) %>% select("feature")
  data_valid = st_sf(data_clean, geometry = data_valid_geoms)

  # intersect the geo-features and areas
  data_valid_split = st_parallel(sf_df = bezirke, 
                                 sf_func = st_intersection, 
                                 n_cores = 4,
                                 data_clean)

  # save shp file
  st_write(data_valid_split, "data_valid_splir.shp")

  return(data_valid_split)
}

两个输入均为sf数据帧。我发现st_parallel是一个函数here

我的问题是:经验丰富的空间数据人员通常将如何解决这一任务?我是否需要更多的核心和/或更多的耐心?我使用SF错误吗? R / sf是错误的工具吗?

感谢您的帮助。这是我的第一个空间数据分析项目,很抱歉,如果我忽略了一些明显的想法。

r gis sf
1个回答
0
投票

由于这个模糊的问题可能不会得到真正的答案,所以我会自己回答。

感谢@Chris和@TimSalabim的帮助。我最终结合了两种想法。

我最终使用了PostGIS,根据我的经验,这是一种非常直观的方式来处理空间数据。对我来说,加快相交计算速度的三件事是:

© www.soinside.com 2019 - 2024. All rights reserved.