Эх сурвалжийг харах

Lisatud 'piirkonnale_joonte_lisamine'.

Ardo Kubjas 5 жил өмнө
parent
commit
5f56200f48

+ 12 - 6
00_algandmed.R

@@ -1,9 +1,12 @@
 #' Andmebaasi loomine ja ühendamine
 #'
+system("ogr2ogr --long-usage")
+
 # Processing algorithm…
-# Algorithm 'Intersection' starting…
+# Algorithm 'Count points in polygon' starting…
 # Input parameters:
-str <- "{ 'INPUT' : '/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa/valga.gpkg|layername=landuse_a', 'INPUT_FIELDS' : [], 'OUTPUT' : 'TEMPORARY_OUTPUT', 'OVERLAY' : '/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa/valga.gpkg|layername=piir', 'OVERLAY_FIELDS' : [], 'OVERLAY_FIELDS_PREFIX' : '' }"
+#   { 'CLASSFIELD' : '', 'FIELD' : 'NUMPOINTS', 'OUTPUT' : 'ogr:dbname=\'/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa/valga_results.gpkg\' table=\"count_aadressandmed_ee_epk02t\" (geom)', 'POINTS' : '/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa/valga_p.gpkg|layername=aadressandmed_ee', 'POLYGONS' : 'memory://Polygon?crs=EPSG:3301&field=fid:long(0,0)&field=id:integer(0,0)&field=cat:double(0,0)&field=row:double(0,0)&field=col:integer(0,0)&field=NUMPOINTS:double(0,0)&uid={b5c46c2b-5663-417c-83d4-6811b2ca538b}', 'WEIGHT' : '' }
+str <- "{ 'INPUT' : '/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa/valga.gpkg|layername=piir', 'OUTPUT' : 'ogr:dbname=\'/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa/valga_l.gpkg\' table=\"piir_l\" (geom)' }"
 ruut::construct_qgis_output_result_to_beter_format(str = str)
 
 source("functions/delete_existing_variables.R")
@@ -15,8 +18,6 @@ library(sf)
 par(oma = c(0, 0, 0, 0)) # outer margin
 par(mar = c(0, 0, 0, 0) + 0.0)
 
-source("01_funktsioonid.R")
-
 # Uue schema loomine
 conf <- ruut::get_config()
 conf$schema <- "xxx_artikkel_210127"
@@ -31,8 +32,11 @@ objektid <- c("valga", "matsalu", "lahemaa")
 conn <- ruut::db_connect(conf = conf)
 ## Valitud objekti indeks
 i <- 1
+source("geomeetria_teisendused/pk_piir.R")
 source("gpkg/01_piirkonnale_ruudustike_lisamine.R")
-source("gpkg/02_piirkonnale_hoonete_lisamine.R")
+source("gpkg/02_piirkonnale_polygoonide_lisamine.R")
+source("gpkg/03_piirkonnale_punktide_lisamine.R")
+source("gpkg/04_piirkonnale_joonte_lisamine.R")
 
 for (i in 1:length(objektid)) {
   ## ---------------- 1. piirkonna piir ------------------
@@ -45,7 +49,9 @@ for (i in 1:length(objektid)) {
   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)
+  # piirkonnale_polygoonide_lisamine(obj = obj, pk = pk, gpkg_home = gpkg_home)
+  # piirkonnale_punktide_lisamine(obj = obj, pk = pk, gpkg_home = gpkg_home)
+  piirkonnale_joonte_lisamine(obj = obj, pk = pk, gpkg_home = gpkg_home)
 }
 
 

+ 7 - 5
gpkg/03_piirkonnale_punktide_lisamine.R

@@ -28,8 +28,9 @@ piirkonnale_punktide_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "/t
     "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=%s checkPrimaryKeyUnicity=\'1\'",
     conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, "Point"
   )
-  dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj)
-  dsn_p <- sprintf("%s/%s_p.gpkg", gpkg_home, obj)
+  dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj) # Polygon
+  dsn_p <- sprintf("%s/%s_p.gpkg", gpkg_home, obj) # Point
+  dsn_l <- sprintf("%s/%s_l.gpkg", gpkg_home, obj) # Linestring
   ogr <- sprintf(
     "ogr:dbname='%s'",
     dsn_p
@@ -53,9 +54,9 @@ piirkonnale_punktide_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "/t
   ## ----------------- piiri sisse jäävad punktid -------------------
   ## --------------------------- 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" = "osm_shp", "table" = "pofw"))
-  # andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "pois"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "maaamet", "table" = "aadressandmed")) # POINT
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "pofw"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "osm_shp", "table" = "pois"))
   andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "n_bussipeatus"))
   andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "kilomeetripostid"))
   andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "n_jaotus"))
@@ -97,6 +98,7 @@ piirkonnale_punktide_lisamine <- function(obj = NULL, pk = NULL, gpkg_home = "/t
 
   ## ---------------------- vaata layer'id ----------------------
   # Vaata layer'eid
+  sf::st_layers(dsn = dsn)
   sf::st_layers(dsn = dsn_p)
 }
 # piirkonnale_punktide_lisamine(obj = NULL, pk = NULL, gpkg_home = "/tmp")

+ 104 - 0
gpkg/04_piirkonnale_joonte_lisamine.R

@@ -0,0 +1,104 @@
+#' Piirkonna joonte lisamine
+#'
+#' Etteantud piirkonna geomeetrilise piirjoone ('piir') järele leitakse selles piirkonnas ja piirkonna piiriga piirnevad joonobjektid ().
+#'
+#' @param obj str Objekti nimi.
+#' @param pk Piirkonna geomeetriline joon.
+#' @param gpkg_home path Salvestatavate GPKG faili asukoht.
+#'
+#' @examples
+#' \dontrun{
+#'
+#' }
+piirkonnale_joonte_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))
+  postgres <- sprintf(
+    "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=%s checkPrimaryKeyUnicity=\'1\'",
+    conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, "Polygon"
+  )
+  postgres_point <- sprintf(
+    "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=%s checkPrimaryKeyUnicity=\'1\'",
+    conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, "Point"
+  )
+  postgres_line <- sprintf(
+    "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'fid\' srid=4326 type=%s checkPrimaryKeyUnicity=\'1\'",
+    conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, "Linestring"
+  )
+  dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj) # Polygon
+  dsn_p <- sprintf("%s/%s_p.gpkg", gpkg_home, obj) # Point
+  dsn_l <- sprintf("%s/%s_l.gpkg", gpkg_home, obj) # Linestring
+  ogr <- sprintf(
+    "ogr:dbname='%s'",
+    dsn_l
+  )
+  tmp_gpkg_file <- tempfile(fileext = ".gpkg")
+
+
+  ## ----------------- punktfaili loomine -------------------
+  ## -------------- epk2t_grids tsentroidid -----------------
+  # ruut::qgis_algorithm_search_by_word(str = "polygons")
+  algorithm <- "native:polygonstolines"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    INPUT = sprintf("%s|layername=%s", dsn, "piir"),
+    OUTPUT = sprintf('%s table=\"%s\" (geometry)', ogr, "piir_l")
+    # .quiet = TRUE
+  )
+
+  ## ----------------- piiri sisse jäävad punktid -------------------
+  ## --------------------------- algandmed --------------------------
+  andmed.df <- data.frame("schema" = character(0), "table" = character(0))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "n_alusdokumendid_ja_lepingud"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "korvalmaantee"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "muutee"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "n_kergliiklustee"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "n_liiklussagedus"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "n_omand"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "pohimaantee"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "ramp"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "teeosa"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "teeregister_wfs", "table" = "tugimaantee"))
+  andmed.df <- rbind(andmed.df, data.frame("schema" = "gtfs", "table" = "shapes"))
+  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 = "intersect")
+    algorithm <- "native:intersection"
+    # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+    result <- qgisprocess::qgis_run_algorithm(
+      algorithm = algorithm,
+      INPUT = sprintf('%s table="%s"."%s" (geometry)', postgres_line, andmed.df$schema[j], andmed.df$table[j]),
+      INPUT_FIELDS = "",
+      # OUTPUT = sprintf('%s table=\"%s\" (geometry)', ogr, andmed.df$table[j]),
+      OUTPUT = tmp_gpkg_file,
+      OVERLAY = sprintf("%s|layername=%s", dsn, "piir"),
+      OVERLAY_FIELDS = "",
+      OVERLAY_FIELDS_PREFIX = ""
+      # # .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_l, tmp_gpkg_file, output_layer_name))
+    ## AINULT ELAMUD aadressandmetest!!
+    # if (output_layer_name == "aadressandmed") {
+    #   system(sprintf("ogr2ogr -f GPKG -overwrite  %s %s -nln %s_ee -t_srs \"EPSG:3301\" -where \"adob_liik = 'EE'\"  ", dsn_p, tmp_gpkg_file, output_layer_name))
+    # }
+  }
+
+
+  ## ---------------------- vaata layer'id ----------------------
+  # Vaata layer'eid
+  sf::st_layers(dsn = dsn)
+  sf::st_layers(dsn = dsn_p)
+  sf::st_layers(dsn = dsn_l)
+}
+# piirkonnale_joonte_lisamine(obj = NULL, pk = NULL, gpkg_home = "/tmp")