#' TIF failide teisendamine TRUE-ks #' #' 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). #' #' @importFrom magrittr %>% #' @importFrom rlang .data #' @param obj str Objekti nimi. Edaspidi on oluline ainult see nimi. Piirkonna geomeetrilist joont ei ole vaja lisada. #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}. #' @return Raster andmebaaside loomine minedega tif_[...]_tif_true. #' @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()] #' @keywords postgis, boundary box, EPSG:3301 #' @export #' @examples #' \dontrun{ #' #' obj <- "marja" #' pk_lisame_rahvaarvud(obj = obj, conf = NULL) #' #' # Layers list. #' ruut::db_schema_tablenames(conf = conf) #' } pk_tif_to_true <- function(obj = NULL, conf = NULL) { ## ------------- muutujad ja teisendused --------------- vars <- ajutised_muutujad(pk = NULL, obj, conf) obj <- vars$obj piir <- vars$pk conf <- vars$conf ## Raster andmebaaside nimekiri, mille tabeli nimi on kujul tif_[...]_tif . tabels_list <- ruut::db_schema_tablenames(conf = conf) tabels_list <- tabels_list[grepl("^(tif_).*(_tif)$", tabels_list)] ## Konfiguratsiooni muutujale väärtuste omistamine, kui seda pole antud. if (length(tabels_list) == 0) { cat("\nAndmebaasis puuduvad raster tabelid, mille nimi on kujul tif_[...]_tif.\n") return(NULL) } ## Ühendus andmebaasiga conn <- ruut::db_connect(conf = conf) q <- sprintf( "create or replace function tif_to_tru_fn(pixel float[], pos integer[], variadic userargs text[]) returns float language plpgsql immutable -- careful: this function is immutable, yours may not be as $$ declare pixval float; jahei float; begin pixval := pixel[1][1][1]; -- pixel indices: [raster #][xdistance][ydistance] if pixval > 0 then jahei := 1; else jahei := 0; end if; return jahei; end; $$;" ) cat(sprintf("\n-----------------\n%s\n\n", q)) DBI::dbSendQuery(conn, q) conf$schema <- obj for (tabel in tabels_list) { print(tabel) ## Drop tabel if exist. q <- sprintf("DROP TABLE IF EXISTS \"%s\".\"%s_true\";", conf$schema, tabel) cat(sprintf("\n-----------------\n%s\n\n", q)) DBI::dbSendQuery(conn, q) # Create new raster tabel. q <- sprintf( "SELECT ST_MapAlgebra(rast, 1, 'tif_to_tru_fn(float[], integer[], text[])'::regprocedure) AS rast INTO \"%s\".\"%s_true\" FROM \"%s\".\"%s\";", conf$schema, tabel, conf$schema, tabel ) DBI::dbSendQuery(conn, q) } DBI::dbDisconnect(conn) }