#' Piirkonna hoonete lisamine #' #' Etteantud piirkonna geomeetrilise piirjoone ('piir') järele leitakse selles piirkonnas ja piirkonna piiriga piirnevad hooned (). #' #' @param obj str Objekti nimi. #' @param pk Piirkonna geomeetriline joon. #' @param gpkg_home path Salvestatavate GPKG faili asukoht. #' #' piirkonnale_hoonete_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "/tmp") { if (is.null(pk) || !sf::st_is_valid(pk)) { cat("\nPalun kontrolli geomeetrilise kujundi õigsust.\n") return() } if (is.null(obj)) { cat("\nPuudu on objekti nimi.\n") return() } cat(sprintf("\nAlgparameetrid: objekti nimi %s ja GPKG faili kataloog %s\n", obj, gpkg_home)) dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj) input_layer_name <- "piir" input_layer <- sprintf("%s|layername=%s", dsn, input_layer_name) tmp_gpkg_file <- tempfile(fileext = ".gpkg") ## -------------- andmed, mis jäävad piiri sisse ------------------- ## ------------------------- algandmed ----------------------------- andmed.df <- data.frame("schema" = character(0), "table" = character(0)) andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "buildings_a")) andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "landuse_a")) andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "water_a")) # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "aadressandmed")) # POINT andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "asustusyksus")) andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "shp_katastriyksus")) j <- 1 for (j in 1:nrow(andmed.df)) { output_layer_name <- andmed.df$table[j] input <- sprintf( 'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=3301 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"%s\".\"%s\" (geometry)', conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, andmed.df$schema[j], andmed.df$table[j] ) # ruut::qgis_algorithm_search_by_word(str = "extract") algorithm <- "native:extractbylocation" # cat(qgisprocess::qgis_show_help(algorithm = algorithm)) result <- qgisprocess::qgis_run_algorithm( algorithm = algorithm, INPUT = input, INTERSECT = input_layer, OUTPUT = tmp_gpkg_file, PREDICATE = c(0) # c(0, 1) # .quiet = TRUE ) result assign(as.character(andmed.df$table[j]), sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))) system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name)) } # ## ------------ andmed, mis jäävad piirikasti sisse ---------------- # ## ------------------------- algandmed ----------------------------- # andmed.df <- data.frame("schema" = character(0), "table" = character(0)) # # andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "buildings_a")) # # andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "landuse_a")) # # andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "water_a")) # # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "aadressandmed")) # # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "asustusyksus")) # # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "shp_katastriyksus")) # j <- 1 # for (j in 1:nrow(andmed.df)) { # output_layer_name <- andmed.df$table[j] # input <- sprintf( # 'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=3301 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"%s\".\"%s\" (geometry)', # conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, # andmed.df$schema[j], andmed.df$table[j] # ) # # ruut::qgis_algorithm_search_by_word(str = "extract") # algorithm <- "native:extractbylocation" # # cat(qgisprocess::qgis_show_help(algorithm = algorithm)) # result <- qgisprocess::qgis_run_algorithm( # algorithm = algorithm, # INPUT = input, # INTERSECT = sprintf("%s|layername=%s", dsn, "boundarybox_3301"), # OUTPUT = tmp_gpkg_file, # PREDICATE = c(0, 1) # # .quiet = TRUE # ) # result # assign(as.character(andmed.df$table[j]), sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))) # system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name)) # } ## ---------------------- vaata layer'id ---------------------- # Vaata layer'eid sf::st_layers(dsn = dsn) } # piirkonnale_hoonete_lisamine(obj = NULL, pk = NULL, gpkg_home = "/tmp")