并行化循环rgeos :: gDistance

时间:2017-12-12 16:43:22

标签: r parallel-processing distance spatial

我已找到解决方案,但是,我需要提高效率。

现在我将描述这项任务。

从:

开始
  • SpatialPoints;
  • 形式的一组GPS点
  • 从OSM
  • 获得的SpatialLinesDataFrame形式的道路形状文件

我将SpatialPoints划分为n个块,然后依次将while loop应用于每个块。此while loop包含:

  1. 首先,对每个rgeos::gDistance()执行point函数,以便关联它所属的line。事实上,rgeos::gDistance()的输出是一个巨大的matrix,其中每个row代表一个点,每个column代表distance之间的point lines }和所有 SpatialLinesDataFrame的{​​{1}}。
  2. 然后,感谢apply(gDistMatrix, 1, which.min))我能够通过保持每个点最近的行来减少matrix维度。
  3. 将此循环的结果保存在文件夹中。
  4. 最后,我可以顺序read循环中保存的所有文件并执行rbind()。最终目标是找到每个GPS点的街道名称。

    这一刻 这个while loop的速度瓶颈主要是两个:

    • 最大的瓶颈是由rgeos::gDistance()引起的,因为对于每个GPS,它计算SpatialLinesDataFrame的所有线之间的距离,而不是仅仅比较(例如)200米半径的线
    • 另一个瓶颈是由于此任务是RAM密集型而非CPU密集型。因此,我的想法是将任务并行化,以便一次运行2或3个块。

    通过并行运行多个块来解决目标的最佳方法是什么?重要的是要考虑SpatialPoints的所有不同块只与一个SpatialLinesDataFrame进行比较。

    如果我不清楚,请不要犹豫要求澄清。

0 个答案:

没有答案