00_algandmed.R 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. #' Andmebaasi loomine ja ühendamine
  2. #'
  3. str <- ""
  4. ruut::construct_qgis_output_result_to_beter_format(str = str)
  5. source("functions/delete_existing_variables.R")
  6. library(dplyr)
  7. library(qgisprocess)
  8. library(sf)
  9. par(oma = c(0, 0, 0, 0)) # outer margin
  10. par(mar = c(0, 0, 0, 0) + 0.0)
  11. source("01_funktsioonid.R")
  12. # Uue schema loomine
  13. conf <- ruut::get_config()
  14. conf$schema <- "xxx_artikkel_210127"
  15. ruut::db_create_new_schema(conf = conf)
  16. # Objektide nimekiri
  17. objektid <- c("valga", "matsalu", "lahemaa")
  18. # ----------------- Loe piirkond (objekt) -----------------
  19. ## Piirkonna 'pk'
  20. conn <- ruut::db_connect(conf = conf)
  21. ## Valitud objekti indeks
  22. i <- 1
  23. for (i in 1:length(objektid)) {
  24. ## ---------------- 1. piirkonna piir ------------------
  25. ## Muutujad: pk - piirkond
  26. obj <- objektid[i]
  27. pk <- pk_piir(obj = obj)
  28. sf::st_geometry(pk) %>% plot()
  29. gpkg_home <- "/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa"
  30. dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj)
  31. input_layer_name <- "piir"
  32. input_layer <- sprintf("%s|layername=%s", dsn, input_layer_name)
  33. output_layer_name <- "boundarybox_3301"
  34. tmp_gpkg_file <- tempfile(fileext = ".gpkg")
  35. # write to gpkg
  36. class(pk)
  37. sf::write_sf(pk,
  38. dsn = dsn,
  39. layer = "piir", driver = "gpkg", append = FALSE
  40. )
  41. ## ------------ 2. piirkonna 3301 projektsiooniga piirikast --------------
  42. ## 2.1 Esmalt leiame milliset 500x500 meetri ruutudega on objekt kaetud.
  43. # ruut::qgis_algorithm_search_by_word(str = "grid")
  44. algorithm <- "native:creategrid"
  45. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  46. result <- qgisprocess::qgis_run_algorithm(
  47. algorithm = algorithm,
  48. CRS = "EPSG:3301",
  49. # EXTENT = '25.454305528,26.259893095,59.454118579,59.714621582 [EPSG:4326]',
  50. EXTENT = input_layer,
  51. HOVERLAY = 0,
  52. HSPACING = 500,
  53. TYPE = 2,
  54. VOVERLAY = 0,
  55. VSPACING = 500,
  56. OUTPUT = qgisprocess::qgis_tmp_file(ext = ".gpkg")
  57. # .quiet = TRUE
  58. )
  59. result
  60. pk_grid <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
  61. # sf::st_geometry(pk_grid) %>% plot()
  62. ## 2.2 Leitud ruutudele leiame piirikasti.
  63. algorithm <- "qgis:minimumboundinggeometry"
  64. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  65. result <- qgisprocess::qgis_run_algorithm(
  66. algorithm = algorithm,
  67. FIELD = "",
  68. INPUT = pk_grid,
  69. TYPE = 3,
  70. OUTPUT = tmp_gpkg_file
  71. # .quiet = TRUE
  72. )
  73. result
  74. pk_grid_bb <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
  75. sf::st_geometry(pk_grid_bb) %>% plot(add = T)
  76. system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name))
  77. ## ------------- 3. piirkonna epk10t (5x5 km) ruudud --------------------
  78. # 3.1 kogu ruutvõrgustik
  79. ruudud <- c("epk10t_grid", "epk2t_grid", "epk02t_grid")
  80. j <- 4
  81. for (j in 1:length(ruudud)) {
  82. ruut <- ruudud[j]
  83. output_layer_name <- ruut
  84. conf <- ruut::get_config()
  85. pg <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
  86. input <- sprintf(
  87. 'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"%s\".\"%s\" (geometry)',
  88. conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password,
  89. "maaamet", ruut
  90. )
  91. # ruut::qgis_algorithm_search_by_word(str = "extract")
  92. algorithm <- "native:extractbylocation"
  93. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  94. result <- qgisprocess::qgis_run_algorithm(
  95. algorithm = algorithm,
  96. INPUT = input,
  97. INTERSECT = sprintf("%s|layername=%s", dsn, "boundarybox_3301"),
  98. OUTPUT = tmp_gpkg_file,
  99. PREDICATE = c(0, 1)
  100. # .quiet = TRUE
  101. )
  102. result
  103. assign(ruut, sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT")))
  104. system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name))
  105. }
  106. sf::st_geometry(epk10t_grid) %>% plot(add = T)
  107. # 3.2 ainult piirkonnaga seotud ning informatsiooni sisaldav ruutvõrgustik
  108. ruudud <- c("epk10t", "epk2t")
  109. j <- 4
  110. for (j in 1:length(ruudud)) {
  111. ruut <- ruudud[j]
  112. output_layer_name <- ruut
  113. conf <- ruut::get_config()
  114. pg <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
  115. input <- sprintf(
  116. 'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"%s\".\"%s\" (geometry)',
  117. conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password,
  118. "maaamet", ruut
  119. )
  120. # ruut::qgis_algorithm_search_by_word(str = "extract")
  121. algorithm <- "native:extractbylocation"
  122. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  123. result <- qgisprocess::qgis_run_algorithm(
  124. algorithm = algorithm,
  125. INPUT = input,
  126. INTERSECT = input_layer,
  127. OUTPUT = tmp_gpkg_file,
  128. PREDICATE = c(0, 1)
  129. # .quiet = TRUE
  130. )
  131. result
  132. assign(ruut, sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT")))
  133. system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name))
  134. }
  135. sf::st_geometry(epk10t) %>% plot(add = T)
  136. ## ---------------------- vaata layer'id ----------------------
  137. # Vaata layer'eid
  138. sf::st_layers(dsn = dsn)
  139. }
  140. conn <- ruut::db_connect()
  141. q <- sprintf("SELECT * FROM %s.%s_bb", "xxx_artikkel_210127", obj)
  142. cat(sprintf("\n-----------------\n%s\n\n", q))
  143. pk_bb_3301 <- sf::st_read(conn, query = q)
  144. sf::st_geometry(pk) %>% plot()
  145. sf::st_geometry(pk_bb_3301) %>% plot(add = T)
  146. ## 3. piirkonna epk10t ruudud
  147. # 3.1 kogu ruutvõrgustik
  148. epk10t_grid <- pk_epk10t_grid(obj = objektid[i])
  149. # 3.1 ainult piirkonna ruutvõrgustik
  150. epk10t <- pk_epk10t(obj = objektid[i])
  151. sf::st_geometry(epk10t_grid) %>% plot(border = 3, lwd = 0.3, col = "#d3fffb")
  152. sf::st_geometry(epk10t) %>% plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
  153. sf::st_geometry(pk) %>% plot(add = T)
  154. # 4 piirkonna epk10t kaardiruutude nimekiri ortofotode allalaadimiseks
  155. epk10t_nr <- pk_epk10t_ruutude_nimekiri(objektid[i])
  156. ## 5. piirkonna epk2t ruudud
  157. # 3.1 kogu ruutvõrgustik
  158. epk2t_grid <- pk_epk2t_grid(obj = objektid[i])
  159. # 3.1 ainult piirkonna ruutvõrgustik
  160. epk2t <- pk_epk2t(obj = objektid[i])
  161. sf::st_geometry(epk2t_grid) %>% plot(border = 3, lwd = 0.3, col = "#d3fffb")
  162. sf::st_geometry(epk2t) %>% plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
  163. sf::st_geometry(pk) %>% plot(add = T)
  164. ## -------------- Muud ruudustikega seotud demo joonised ----------------
  165. ## 2. Kaardiruudustiku epk200t (100x100km) piirikast
  166. conn <- ruut::db_connect()
  167. q <- sprintf("SELECT * FROM %s.%s", "maaamet", "epk200t_bb")
  168. cat(sprintf("\n-----------------\n%s\n\n", q))
  169. epk200t_bb <- sf::st_read(conn, query = q)
  170. sf::st_geometry(epk200t_bb) %>% plot()
  171. ## 3. Kaardiruudustiku epk200t (100x100km)
  172. conn <- ruut::db_connect()
  173. q <- sprintf("SELECT * FROM %s.%s", "maaamet", "epk200t")
  174. cat(sprintf("\n-----------------\n%s\n\n", q))
  175. epk200t <- sf::st_read(conn, query = q)
  176. sf::st_geometry(epk200t) %>% plot(add = T, border = 3, lwd = 0.3, col = "#d3fffb")