ortofoto_split_to_epk2t.R 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #' Maa-ameti ortofoto splittimine 1x1km suurusteks TIFF fotofailideks
  2. #'
  3. #' Maa-ameti allalaetud ortofoto jagamine väiksemateks osadeks. Andmestruktuur: raster. Mõõtkava 1:2 000 (vaata ruudustiku infot \url{https://geoportaal.maaamet.ee/est/ruumiandmed/kaardilehtede-susteemid-p224.html}). Loe: \url{https://geoportaal.maaamet.ee/est/andmed-ja-kaardid/ortofotod-p99.html}. Uued kaardid salvestatakse kataloogi (default = '~/ortofotod'). Faili nimi on EPK2T maa-ameti kaardiruudu väärtusega. Eesti topokaardistuse tarbeks toodetud ortofotodes on piksli suurusega 20-40 cm ja katavad kogu riigi territooriumi. Andmete kasutamisel palume viidata Maa-ametile. Näiteks: 'Ortofoto, Maa-amet 2021'. Käsitsi allalaadimine /url{https://geoportaal.maaamet.ee/index.php?lang_id=1&page_id=610}.
  4. #' @importFrom magrittr %>%
  5. #' @param epk10t 5-kohaline number, mis vastab kaardi 1:10 000 ruudu numbrile \url{https://geoportaal.maaamet.ee/est/ruumiandmed/kaardilehtede-susteemid-p224.html}.
  6. #' @param dir kataloog, kus GEOTIFF failasub.
  7. #' @param saveToDir Splititud GEOTIFF failide salvestamise kataloog.
  8. #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
  9. #' @return GEOTIFF files.
  10. #' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()]
  11. #' @keywords maa-amet, ortofoto
  12. #' @export
  13. #' @examples
  14. #' \dontrun{
  15. #'
  16. #' conf <- ruut::get_config()
  17. #' ortofoto_split_to_epk2t(epk10t = 54711, dir = "/home/ardo/ortofotod",
  18. #' saveToDir = "/home/ardo/ortofotod", conf = conf)
  19. #' }
  20. ortofoto_split_to_epk2t <-
  21. function(epk10t = NULL,
  22. dir = "/home/ardo/ortofotod",
  23. saveToDir = "/home/ardo/ortofotod",
  24. conf = NULL) {
  25. ## ------------- muutujad ja teisendused ---------------
  26. # source("R/ajutised_muutujad.R")
  27. vars <- ajutised_muutujad(conf = conf)
  28. conf <- vars$conf
  29. # epk10t <- 62053; epk10t <- 65813
  30. # epk10t numbri õigsuse kontroll
  31. epk10t_all <-
  32. utils::read.csv(file = system.file("csv", "epk10t.csv", package = "estmap"),
  33. header = T)[, "nr"]
  34. if (!epk10t %in% epk10t_all) {
  35. cat(
  36. sprintf(
  37. "\n---------------\n\nValitud epk10t ruudu number %s ei ole \u00F5ige.\n",
  38. epk10t
  39. )
  40. )
  41. return()
  42. }
  43. # GEOTIFF failide salvestamise kataloog.
  44. if (!dir.exists(saveToDir)) {
  45. dir.create(saveToDir, recursive = T)
  46. }
  47. # Kas GEOTIFF fail eksisteerib.
  48. input_tif_file <- sprintf("%s/%s.tif", dir, epk10t)
  49. if (!file.exists(input_tif_file)) {
  50. cat(sprintf(
  51. "\n---------------\n\nEi leia TIFF faili: %s.\n",
  52. input_tif_file
  53. ))
  54. return()
  55. }
  56. # 1. ============= Ortofoto TIFF faili piirkast =============
  57. # ruut::qgis_algorithm_search_by_word("mask")
  58. algorithm <- "native:polygonfromlayerextent"
  59. input <- input_tif_file
  60. output <- vars$tmp_gpkg_file_output_1 # ajutine fail
  61. str <-
  62. sprintf("{
  63. 'INPUT' : '%s',
  64. 'OUTPUT' : '%s',
  65. 'ROUND_TO' : 0.0
  66. }",
  67. input,
  68. output)
  69. cmd <-
  70. ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  71. system(cmd)
  72. # 2. ============= epk2t_grid ja TIFF piirkasti ühisosa =============
  73. # ruut::qgis_algorithm_search_by_word("intersection")
  74. algorithm <- "native:extractbylocation"
  75. conf$schema <- "maaamet"
  76. conf$table <- "epk2t_grid"
  77. input <-
  78. ruut::construct_to_gpkg_output_postgres_str(
  79. conf = conf,
  80. geometry_field = "geom",
  81. geometry_type = "Polygon",
  82. srid = 3301,
  83. checkPrimaryKeyUnicity = TRUE,
  84. key = "id"
  85. )
  86. intersect <- vars$tmp_gpkg_file_input_1 # ajutine fail
  87. output <- vars$tmp_gpkg_file_output_2 # ajutine fail
  88. str <-
  89. sprintf(
  90. "{
  91. 'INPUT' : '%s',
  92. 'INTERSECT' : '%s',
  93. 'OUTPUT' : '%s',
  94. 'PREDICATE' : [6]
  95. }",
  96. input,
  97. intersect,
  98. output
  99. )
  100. cmd <-
  101. ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  102. system(cmd)
  103. # 3. ============= Multipolygon to polygon =============
  104. # ruut::qgis_algorithm_search_by_word("singlepart")
  105. algorithm <- "native:multiparttosingleparts"
  106. input <- vars$tmp_gpkg_file_input_2 # ajutine fail
  107. output <- vars$tmp_gpkg_file_output_3 # ajutine fail
  108. str <-
  109. sprintf(" {
  110. 'INPUT' : '%s',
  111. 'OUTPUT' : '%s'
  112. }",
  113. input,
  114. output)
  115. cmd <-
  116. ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  117. system(cmd)
  118. # 4. ============= epk2t kaardiosadega tiff faili lõikamine tükkideks =============
  119. # EPK2T kaartide atribuutide tabeli kirjutamine csv fail.
  120. input <- paste(vars$tmp_gpkg_file,
  121. "test_layer_3") # ajutine fail
  122. output <-
  123. sprintf("%s/%s.csv", vars$tmp_dir, "xxxx") # ajutine fail
  124. cmd <-
  125. sprintf(
  126. "ogr2ogr -f \"CSV\" -lco SEPARATOR=COMMA -lco STRING_QUOTING=IF_NEEDED -lco LINEFORMAT=LF %s %s",
  127. output,
  128. input
  129. )
  130. system(cmd)
  131. # EPK2T indeksite lugemine CSV failist
  132. epk2t_list <- utils::read.csv(file = output)[, 'id']
  133. # Loop
  134. for (i in 1:length(epk2t_list)) {
  135. # ruut::qgis_algorithm_search_by_word("extract")
  136. algorithm <- "native:extractbyattribute"
  137. input <- vars$tmp_gpkg_file_input_3
  138. output <- vars$tmp_gpkg_file_output_4
  139. str <-
  140. sprintf(
  141. "{'FIELD' : 'id',
  142. 'INPUT' : '%s',
  143. 'OPERATOR' : 0,
  144. 'OUTPUT' : '%s',
  145. 'VALUE' : '%d'
  146. }",
  147. input,
  148. output,
  149. epk2t_list[i]
  150. )
  151. cmd <-
  152. ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  153. system(cmd)
  154. # =================== Salvestame TIFF faili =============================
  155. algorithm <- "gdal:cliprasterbymasklayer"
  156. input <- input_tif_file
  157. mask <- vars$tmp_gpkg_file_input_4
  158. str <-
  159. sprintf(
  160. "{ 'ALPHA_BAND' : false,
  161. 'CROP_TO_CUTLINE' : true,
  162. 'DATA_TYPE' : 0,
  163. 'EXTRA' : '',
  164. 'INPUT' : '%s',
  165. 'KEEP_RESOLUTION' : false,
  166. 'MASK' : '%s',
  167. 'MULTITHREADING' : false,
  168. 'NODATA' : null,
  169. 'OPTIONS' : '',
  170. 'OUTPUT' : '%s/%s.tif',
  171. 'SET_RESOLUTION' : false,
  172. 'SOURCE_CRS' : 'EPSG:3301',
  173. 'TARGET_CRS' : 'EPSG:3301'
  174. }",
  175. input,
  176. mask,
  177. saveToDir,
  178. epk2t_list[i]
  179. )
  180. cmd <-
  181. ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  182. system(cmd)
  183. }
  184. cat(
  185. sprintf(
  186. "\n---------------\n\nEPK2T tiff failid salvestati kataloogi %s.\n",
  187. epk10t
  188. )
  189. )
  190. }