#' Piirkonnale andmebaasides olevate joonte lisamine #' #' Etteantud piirkonna geomeetrilise piirjoone ('piir') ja selle joone piirikasti ('bb') järele leitakse nende aladega kaetud polügoonid. Andmed salvestatakse GPKG faili kihtidena. #' #' @param obj str Objekti nimi. Edaspidi on oluline ainult see nimi. Piirkonna geomeetrilist joont ei ole vaja lisada. #' @param gpkg_home path Salvestatavate GPKG faili asukoht. #' @return Uute GPKG andmebaasi kihtide 'piir_...' ja 'bb_...' loomine. #' @seealso [sf::st_read()], [sf::write_sf()],[sf::st_transform()],[ruut::gpkg_piirkonnale_ruudustike_lisamine()] ,[ruut::gpkg_piirkonnale_polygoonide_lisamine()],[ruut::gpkg_sellest_alustame_gpkg_loomist()],[ruut::gpkg_piirkonnale_joonte_lisamine()],[ruut::gpkg_piirkonnale_punktide_lisamine()] #' @keywords GPKG, boundary box, EPSG:3301 #' @export #' @examples #' \dontrun{ #' #' gpkg_home <- "/tmp" #' obj <- "marja" #' gpkg_piirkonnale_joonte_lisamine(obj = obj, gpkg_home = gpkg_home) #' #' # Layers list. #' dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj) #' sf::st_layers(dsn = dsn) #' } gpkg_piirkonnale_joonte_lisamine <- function(obj = NULL, gpkg_home = "/tmp") { dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj) if (!file.exists(dsn)) { cat(sprintf("\nSellist faili \"%s\" ei leitud.\n", dsn)) return(NULL) } ## Konfiguratsiooni muutujale väärtuste omistamine conf <- ruut::get_config() conf$gpkg_home <- gpkg_home conf$gpkg_file <- obj postgres <- sprintf( "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'id\' srid=3301 type=Linestring checkPrimaryKeyUnicity=\'1\' ", conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password ) tmp_gpkg_file <- tempfile(fileext = ".gpkg") ## Algorithm # ruut::qgis_algorithm_search_by_word(str = "extract") # algorithm <- "native:extractbylocation" # cat(qgisprocess::qgis_show_help(algorithm = algorithm)) ## -------------------- Loop ----------------------- intersect_layers <- c("piir", "bb") andmed <- data.frame("schema" = character(0), "table" = character(0)) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_alusdokumendid_ja_lepingud")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "pohimaantee")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "korvalmaantee")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "tugimaantee")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "muutee")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "ramp")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "teeosa")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_kergliiklustee")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_liiklussagedus")) andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_omand")) andmed <- rbind(andmed, data.frame("schema" = "gtfs", "table" = "shapes")) for (intersect in intersect_layers) { for (i in 1:nrow(andmed)) { conf$gpkg_table <- sprintf("%s_%s", intersect, andmed$table[i]) output <- ruut::construct_to_gpkg_output_file_str(conf = conf) ## !!! Trikk: alguses leiame ühisosaga piirkonnad if (andmed$schema[i] %in% c("teeregister_wfs")) geom <- "geometry" else geom <- "geom" result <- qgisprocess::qgis_run_algorithm( algorithm = "native:extractbylocation", INPUT = sprintf( '%s table=\"%s\".\"%s\" (%s)', postgres, andmed$schema[i], andmed$table[i], geom ), INTERSECT = sprintf("%s|layername=%s", dsn, intersect), OUTPUT = tmp_gpkg_file, PREDICATE = c(0) ) ## !!! Trikk jätkub: edasi leiame alles ühisosa result <- qgisprocess::qgis_run_algorithm( algorithm = "native:intersection", INPUT = tmp_gpkg_file, INPUT_FIELDS = "", OVERLAY = sprintf("%s|layername=%s", dsn, intersect), OVERLAY_FIELDS = "", OVERLAY_FIELDS_PREFIX = "", OUTPUT = output # .quiet = TRUE ) } } ## Layers list sf::st_layers(dsn = dsn) }