pk_tif_to_true.R 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #' TIF failide teisendamine TRUE-ks
  2. #'
  3. #' Funktsioon teisendab rasterandmebaase millede tabeli nimed on kujul tif_[...]_tif rasterbaasiks nimedega tif_[...]_tif_true. Iga rasteri pixel mis on nullist erineva väärtusega, saab väärtuseks 1 ja nullid saavad väärtuse 0. Ehk tekib true/false raster andmetabel (maatriks).
  4. #'
  5. #' @importFrom magrittr %>%
  6. #' @importFrom rlang .data
  7. #' @param obj str Objekti nimi. Edaspidi on oluline ainult see nimi. Piirkonna geomeetrilist joont ei ole vaja lisada.
  8. #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
  9. #' @return Raster andmebaaside loomine minedega tif_[...]_tif_true.
  10. #' @seealso [sf::st_read()], [sf::write_sf()],[sf::st_transform()],[ruut::pk_tif_to_true()],[ruut::pk_lisame_ruudustikud()] ,[ruut::pk_lisame_polygoonid()],[ruut::pk_lisame_jooned()],[ruut::pk_lisame_punktid()],[ruut::pk_teisendame_polygoone()],[ruut::pk_teisendame_jooni()],[ruut::pk_teisendame_punkte()]
  11. #' @keywords postgis, boundary box, EPSG:3301
  12. #' @export
  13. #' @examples
  14. #' \dontrun{
  15. #'
  16. #' obj <- "marja"
  17. #' pk_lisame_rahvaarvud(obj = obj, conf = NULL)
  18. #'
  19. #' # Layers list.
  20. #' ruut::db_schema_tablenames(conf = conf)
  21. #' }
  22. pk_tif_to_true <-
  23. function(obj = NULL, conf = NULL) {
  24. ## ------------- muutujad ja teisendused ---------------
  25. vars <- ajutised_muutujad(pk = NULL, obj, conf)
  26. obj <- vars$obj
  27. piir <- vars$pk
  28. conf <- vars$conf
  29. ## Raster andmebaaside nimekiri, mille tabeli nimi on kujul tif_[...]_tif .
  30. tabels_list <- ruut::db_schema_tablenames(conf = conf)
  31. tabels_list <-
  32. tabels_list[grepl("^(tif_).*(_tif)$", tabels_list)]
  33. ## Konfiguratsiooni muutujale väärtuste omistamine, kui seda pole antud.
  34. if (length(tabels_list) == 0) {
  35. cat("\nAndmebaasis puuduvad raster tabelid, mille nimi on kujul tif_[...]_tif.\n")
  36. return(NULL)
  37. }
  38. ## Ühendus andmebaasiga
  39. conn <- ruut::db_connect(conf = conf)
  40. q <- sprintf(
  41. "create or replace function
  42. tif_to_tru_fn(pixel float[], pos integer[], variadic userargs text[])
  43. returns float
  44. language plpgsql
  45. immutable -- careful: this function is immutable, yours may not be
  46. as $$
  47. declare
  48. pixval float;
  49. jahei float;
  50. begin
  51. pixval := pixel[1][1][1]; -- pixel indices: [raster #][xdistance][ydistance]
  52. if pixval > 0 then
  53. jahei := 1;
  54. else
  55. jahei := 0;
  56. end if;
  57. return jahei;
  58. end;
  59. $$;"
  60. )
  61. cat(sprintf("\n-----------------\n%s\n\n", q))
  62. DBI::dbSendQuery(conn, q)
  63. conf$schema <- obj
  64. for (tabel in tabels_list) {
  65. print(tabel)
  66. ## Drop tabel if exist.
  67. q <-
  68. sprintf("DROP TABLE IF EXISTS \"%s\".\"%s_true\";",
  69. conf$schema,
  70. tabel)
  71. cat(sprintf("\n-----------------\n%s\n\n", q))
  72. DBI::dbSendQuery(conn, q)
  73. # Create new raster tabel.
  74. q <-
  75. sprintf(
  76. "SELECT ST_MapAlgebra(rast, 1, 'tif_to_tru_fn(float[], integer[], text[])'::regprocedure) AS rast INTO \"%s\".\"%s_true\" FROM \"%s\".\"%s\";",
  77. conf$schema,
  78. tabel,
  79. conf$schema,
  80. tabel
  81. )
  82. DBI::dbSendQuery(conn, q)
  83. }
  84. DBI::dbDisconnect(conn)
  85. }