【问题标题】:Combining SpatialPointsDataFrame with SpatialPolygonsDataFrame error: maximum returned dense matrix size exceeded将 SpatialPointsDataFrame 与 SpatialPolygonsDataFrame 结合使用错误:超过返回的最大密集矩阵大小
【发布时间】:2017-07-16 12:34:41
【问题描述】:

我正在尝试在 SpatialPolygonsDataFrame (info) 上组合 1000x1000m 正方形的 SpatialPointsDataFrame(网格),以聚合每个网格正方形内点的所有信息。

我试过代码:

combined <- intersect(info, grid)

但我收到此错误:

Error in RGEOSBinPredFunc(spgeom1, spgeom2, byid, func) : 
  rgeos_binpredfunc_prepared: maximum returned dense matrix size exceeded

还有其他方法可以做我想做的事或解决错误吗?

【问题讨论】:

    标签: r polygon spatial intersect


    【解决方案1】:

    该错误表明您正在用尽内存。一种解决方案是分解数据集并分块进行相交。新的SF 包使使用 dplyr 动词更容易做到这一点。添加一列来定义您的块,然后尝试以下操作:

    combined <- info %>%
        group_by(chuncks) %>%
        do(sf::st_intersection(., grid))
    

    为了加快处理速度,您还可以尝试将数据集拆分为一个块列表,然后并行应用 st_intersection 函数。这要快得多。

    #import packages
    library(foreach)
    library(doParallel)
    
    #setup parallel backend to use 8 processors
    cl<-makeCluster(4)
    registerDoParallel(cl)
    
    tmp <- split(info, info$chunks)
    
    # run using foreach
    by.chunk <- foreach(df = tmp) %dopar% {
        sf::st_intersection(df, grid)
    }
    
    # combine list of data.frames 
    combined <- ldply(by.chunck
    

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 2014-10-24
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 2018-12-08
      • 1970-01-01
      相关资源
      最近更新 更多