Просмотр исходного кода

Lisatud 'gpkg_piirkonnale_joonte_lisamine'.

Ardo Kubjas 5 лет назад
Родитель
Сommit
f5cee40e2c

+ 87 - 0
R/gpkg_piirkonnale_joonte_lisamine.R

@@ -0,0 +1,87 @@
+#' Piirkonnale andmebaasides olevate joonte lisamine
+#'
+#' Etteantud piirkonna geomeetrilise piirjoone ('piir') ja selle joone piirikasti ('bb') järele leitakse nende aladega kaetud polügoonid. Andmed salvestatakse GPKG faili kihtidena.
+#'
+#' @param obj str Objekti nimi. Edaspidi on oluline ainult see nimi. Piirkonna geomeetrilist joont ei ole vaja lisada.
+#' @param gpkg_home path Salvestatavate GPKG faili asukoht.
+#' @return Uute GPKG andmebaasi kihtide 'piir_...' ja 'bb_...' loomine.
+#' @seealso [sf::st_read()], [sf::write_sf()],[sf::st_transform()],[ruut::gpkg_piirkonnale_ruudustike_lisamine()] ,[ruut::gpkg_piirkonnale_polygoonide_lisamine()],[ruut::gpkg_sellest_alustame_gpkg_loomist()],[ruut::gpkg_piirkonnale_joonte_lisamine()]
+#' @keywords GPKG, boundary box, EPSG:3301
+#' @export
+#' @examples
+#' \dontrun{
+#'
+#' gpkg_home <- "/tmp"
+#' obj <- "marja"
+#' gpkg_piirkonnale_joonte_lisamine(obj = obj, gpkg_home = gpkg_home)
+#'
+#' # Layers list.
+#' dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj)
+#' sf::st_layers(dsn = dsn)
+#' }
+gpkg_piirkonnale_joonte_lisamine <- function(obj = NULL, gpkg_home = "/tmp") {
+  dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj)
+  if (!file.exists(dsn)) {
+    cat(sprintf("\nSellist faili \"%s\" ei leitud.\n", dsn))
+    return(NULL)
+  }
+  ## Konfiguratsiooni muutujale väärtuste omistamine
+  conf <- ruut::get_config()
+  conf$gpkg_home <- gpkg_home
+  conf$gpkg_file <- obj
+  postgres <- sprintf(
+    "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'id\' srid=3301 type=Linestring checkPrimaryKeyUnicity=\'1\' ",
+    conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password
+  )
+  tmp_gpkg_file <- tempfile(fileext = ".gpkg")
+  ## Algorithm
+  # ruut::qgis_algorithm_search_by_word(str = "extract")
+  # algorithm <- "native:extractbylocation"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+
+  ## -------------------- Loop -----------------------
+  intersect_layers <- c("piir", "bb")
+  andmed <- data.frame("schema" = character(0), "table" = character(0))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_alusdokumendid_ja_lepingud"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "pohimaantee"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "korvalmaantee"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "tugimaantee"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "muutee"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "ramp"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "teeosa"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_kergliiklustee"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_liiklussagedus"))
+  andmed <- rbind(andmed, data.frame("schema" = "teeregister_wfs", "table" = "n_omand"))
+  andmed <- rbind(andmed, data.frame("schema" = "gtfs", "table" = "shapes"))
+  for (intersect in intersect_layers) {
+    for (i in 1:nrow(andmed)) {
+      conf$gpkg_table <- sprintf("%s_%s", intersect, andmed$table[i])
+      output <- ruut::construct_to_gpkg_output_file_str(conf = conf)
+      ## !!! Trikk: alguses leiame ühisosaga piirkonnad
+      if (andmed$schema[i] %in% c("teeregister_wfs")) geom <- "geometry" else geom <- "geom"
+      result <- qgisprocess::qgis_run_algorithm(
+        algorithm = "native:extractbylocation",
+        INPUT = sprintf(
+          '%s table=\"%s\".\"%s\" (%s)',
+          postgres, andmed$schema[i], andmed$table[i], geom
+        ),
+        INTERSECT = sprintf("%s|layername=%s", dsn, intersect),
+        OUTPUT = tmp_gpkg_file,
+        PREDICATE = c(0)
+      )
+      ## !!! Trikk jätkub: edasi leiame alles ühisosa
+      result <- qgisprocess::qgis_run_algorithm(
+        algorithm = "native:intersection",
+        INPUT = tmp_gpkg_file,
+        INPUT_FIELDS = "",
+        OVERLAY = sprintf("%s|layername=%s", dsn, intersect),
+        OVERLAY_FIELDS = "",
+        OVERLAY_FIELDS_PREFIX = "",
+        OUTPUT = output
+        # .quiet = TRUE
+      )
+    }
+  }
+  ## Layers list
+  sf::st_layers(dsn = dsn)
+}

+ 1 - 7
R/gpkg_piirkonnale_polygoonide_lisamine.R

@@ -1,4 +1,4 @@
-#' Piirkonnal andmebaasides olevate polügoonide lisamine
+#' Piirkonnale andmebaasides olevate polügoonide lisamine
 #'
 #' Etteantud piirkonna geomeetrilise piirjoone ('piir') ja selle joone piirikasti ('bb') järele leitakse nende aladega kaetud polügoonid. Andmed salvestatakse GPKG faili kihtidena.
 #'
@@ -62,17 +62,12 @@ gpkg_piirkonnale_polygoonide_lisamine <- function(obj = NULL, gpkg_home = "/tmp"
           postgres, andmed$schema[i], andmed$table[i]
         ),
         INTERSECT = sprintf("%s|layername=%s", dsn, intersect),
-        # OUTPUT = output,
         OUTPUT = tmp_gpkg_file,
         PREDICATE = c(0)
       )
       ## !!! Trikk jätkub: edasi leiame alles ühisosa
       result <- qgisprocess::qgis_run_algorithm(
         algorithm = "native:intersection",
-        # INPUT = sprintf(
-        #   '%s table=\"%s\".\"%s\" (geom)',
-        #   postgres, andmed$schema[i], andmed$table[i]
-        # ),
         INPUT = tmp_gpkg_file,
         INPUT_FIELDS = "",
         OVERLAY = sprintf("%s|layername=%s", dsn, intersect),
@@ -81,7 +76,6 @@ gpkg_piirkonnale_polygoonide_lisamine <- function(obj = NULL, gpkg_home = "/tmp"
         OUTPUT = output
         # .quiet = TRUE
       )
-
       ## Filtreerime maakasutuse kihi 'landuse-a' eraldi alamkihtideks
       if (andmed$table[i] == "landuse_a") {
         landuse_a <- unique(as.data.frame(sf::read_sf(dsn = dsn, layer = sprintf("%s_landuse_a", intersect), as_tibble = T))[, c("code", "fclass")])

+ 38 - 0
man/gpkg_piirkonnale_joonte_lisamine.Rd

@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/gpkg_piirkonnale_joonte_lisamine.R
+\name{gpkg_piirkonnale_joonte_lisamine}
+\alias{gpkg_piirkonnale_joonte_lisamine}
+\title{Piirkonnale andmebaasides olevate joonte lisamine}
+\usage{
+gpkg_piirkonnale_joonte_lisamine(obj = NULL, gpkg_home = "/tmp")
+}
+\arguments{
+\item{obj}{str Objekti nimi. Edaspidi on oluline ainult see nimi. Piirkonna geomeetrilist joont ei ole vaja lisada.}
+
+\item{gpkg_home}{path Salvestatavate GPKG faili asukoht.}
+}
+\value{
+Uute GPKG andmebaasi kihtide 'piir_...' ja 'bb_...' loomine.
+}
+\description{
+Etteantud piirkonna geomeetrilise piirjoone ('piir') ja selle joone piirikasti ('bb') järele leitakse nende aladega kaetud polügoonid. Andmed salvestatakse GPKG faili kihtidena.
+}
+\examples{
+\dontrun{
+
+gpkg_home <- "/tmp"
+obj <- "marja"
+gpkg_piirkonnale_joonte_lisamine(obj = obj, gpkg_home = gpkg_home)
+
+# Layers list.
+dsn <- sprintf("\%s/\%s.gpkg", gpkg_home, obj)
+sf::st_layers(dsn = dsn)
+}
+}
+\seealso{
+\code{\link[sf:st_read]{sf::st_read()}}, \code{\link[sf:st_write]{sf::write_sf()}},\code{\link[sf:st_transform]{sf::st_transform()}},\code{\link[=gpkg_piirkonnale_ruudustike_lisamine]{gpkg_piirkonnale_ruudustike_lisamine()}} ,\code{\link[=gpkg_piirkonnale_polygoonide_lisamine]{gpkg_piirkonnale_polygoonide_lisamine()}},\code{\link[=gpkg_sellest_alustame_gpkg_loomist]{gpkg_sellest_alustame_gpkg_loomist()}},\code{\link[=gpkg_piirkonnale_joonte_lisamine]{gpkg_piirkonnale_joonte_lisamine()}}
+}
+\keyword{EPSG:3301}
+\keyword{GPKG,}
+\keyword{boundary}
+\keyword{box,}

+ 1 - 1
man/gpkg_piirkonnale_polygoonide_lisamine.Rd

@@ -2,7 +2,7 @@
 % Please edit documentation in R/gpkg_piirkonnale_polygoonide_lisamine.R
 \name{gpkg_piirkonnale_polygoonide_lisamine}
 \alias{gpkg_piirkonnale_polygoonide_lisamine}
-\title{Piirkonnal andmebaasides olevate polügoonide lisamine}
+\title{Piirkonnale andmebaasides olevate polügoonide lisamine}
 \usage{
 gpkg_piirkonnale_polygoonide_lisamine(obj = NULL, gpkg_home = "/tmp")
 }