create_epk02t_grid.R 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # Võrgustike genereerimine ja salvestamine andmebaasi
  2. #' Funktsioon gnereerib kogu Eestit katva ruudustike piirikasti
  3. #' 'maaamet.epk200t_bb' sisse ruutvõrgustiku ruudu suurusega 100x100 m.
  4. #' Võrgustik salvestatakse andmebaasi nime 'epk02t_grid' alla.
  5. #' !!!!!!! Võrgustiku genereerimine ja salvestamine andmebaasi
  6. #' võtab aega üle 12 tunni. Salvestatavate andmete maht ca 5 GB.
  7. create_epk02t_grid <- function() {
  8. # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
  9. algorithm <- "grass7:v.mkgrid"
  10. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  11. if (!dir.exists("tmp/epk02t_grid")) dir.create("tmp/epk02t_grid", recursive = T)
  12. conf <- ruut::get_config()
  13. conf$table <- "epk02t_grid"
  14. conf$schema <- "maaamet"
  15. ## Loe instaleeritud tabelid andmebaasis
  16. installed_tables <- ruut::db_schema_tablenames(conf = conf)
  17. if (!conf$table %in% installed_tables) {
  18. # 1:40
  19. for (i in 1:40) {
  20. coordinates <- sprintf("300000,6%s0000 [EPSG:3301]", (29 + i))
  21. map <- sprintf("tmp/epk02t_grid/%s.gpkg", i)
  22. cat(sprintf("\n%s/40 1. coordinates: %s, 2. map: %s", i, coordinates, map))
  23. # ------------------
  24. result <- qgisprocess::qgis_run_algorithm(
  25. algorithm = algorithm,
  26. "-h" = 0,
  27. "-p" = 0,
  28. GRASS_OUTPUT_TYPE_PARAMETER = 3,
  29. GRASS_REGION_PARAMETER = "300000,800000,6320000,6700000 [EPSG:3301]",
  30. GRASS_VECTOR_DSCO = "",
  31. GRASS_VECTOR_EXPORT_NOCAT = 0,
  32. GRASS_VECTOR_LCO = "",
  33. angle = 0,
  34. box = "100,100",
  35. breaks = 0,
  36. coordinates = coordinates,
  37. grid = "100,5000", # "4000,5000"
  38. map = map,
  39. position = 0,
  40. .quiet = TRUE
  41. )
  42. # result
  43. ## Muudame rea numbreid, kuna tsükliga lähevad need kaduma.
  44. layers <- rgdal::ogrListLayers(map)
  45. x <- rgdal::readOGR(map, layers[1])
  46. x$row <- x$row + (i - 1) * 100
  47. x$cat <- rev(x$cat + (i - 1) * 100)
  48. rgdal::writeOGR(obj = x, dsn = map, layer = layers[1], driver = "GPKG", overwrite_layer = T)
  49. ## Lisame kihi andmebaasi
  50. cmd <- sprintf(
  51. paste0(
  52. "ogr2ogr -append --config PG_USE_COPY YES -f PostgreSQL ",
  53. "PG:\" dbname='%s' host=%s port=%d user='%s' password='%s' ",
  54. "sslmode=%s active_schema=%s \" -lco DIM=2 \"%s\" -nlt GEOMETRY ",
  55. "-lco GEOMETRY_NAME=geometry -lco FID=%s -nln %s.%s ",
  56. "-s_srs %s -t_srs %s -nlt %s"
  57. ),
  58. conf$dbname, conf$host, conf$port, conf$user, conf$password, conf$sslmode,
  59. conf$schema, map, "id", conf$schema, conf$table, "EPSG:3301", "EPSG:4326",
  60. "POLYGON"
  61. )
  62. cat(sprintf("\n-----------------\n%s\n", cmd))
  63. system(cmd)
  64. }
  65. cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
  66. # result
  67. } else {
  68. cat(sprintf(
  69. "\n-----------------\nUue andmebaasi '%s' installimiseks pead vana enne kustutama.\n",
  70. conf$table
  71. ))
  72. }
  73. }