فهرست منبع

Lisatud 'piirkonale_hoonete_lisamine'. Muudetud projektsioonid 3301 peale.

Ardo Kubjas 5 سال پیش
والد
کامیت
c634b3682d
3فایلهای تغییر یافته به همراه106 افزوده شده و 5 حذف شده
  1. 5 0
      00_algandmed.R
  2. 6 5
      gpkg/01_piirkonnale_ruudustike_lisamine.R
  3. 95 0
      gpkg/02_piirkonnale_hoonete_lisamine.R

+ 5 - 0
00_algandmed.R

@@ -30,15 +30,20 @@ conn <- ruut::db_connect(conf = conf)
 ## Valitud objekti indeks
 i <- 1
 source("gpkg/01_piirkonnale_ruudustike_lisamine.R")
+source("gpkg/02_piirkonnale_hoonete_lisamine.R")
 
 for (i in 1:length(objektid)) {
   ## ---------------- 1. piirkonna piir ------------------
   ## Muutujad: pk - piirkond
   obj <- objektid[i]
   pk <- pk_piir(obj = obj)
+  pk <- sf::st_transform(pk, sf::st_crs('EPSG:3301'))
+  st_crs(pk)
+
   sf::st_geometry(pk) %>% plot()
   gpkg_home <- "/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa"
   piirkonnale_ruudustike_lisamine(obj = obj, pk = pk, gpkg_home = gpkg_home)
+  piirkonnale_hoonete_lisamine(obj = obj, pk = pk, gpkg_home = gpkg_home)
 }
 
 

+ 6 - 5
gpkg/01_piirkonnale_ruudustike_lisamine.R

@@ -23,7 +23,6 @@ piirkonnale_ruudustike_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "
   output_layer_name <- "boundarybox_3301"
   tmp_gpkg_file <- tempfile(fileext = ".gpkg")
   # write to gpkg
-  class(pk)
   sf::write_sf(pk,
     dsn = dsn,
     layer = "piir", driver = "gpkg", append = FALSE
@@ -63,7 +62,9 @@ piirkonnale_ruudustike_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "
   )
   result
   pk_grid_bb <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
-  sf::st_geometry(pk_grid_bb) %>% plot(add = T)
+  sf::st_geometry(pk_grid_bb) %>% plot()
+  sf::st_geometry(pk) %>% plot(add = T)
+
   system(sprintf("ogr2ogr -f GPKG -overwrite  %s %s -nln %s", dsn, tmp_gpkg_file, output_layer_name))
 
   ## ------------- 3. piirkonna epk10t (5x5 km) ruudud --------------------
@@ -76,7 +77,7 @@ piirkonnale_ruudustike_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "
     conf <- ruut::get_config()
     pg <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
     input <- sprintf(
-      'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"%s\".\"%s\" (geometry)',
+      '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,
       "maaamet", ruut
     )
@@ -106,7 +107,7 @@ piirkonnale_ruudustike_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "
     conf <- ruut::get_config()
     pg <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
     input <- sprintf(
-      'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"%s\".\"%s\" (geometry)',
+      '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,
       "maaamet", ruut
     )
@@ -125,7 +126,7 @@ piirkonnale_ruudustike_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "
     assign(ruut, 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))
   }
-  sf::st_geometry(epk10t) %>% plot(add = T)
+  # sf::st_geometry(epk10t) %>% plot(add = T)
   ## ---------------------- vaata layer'id ----------------------
   # Vaata layer'eid
   sf::st_layers(dsn = dsn)

+ 95 - 0
gpkg/02_piirkonnale_hoonete_lisamine.R

@@ -0,0 +1,95 @@
+#' 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")