minu_teed_loomine.R 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #' Teeregistri WFS ja maaameti andmete oma teeandmete 'minu_teed' loomine
  2. #'
  3. #' 1. Põhi-, kõrval ja tugimaanteedest ning rambid moodustatakse uus andmebaas 'riigiteedevork'.
  4. #' 2. Ilma teenumbrita kohalike teede andmebaasi 'numbrita_kohalik_tee' loomine.
  5. #' 3. Eesti kaart ainult suurte saartega (üle 10km2).
  6. #' 4. Polügoniseerime riigiteedevõrgu.
  7. #' Eesti avaandmete \url{https://avaandmed.eesti.ee/datasets?emsId=35} teabevärava kaudu teederegistri WFS (Web Feature Service) andmete eksportimine postgisandmebaasi. WFS andmestiku kirjeldus: \url{https://teeregister-api.mnt.ee/teenus/wfs?request=GetCapabilities&service=WFS}
  8. #'
  9. #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
  10. #' @return No output.
  11. #' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()], [estmap::teeregister_wfs()]
  12. #' @keywords postgis
  13. #' @export
  14. #' @examples
  15. #' \dontrun{
  16. #'
  17. #' conf <- ruut::get_config()
  18. #' minu_teed_loomine(conf = conf)
  19. #' }
  20. minu_teed_loomine <- function(conf = NULL) {
  21. ## ------------- muutujad ja teisendused ---------------
  22. # source("R/ajutised_muutujad.R")
  23. vars <- ajutised_muutujad(conf = conf)
  24. conf <- vars$conf
  25. # conf$schema <- "minu_teed"
  26. # conf$table <- "zzz"
  27. # output <- ruut::construct_to_gpkg_output_postgres_str(conf = conf, geometry_field = "geom")
  28. # conf$schema <- "eesti"
  29. # conf$table <- "e_501_tee_j"
  30. # cat(paste(paste0('"', ruut::db_table_colnames(conf = conf)$column_name, '"'), collapse = ","))
  31. ## -------- 1.1 Kontrollime andmebaasis vajalike tabelite olemasolu ----------
  32. conf$schema <- "minu_teed"
  33. tbl_names <- ruut::db_schema_tablenames(conf = conf)
  34. if (!all(c("teedevork_riigiteed_osadena", "eesti", "teedevork") %in% tbl_names)) {
  35. cat("\n------------------\nPuuduvad vajalikud andmebaasitabelid.\n")
  36. return(NULL)
  37. }
  38. ## -------------------- 1.1 Loeme eesti kontuurjoone -------------------------
  39. # ruut::qgis_algorithm_search_by_word("lines")
  40. algorithm <- "native:polygonstolines"
  41. # ruut::qgis_show_help(algorithm = algorithm)
  42. conf$schema <- "minu_teed"
  43. conf$table <- "eesti"
  44. input <- ruut::construct_to_gpkg_output_postgres_str(
  45. conf = conf, geometry_type = "Polygon", srid = 3301,
  46. checkPrimaryKeyUnicity = TRUE, key = "fid", geometry_field = "geom"
  47. )
  48. output <- vars$tmp_gpkg_file_output_1
  49. str <- sprintf("{ 'INPUT' : '%s', 'OUTPUT' : '%s' }", input, output)
  50. cmd <- ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  51. system(cmd)
  52. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  53. ## ------------------------- 1.2 Riigi teed osadena ---------------------------
  54. ## 4.2 Eemaldame riigiteedest rambid.
  55. algorithm <- "native:extractbyattribute"
  56. # ruut::qgis_show_help(algorithm = algorithm)
  57. conf$schema <- "minu_teed"
  58. conf$table <- "teedevork_riigiteed_osadena"
  59. input <- ruut::construct_to_gpkg_output_postgres_str(
  60. conf = conf, geometry_type = "MultiLineString", srid = 3301,
  61. checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom"
  62. )
  63. output <- vars$tmp_gpkg_file_output_2
  64. str <- sprintf("{ 'FIELD' : 'tyyp', 'INPUT' : '%s', 'OPERATOR' : 5, 'OUTPUT' : '%s', 'VALUE' : '30' }", input, output)
  65. cmd <- ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  66. system(cmd)
  67. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  68. ## ------------- 1.3 Riigiteede ja eesti kontuuri ühendamine -----------------
  69. ## 4.3 Enne polügoniseerimist ühendame eesti kontuuri ja teedevõrgu üheks.
  70. # ruut::qgis_algorithm_search_by_word("merge")
  71. algorithm <- "native:mergevectorlayers"
  72. # ruut::qgis_show_help(algorithm = algorithm)
  73. vars$layer_1 <- vars$tmp_gpkg_file_input_1
  74. vars$layer_2 <- vars$tmp_gpkg_file_input_2
  75. output <- vars$tmp_gpkg_file_output_3
  76. cmd <- sprintf(
  77. "qgis_process run native:mergevectorlayers --CRS='epsg:3301' --LAYERS='%s' --LAYERS='%s' --OUTPUT='%s' ",
  78. vars$layer_1, vars$layer_2, output
  79. )
  80. system(cmd)
  81. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  82. ## -------------------- 1.4 Teeme veergude valiku ----------------------------
  83. # cat(paste(paste0('--FIELDS=\'', ruut::db_table_colnames(conf = conf)$column_name, '\''), collapse = " "))
  84. # cat(paste(paste0('--COLUMN=\'', ruut::db_table_colnames(conf = conf)$column_name, '\''), collapse = " "))
  85. # ruut::qgis_algorithm_search_by_word("retain")
  86. # algorithm <- "native:deletecolumn"
  87. algorithm <- "native:retainfields"
  88. # ruut::qgis_show_help(algorithm = algorithm)
  89. input <- vars$tmp_gpkg_file_input_3
  90. output <- vars$tmp_gpkg_file_output_4
  91. cmd <- sprintf("qgis_process run %s --FIELDS='fid' --INPUT='%s' --OUTPUT='%s' ", algorithm, input, output)
  92. system(cmd)
  93. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output))
  94. ## ----------------------- 1.5 Polügoniseerimine -----------------------------
  95. ## 4.4 Polügoniseerime saadud riigiteedevõrgu. Tekib teedega piiratud polügoonid.
  96. # ruut::qgis_algorithm_search_by_word("Polygonize")
  97. algorithm <- "native:polygonize"
  98. # ruut::qgis_show_help(algorithm = algorithm)
  99. input <- vars$tmp_gpkg_file_input_4
  100. output <- vars$tmp_gpkg_file_output_5
  101. str <- sprintf("{ 'INPUT' : '%s', 'KEEP_FIELDS' : False, 'OUTPUT' : '%s' }", input, output)
  102. cmd <- ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  103. system(cmd)
  104. ## ------------------ 1.4 Copy temp gpkg file to postgis ---------------------
  105. conf$schema <- "minu_teed"
  106. conf$table <- "teedevork_riigiteed_a"
  107. PG <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
  108. 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_5, "POLYGON", conf$schema, conf$table)
  109. system(cmd)
  110. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", conf$table))
  111. ## ------------------ Teedevõrgu polügoniseerimine ------------------
  112. ## 4.5 Copy temp gpkg file to postgis.
  113. conf$schema <- "minu_teed"
  114. conf$table <- "teedevork_riigiteed_a"
  115. PG <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
  116. 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=fid -nln %s.%s -nlt PROMOTE_TO_MULTI", PG, vars$tmp_gpkg_file, vars$layer_4, "MULTIPOLYGON", conf$schema, conf$table)
  117. system(cmd)
  118. cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", conf$table))
  119. # ## =================== !!!!!!!!!!!!!! POOLELI !!!!!!!!!!!! =======================
  120. #
  121. # ## 4.2 Lõikame Eesti kaardist polügoniseerime riigiteedevõrgu välja.
  122. # ## Tekib ümber Eesti raam, mis tuleb jagada kuidagi transporditsoonideks.
  123. # # ruut::qgis_algorithm_search_by_word("Difference")
  124. # algorithm <- "native:difference"
  125. # # ruut::qgis_show_help(algorithm = algorithm)
  126. # conf$schema <- "minu_teed"
  127. # conf$table <- "eesti"
  128. # input <- ruut::construct_to_gpkg_output_postgres_str(
  129. # conf = conf, geometry_type = "Polygon", srid = 3301,
  130. # checkPrimaryKeyUnicity = TRUE, key = "fid", geometry_field = "geom"
  131. # )
  132. # conf$schema <- "minu_teed"
  133. # conf$table <- "riigiteedevork_a"
  134. # overlay <- ruut::construct_to_gpkg_output_postgres_str(
  135. # conf = conf, geometry_type = "Polygon", srid = 3301,
  136. # checkPrimaryKeyUnicity = TRUE, key = "fid", geometry_field = "geom"
  137. # )
  138. # conf$schema <- "minu_teed"
  139. # conf$table <- "riigiteedevork_xxx"
  140. # output <- ruut::construct_to_gpkg_output_postgres_str(
  141. # conf = conf, geometry_field = "geom", key = "fid"
  142. # )
  143. # str <- sprintf("{ 'INPUT' : '%s', 'OUTPUT' : '%s', 'OVERLAY' : '%s' }", input, output, overlay)
  144. # cmd <- ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  145. # system(cmd)
  146. #
  147. #
  148. # ## 4.3 Kuna polügoniseeritud pinnad ei olnud täiuslikud, siis teostame
  149. # ## polügoniseeriist veelkorra. Selleks lõikame esmalt teedevõrgust
  150. # ## tekkinud raamiga need teed mis jäävad raamis sisse.
  151. # # ruut::qgis_algorithm_search_by_word("Intersection")
  152. # algorithm <- "native:intersection"
  153. # # ruut::qgis_show_help(algorithm = algorithm)
  154. # conf$schema <- "minu_teed"
  155. # conf$table <- "riigiteedevork"
  156. # input <- ruut::construct_to_gpkg_output_postgres_str(
  157. # conf = conf, geometry_type = "MultiLineString", srid = 3301,
  158. # checkPrimaryKeyUnicity = TRUE, key = "fid", geometry_field = "geom"
  159. # )
  160. # conf$schema <- "minu_teed"
  161. # conf$table <- "riigiteedevork_xxx"
  162. # overlay <- ruut::construct_to_gpkg_output_postgres_str(
  163. # conf = conf, geometry_type = "MultiPolygon", srid = 3301,
  164. # checkPrimaryKeyUnicity = TRUE, key = "fid", geometry_field = "geom"
  165. # )
  166. # conf$schema <- "minu_teed"
  167. # conf$table <- "riigiteedevork_xxx1"
  168. # output <- ruut::construct_to_gpkg_output_postgres_str(
  169. # conf = conf, geometry_field = "geom"
  170. # )
  171. # str <- sprintf("{ 'INPUT' : '%s', 'INPUT_FIELDS' : [], 'OUTPUT' : '%s', 'OVERLAY' : '%s', 'OVERLAY_FIELDS' : [], 'OVERLAY_FIELDS_PREFIX' : '' }", input, output, overlay)
  172. # cmd <- ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  173. # system(cmd)
  174. }