| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #' 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)
- }
|