minu_teed_riigiteed_valjapaasud.R 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #' Riigiteedevõrgu väljapääsupunktide leidmine
  2. #'
  3. #' 'Minu teed' andmestikest riigiteede väljapääsupunktide leidmine.
  4. #'
  5. #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
  6. #' @return No output.
  7. #' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()], [estmap::minu_teed_riigiteed()], [estmap::minu_teed_muud_teed()], [estmap::minu_teed_eesti()], [estmap::minu_teed_riigiteed_valjapaasud()]
  8. #' @keywords postgis
  9. #' @export
  10. #' @examples
  11. #' \dontrun{
  12. #'
  13. #' conf <- ruut::get_config()
  14. #' minu_teed_riigiteed_valjapaasud(conf = conf)
  15. #' }
  16. minu_teed_riigiteed_valjapaasud <- function(conf = NULL) {
  17. ## --------------------- muutujad ja teisendused -----------------------------
  18. vars <- ajutised_muutujad(conf = conf)
  19. conf <- vars$conf
  20. # conf$schema <- "minu_teed"
  21. # conf$table <- "zzz"
  22. # output <- ruut::construct_to_gpkg_output_postgres_str(conf = conf, geometry_field = "geom")
  23. ## -------- 1.1 Kontrollime andmebaasis vajalike tabelite olemasolu ----------
  24. tbl_names <- ruut::db_schema_tablenames(conf = conf)
  25. if (!all(c("teedevork_riigiteed", "teedevork_kt_p", "teedevork_kt_numbrita_p") %in% tbl_names)) {
  26. cat("\n------------------\nPuuduvad vajalikud andmebaasitabelid.\n")
  27. return(NULL)
  28. }
  29. ## -------------- 1.1 Muude teede lõikumispunkt riigiteedega -----------------
  30. # ruut::qgis_algorithm_search_by_word("intersections")
  31. algorithm <- "native:lineintersections"
  32. # ruut::qgis_show_help(algorithm = algorithm)
  33. conf$schema <- "minu_teed"
  34. conf$table <- "teedevork_kt"
  35. input <- ruut::construct_to_gpkg_output_postgres_str(
  36. conf = conf, geometry_type = "MultiLineString", srid = 3301,
  37. checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom"
  38. )
  39. conf$schema <- "minu_teed"
  40. conf$table <- "teedevork_riigiteed"
  41. intersect <- ruut::construct_to_gpkg_output_postgres_str(
  42. conf = conf, geometry_type = "MultiLineString", srid = 3301,
  43. checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom"
  44. )
  45. output <- vars$tmp_gpkg_file_output_1
  46. cmd <- sprintf("qgis_process run %s --INPUT='%s' --INPUT_FIELDS='tyyp' --INTERSECT='%s' --INTERSECT_FIELDS='id' --INTERSECT_FIELDS='tyyp_t' --INTERSECT_FIELDS='tee' --INTERSECT_FIELDS='nimetus' --INTERSECT_FIELDS_PREFIX=\"\" --OUTPUT='%s' ", algorithm, input, intersect, output)
  47. system(cmd)
  48. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  49. ## ------------ 1.2 Numbrita teede lõikumispunkt riigiteedega ----------------
  50. # ruut::qgis_algorithm_search_by_word("intersections")
  51. algorithm <- "native:lineintersections"
  52. # ruut::qgis_show_help(algorithm = algorithm)
  53. conf$schema <- "minu_teed"
  54. conf$table <- "teedevork_kt_numbrita"
  55. input <- ruut::construct_to_gpkg_output_postgres_str(
  56. conf = conf, geometry_type = "MultiLineString", srid = 3301,
  57. checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom"
  58. )
  59. conf$schema <- "minu_teed"
  60. conf$table <- "teedevork_riigiteed"
  61. intersect <- ruut::construct_to_gpkg_output_postgres_str(
  62. conf = conf, geometry_type = "MultiLineString", srid = 3301,
  63. checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom"
  64. )
  65. output <- vars$tmp_gpkg_file_output_2
  66. cmd <- sprintf("qgis_process run %s --INPUT='%s' --INPUT_FIELDS='tyyp' --INTERSECT='%s' --INTERSECT_FIELDS='id' --INTERSECT_FIELDS='tyyp_t' --INTERSECT_FIELDS='tee' --INTERSECT_FIELDS='nimetus' --INTERSECT_FIELDS_PREFIX=\"\" --OUTPUT='%s' ", algorithm, input, intersect, output)
  67. system(cmd)
  68. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  69. ## --------------------- 1.3 Ühendame lõikepunktid ---------------------------
  70. # ruut::qgis_algorithm_search_by_word("merge")
  71. algorithm <- "native:mergevectorlayers"
  72. # ruut::qgis_show_help(algorithm = algorithm)
  73. layer_1 <- vars$tmp_gpkg_file_input_1
  74. layer_2 <- vars$tmp_gpkg_file_input_2
  75. output <- vars$tmp_gpkg_file_output_3
  76. cmd <- sprintf("qgis_process run native:mergevectorlayers --CRS='epsg:3301' --LAYERS='%s' --LAYERS='%s' --OUTPUT='%s' ", layer_1, layer_2, output)
  77. system(cmd)
  78. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  79. ## ------------------ 1.4 Kustutame ebaolulised väljad -----------------------
  80. # ruut::qgis_algorithm_search_by_word("delete")
  81. algorithm <- "native:deletecolumn"
  82. # ruut::qgis_show_help(algorithm = algorithm)
  83. input <- vars$tmp_gpkg_file_input_3
  84. output <- vars$tmp_gpkg_file_output_4
  85. cmd <- sprintf("qgis_process run %s --COLUMN='id' --COLUMN='layer' --COLUMN='path' --INPUT='%s' --OUTPUT='%s' ", algorithm, input, output)
  86. system(cmd)
  87. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  88. ## ------------------ 1.5 Copy temp gpkg file to postgis ---------------------
  89. conf$schema <- "minu_teed"
  90. conf$table <- "teedevork_exits_muud_teed"
  91. PG <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
  92. cmd <- sprintf("ogr2ogr -progress --config PG_USE_COPY YES -f PostgreSQL %s -lco DIM=2 %s %s -overwrite -nlt %s -lco GEOMETRY_NAME=geom -lco FID=id -nln %s.%s -nlt PROMOTE_TO_MULTI", PG, vars$tmp_gpkg_file, vars$layer_4, "POINT", conf$schema, conf$table)
  93. system(cmd)
  94. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", conf$table))
  95. ## ------------ 1.6 Riigiteede omavahelised lõikumispunktd -------------------
  96. # ruut::qgis_algorithm_search_by_word("intersections")
  97. algorithm <- "native:lineintersections"
  98. # ruut::qgis_show_help(algorithm = algorithm)
  99. conf$schema <- "minu_teed"
  100. conf$table <- "teedevork_riigiteed"
  101. input <- ruut::construct_to_gpkg_output_postgres_str(
  102. conf = conf, geometry_type = "MultiLineString", srid = 3301,
  103. checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom"
  104. )
  105. conf$schema <- "minu_teed"
  106. conf$table <- "teedevork_riigiteed"
  107. intersect <- ruut::construct_to_gpkg_output_postgres_str(
  108. conf = conf, geometry_type = "MultiLineString", srid = 3301,
  109. checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom"
  110. )
  111. output <- vars$tmp_gpkg_file_output_1
  112. cmd <- sprintf("qgis_process run %s --INPUT='%s' --INPUT_FIELDS='tyyp' --INTERSECT='%s' --INTERSECT_FIELDS='id' --INTERSECT_FIELDS='tyyp_t' --INTERSECT_FIELDS='tee' --INTERSECT_FIELDS='nimetus' --INTERSECT_FIELDS_PREFIX=\"\" --OUTPUT='%s' ", algorithm, input, intersect, output)
  113. system(cmd)
  114. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  115. ## ------------------ 1.7 Kustutame ebaolulised väljad -----------------------
  116. # ruut::qgis_algorithm_search_by_word("delete")
  117. algorithm <- "native:deletecolumn"
  118. # ruut::qgis_show_help(algorithm = algorithm)
  119. input <- vars$tmp_gpkg_file_input_1
  120. output <- vars$tmp_gpkg_file_output_2
  121. cmd <- sprintf("qgis_process run %s --COLUMN='id' --COLUMN='layer' --COLUMN='path' --INPUT='%s' --OUTPUT='%s' ", algorithm, input, output)
  122. system(cmd)
  123. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  124. ## ------------------ 1.8 Copy temp gpkg file to postgis ---------------------
  125. conf$schema <- "minu_teed"
  126. conf$table <- "teedevork_exits_riigiteed"
  127. PG <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
  128. cmd <- sprintf("ogr2ogr -progress --config PG_USE_COPY YES -f PostgreSQL %s -lco DIM=2 %s %s -overwrite -nlt %s -lco GEOMETRY_NAME=geom -lco FID=id -nln %s.%s -nlt PROMOTE_TO_MULTI", PG, vars$tmp_gpkg_file, vars$layer_2, "POINT", conf$schema, conf$table)
  129. system(cmd)
  130. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", conf$table))
  131. }