02_piirkonnale_hoonete_lisamine.R 4.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #' Piirkonna hoonete lisamine
  2. #'
  3. #' Etteantud piirkonna geomeetrilise piirjoone ('piir') järele leitakse selles piirkonnas ja piirkonna piiriga piirnevad hooned ().
  4. #'
  5. #' @param obj str Objekti nimi.
  6. #' @param pk Piirkonna geomeetriline joon.
  7. #' @param gpkg_home path Salvestatavate GPKG faili asukoht.
  8. #'
  9. #'
  10. piirkonnale_hoonete_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "/tmp") {
  11. if (is.null(pk) || !sf::st_is_valid(pk)) {
  12. cat("\nPalun kontrolli geomeetrilise kujundi õigsust.\n")
  13. return()
  14. }
  15. if (is.null(obj)) {
  16. cat("\nPuudu on objekti nimi.\n")
  17. return()
  18. }
  19. cat(sprintf("\nAlgparameetrid: objekti nimi %s ja GPKG faili kataloog %s\n", obj, gpkg_home))
  20. dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj)
  21. input_layer_name <- "piir"
  22. input_layer <- sprintf("%s|layername=%s", dsn, input_layer_name)
  23. tmp_gpkg_file <- tempfile(fileext = ".gpkg")
  24. ## -------------- andmed, mis jäävad piiri sisse -------------------
  25. ## ------------------------- algandmed -----------------------------
  26. andmed.df <- data.frame("schema" = character(0), "table" = character(0))
  27. andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "buildings_a"))
  28. andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "landuse_a"))
  29. andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "water_a"))
  30. # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "aadressandmed")) # POINT
  31. andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "asustusyksus"))
  32. andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "shp_katastriyksus"))
  33. j <- 1
  34. for (j in 1:nrow(andmed.df)) {
  35. output_layer_name <- andmed.df$table[j]
  36. input <- sprintf(
  37. '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)',
  38. conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password,
  39. andmed.df$schema[j], andmed.df$table[j]
  40. )
  41. # ruut::qgis_algorithm_search_by_word(str = "extract")
  42. algorithm <- "native:extractbylocation"
  43. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  44. result <- qgisprocess::qgis_run_algorithm(
  45. algorithm = algorithm,
  46. INPUT = input,
  47. INTERSECT = input_layer,
  48. OUTPUT = tmp_gpkg_file,
  49. PREDICATE = c(0) # c(0, 1)
  50. # .quiet = TRUE
  51. )
  52. result
  53. assign(as.character(andmed.df$table[j]), sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT")))
  54. system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name))
  55. }
  56. # ## ------------ andmed, mis jäävad piirikasti sisse ----------------
  57. # ## ------------------------- algandmed -----------------------------
  58. # andmed.df <- data.frame("schema" = character(0), "table" = character(0))
  59. # # andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "buildings_a"))
  60. # # andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "landuse_a"))
  61. # # andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "water_a"))
  62. # # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "aadressandmed"))
  63. # # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "asustusyksus"))
  64. # # andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "shp_katastriyksus"))
  65. # j <- 1
  66. # for (j in 1:nrow(andmed.df)) {
  67. # output_layer_name <- andmed.df$table[j]
  68. # input <- sprintf(
  69. # '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)',
  70. # conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password,
  71. # andmed.df$schema[j], andmed.df$table[j]
  72. # )
  73. # # ruut::qgis_algorithm_search_by_word(str = "extract")
  74. # algorithm <- "native:extractbylocation"
  75. # # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  76. # result <- qgisprocess::qgis_run_algorithm(
  77. # algorithm = algorithm,
  78. # INPUT = input,
  79. # INTERSECT = sprintf("%s|layername=%s", dsn, "boundarybox_3301"),
  80. # OUTPUT = tmp_gpkg_file,
  81. # PREDICATE = c(0, 1)
  82. # # .quiet = TRUE
  83. # )
  84. # result
  85. # assign(as.character(andmed.df$table[j]), sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT")))
  86. # system(sprintf("ogr2ogr -f GPKG -overwrite %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name))
  87. # }
  88. ## ---------------------- vaata layer'id ----------------------
  89. # Vaata layer'eid
  90. sf::st_layers(dsn = dsn)
  91. }
  92. # piirkonnale_hoonete_lisamine(obj = NULL, pk = NULL, gpkg_home = "/tmp")