|
|
@@ -1,168 +0,0 @@
|
|
|
-#' Piirkonna polügoonide lisamine
|
|
|
-#'
|
|
|
-#' Etteantud piirkonna geomeetrilise piirjoone ('piir') järele leitakse selles piirkonnas ja piirkonna piiriga piirnevad polügoonid (). Osasid polügoone on lõigatud piiriga.
|
|
|
-#'
|
|
|
-#' @param obj str Objekti nimi.
|
|
|
-#' @param pk Piirkonna geomeetriline joon.
|
|
|
-#' @param gpkg_home path Salvestatavate GPKG faili asukoht.
|
|
|
-#' @param obj_only TRUE/FALSE Kas geomeetriad leitakse ainult objekti või kogu piirikastiga määratud ala jaoks.
|
|
|
-#'
|
|
|
-#' @examples
|
|
|
-#' \dontrun{
|
|
|
-#'
|
|
|
-#' }
|
|
|
-piirkonnale_polygoonide_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "/tmp", obj_only = TRUE) {
|
|
|
- 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))
|
|
|
- postgres <- sprintf(
|
|
|
- "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\'",
|
|
|
- conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password
|
|
|
- )
|
|
|
- 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")
|
|
|
-
|
|
|
- ## ----------------- piiri sisse jäävad polügoonid -------------------
|
|
|
- ## --------------------------- 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" = "maaamet", "table" = "aadressandmed")) # POINT
|
|
|
- j <- 1
|
|
|
- for (j in 1:nrow(andmed.df)) {
|
|
|
- output_layer_name <- as.character(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 = sprintf(
|
|
|
- '%s table=\"%s\".\"%s\" (geometry)',
|
|
|
- postgres, andmed.df$schema[j], andmed.df$table[j]
|
|
|
- ),
|
|
|
- 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 -t_srs \"EPSG:3301\"", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- }
|
|
|
-
|
|
|
- ## -------------- piiri -30 meetrise puhvri sisse jäävad polügoonid -------------
|
|
|
- ## --------------------------------- algandmed ---------------------------------
|
|
|
- andmed.df <- data.frame("schema" = character(0), "table" = character(0))
|
|
|
- # 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"))
|
|
|
- ## Esmalt leiame piirile uhverjoone.
|
|
|
- # ruut::qgis_algorithm_search_by_word(str = "buffer")
|
|
|
- algorithm <- "native:buffer"
|
|
|
- # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
|
|
|
- result <- qgisprocess::qgis_run_algorithm(
|
|
|
- algorithm = algorithm,
|
|
|
- DISSOLVE = 0,
|
|
|
- DISTANCE = -30,
|
|
|
- END_CAP_STYLE = 2,
|
|
|
- INPUT = sprintf(
|
|
|
- "%s|layername=piir",
|
|
|
- dsn
|
|
|
- ),
|
|
|
- JOIN_STYLE = 2,
|
|
|
- MITER_LIMIT = 2,
|
|
|
- OUTPUT = tmp_gpkg_file,
|
|
|
- SEGMENTS = 5
|
|
|
- # .quiet = TRUE
|
|
|
- )
|
|
|
- result
|
|
|
- piir_buffer <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
|
|
|
- # st_geometry(pk) %>% plot()
|
|
|
- # st_geometry(piir_buffer) %>% plot(add=T, col = 'red')
|
|
|
- j <- 1
|
|
|
- for (j in 1:nrow(andmed.df)) {
|
|
|
- output_layer_name <- as.character(andmed.df$table[j])
|
|
|
- input <- sprintf(
|
|
|
- '%s table=\"%s\".\"%s\" (geometry)',
|
|
|
- postgres, 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 = piir_buffer,
|
|
|
- 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 -t_srs \"EPSG:3301\"", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- }
|
|
|
-
|
|
|
- ## ----------------- piiriga lõigatud polügoonid -------------------
|
|
|
- ## --------------------------- algandmed ---------------------------
|
|
|
- andmed.df <- data.frame("schema" = character(0), "table" = character(0))
|
|
|
- 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" = "osm_shp", "table" = "pofw_a"))
|
|
|
- andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "pois_a"))
|
|
|
- andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "natural_a"))
|
|
|
- j <- 1
|
|
|
- for (j in 1:nrow(andmed.df)) {
|
|
|
- output_layer_name <- as.character(andmed.df$table[j])
|
|
|
- input <- sprintf(
|
|
|
- '%s table=\"%s\".\"%s\" (geometry)',
|
|
|
- postgres, andmed.df$schema[j], andmed.df$table[j]
|
|
|
- )
|
|
|
- # ruut::qgis_algorithm_search_by_word(str = "intersect")
|
|
|
- algorithm <- "native:intersection"
|
|
|
- # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
|
|
|
- result <- qgisprocess::qgis_run_algorithm(
|
|
|
- algorithm = algorithm,
|
|
|
- INPUT = input,
|
|
|
- INPUT_FIELDS = "",
|
|
|
- OVERLAY = sprintf(
|
|
|
- "%s|layername=piir",
|
|
|
- dsn
|
|
|
- ),
|
|
|
- OVERLAY_FIELDS = "",
|
|
|
- OVERLAY_FIELDS_PREFIX = "",
|
|
|
- OUTPUT = tmp_gpkg_file
|
|
|
- # .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 -t_srs \"EPSG:3301\"", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
-
|
|
|
-
|
|
|
- # -------------------- alamkihtide filtreerimine -----------------
|
|
|
- ## Maakasutus lahti kirjutada!!
|
|
|
- if (output_layer_name == "landuse_a") {
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_forest -t_srs \"EPSG:3301\" -where \"code = '7201'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_residential -t_srs \"EPSG:3301\" -where \"code = '7203'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_grass -t_srs \"EPSG:3301\" -where \"code = '7218'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_park -t_srs \"EPSG:3301\" -where \"code = '7202'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_farmland -t_srs \"EPSG:3301\" -where \"code = '7229'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_scrub -t_srs \"EPSG:3301\" -where \"code = '7217'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_meadow -t_srs \"EPSG:3301\" -where \"code = '7208'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_cemetery -t_srs \"EPSG:3301\" -where \"code = '7206'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s_military -t_srs \"EPSG:3301\" -where \"code = '7213'\" ", dsn, tmp_gpkg_file, output_layer_name))
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- ## ---------------------- vaata layer'id ----------------------
|
|
|
- # Vaata layer'eid
|
|
|
- sf::st_layers(dsn = dsn)
|
|
|
-}
|
|
|
-# piirkonnale_polygoonide_lisamine(obj = NULL, pk = NULL, gpkg_home = "/tmp")
|