微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在德雷克/目标管道中使用 rgrass7 从 R 运行并行 GRASS GIS 地图集?

如何解决如何在德雷克/目标管道中使用 rgrass7 从 R 运行并行 GRASS GIS 地图集?

我想使用目标管道中的 rgrass7 包并行化我的 GRASS GIS 分析和计算。由于我是 GRASS 的新手,我不确定如何在同一个 GRASsgiS 数据库中正确设置多个地图集。到目前为止,我尝试了以下代码

library(future)
library(targets)

tar_script({
  options(tidyverse.quiet = TRUE)

  GRASS_DIRECTORY <- "grassdata"
  if (!fs::dir_exists(GRASS_DIRECTORY)) {
    fs::dir_create(GRASS_DIRECTORY)
  } else {
    fs::dir_delete(GRASS_DIRECTORY)
    fs::dir_create(GRASS_DIRECTORY)
  }

  generate_lines <-
    function() {
      coordinates <- tribble(
        ~x,~y,~feature_id,~streamorder,7,1,3,17,2,9,4,)

      # coordinates <-
      # coordinates %>%
      #   mutate(feature_id = rep(1:(nrow(coordinates)/2)))

      sf_lines <-
        coordinates %>%
        mutate(point = str_c(x," ",y)) %>%
        group_by(feature_id,streamorder) %>%
        summarise(point_collection = str_c(point,collapse = ","),.groups = "drop") %>%
        mutate(geometry = str_c("LInesTRING (",point_collection,")")) %>%
        select(-point_collection) %>%
        st_as_sf(wkt = "geometry") %>%
        mutate(across(all_of(c("feature_id","streamorder")),as.integer))

      st_crs(sf_lines) <- 3035

      return(sf_lines)
    }

  initiate_grass_db <-
    function(sf_lines,streamorder) {
      grass_streamorder_directory <-
        "streamorder" %>%
        str_c(streamorder) %>%
        str_c(GRASS_DIRECTORY,.,sep = "/")
      fs::dir_create(grass_streamorder_directory)

      grass_streamorder_location <-
        grass_streamorder_directory %>%
        str_c("location",sep = "/")
      fs::dir_create(grass_streamorder_location)

      grass_streamorder_mapset <-
        grass_streamorder_directory %>%
        str_c("mapset",sep = "/")
      fs::dir_create(grass_streamorder_mapset)

      initGRASS(
        gisBase = "C:/Program Files/GRASS GIS 7.8",gisDbase = grass_streamorder_directory,location = basename(grass_streamorder_location),mapset = "PERMANENT",override = TRUE
      )

      execGRASS("g.proj",flags = c("c","quiet"),proj4 = st_crs(sf_lines)$proj4string
      )
      b_Box <- st_bBox(sf_lines)
      execGRASS("g.region",flags = c("quiet"),n = as.character(b_Box["ymax"]),s = as.character(b_Box["ymin"]),e = as.character(b_Box["xmax"]),w = as.character(b_Box["xmin"]),res = as.character(1)
      )
    }
  tar_option_set(
    packages = c(
      "rgrass7","fs","sf","future","tidyverse"
    ),memory = "transient",garbage_collection = TRUE
  )

  future::plan(future::multisession)

  list(
    tar_target(
      data,generate_lines()
    ),tar_target(
      streamorders,data %>%
        distinct(streamorder) %>%
        pull(streamorder)
    ),tar_target(
      init_grass,initiate_grass_db(data,streamorders),pattern = map(streamorders)
    )
  )
})

targets::tar_make_future(workers = 4)
#> [34m*[39m run target data
#> [34m*[39m run target streamorders
#> [34m*[39m run branch init_grass_940ac7e4
#> [34m*[39m run branch init_grass_50f0d53a
#> FEHLER: Unable to open element file <> for <DEFAULT_WIND@PERMANENT>
#> WARNUNG: Datum <UnkNown_based_on_GRS80_ellipsoid> von GRASS nicht erkannt
#>          und keine Parameter gefunden.
#> FEHLER: Unable to open element file <> for <DEFAULT_WIND@PERMANENT>
#> FEHLER: Unable to open element file <> for <DEFAULT_WIND@PERMANENT>
#> WARNUNG: Datum <UnkNown_based_on_GRS80_ellipsoid> von GRASS nicht erkannt
#>          und keine Parameter gefunden.
#> [34m*[39m end pipeline
#> Warnmeldungen:
#> 1: Ausführung von Kommando 'g.proj.exe -w' ergab Status 1 
#> 2: 1 targets produced warnings. Run tar_Meta(fields = warnings) for the messages. 

reprex package (v0.3.0) 于 2021 年 3 月 16 日创建

我正在使用 rgrass7_0.2-5 和独立的 winGRASS 7.8.5-2,它们都安装在认目录中

R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server x64 (build 17763)

我真的很感激一些关于如何做到这一点的提示

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?