Kaynağa Gözat

Lisatud 'gpkg_piirkonnale_polygoonide_lisamine'.

Ardo Kubjas 5 yıl önce
ebeveyn
işleme
15360baecb

+ 1 - 0
NAMESPACE

@@ -16,6 +16,7 @@ export(db_is_shema_exist)
 export(db_schema_tablenames)
 export(db_table_colnames)
 export(get_config)
+export(gpkg_piirkonnale_polygoonide_lisamine)
 export(gpkg_piirkonnale_ruudustike_lisamine)
 export(gpkg_sellest_alustame_gpkg_loomist)
 export(pk_bbox)

+ 77 - 0
R/gpkg_piirkonnale_polygoonide_lisamine.R

@@ -0,0 +1,77 @@
+#' Piirkonnal 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.
+#'
+#' @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()]
+#' @keywords GPKG, boundary box, EPSG:3301
+#' @export
+#' @examples
+#' \dontrun{
+#'
+#' gpkg_home <- "/tmp"
+#' obj <- "marja"
+#' gpkg_piirkonnale_polygoonide_lisamine(obj = obj, gpkg_home = gpkg_home)
+#'
+#' # Layers list.
+#' dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj)
+#' sf::st_layers(dsn = dsn)
+#' }
+gpkg_piirkonnale_polygoonide_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=Polygon checkPrimaryKeyUnicity=\'1\' ",
+    conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password
+  )
+  ## 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" = "maaamet", "table" = "asustusyksus"))
+  andmed <- rbind(andmed, data.frame("schema" = "maaamet", "table" = "shp_katastriyksus"))
+  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)
+      # result <- qgisprocess::qgis_run_algorithm(
+      #   algorithm = "native:extractbylocation",
+      #   INPUT = sprintf(
+      #     '%s table=\"%s\".\"%s\" (geom)',
+      #     postgres, andmed$schema[i], andmed$table[i]
+      #   ),
+      #   INTERSECT = sprintf("%s|layername=%s", dsn, intersect),
+      #   OUTPUT = output,
+      #   PREDICATE = c(0)
+      # )
+      result <- qgisprocess::qgis_run_algorithm(
+        algorithm = "native:intersection",
+        INPUT = sprintf(
+          '%s table=\"%s\".\"%s\" (geom)',
+          postgres, andmed$schema[i], andmed$table[i]
+        ),
+        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)
+}

+ 4 - 12
R/gpkg_piirkonnale_ruudustike_lisamine.R

@@ -5,7 +5,7 @@
 #' @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()]
+#' @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()]
 #' @keywords GPKG, boundary box, EPSG:3301
 #' @export
 #' @examples
@@ -25,28 +25,20 @@ gpkg_piirkonnale_ruudustike_lisamine <- function(obj = NULL, gpkg_home = "/tmp")
     cat(sprintf("\nSellist faili \"%s\" ei leitud.\n", dsn))
     return(NULL)
   }
-  ## Loeme andmebaasist piiri ja piirikasti.
-  pk <- sf::read_sf(dsn = dsn, layer = "piir")
-  bb <- sf::read_sf(dsn = dsn, layer = "bb")
-  cc <- sf::read_sf(sprintf("%s|layername=%s", dsn, "bb"))
   ## Konfiguratsiooni muutujale väärtuste omistamine
   conf <- ruut::get_config()
   conf$gpkg_home <- gpkg_home
   conf$gpkg_file <- obj
-  ## epk02t_grid (100x100 meetrit ruudustik)
-  conf$schema <- "maaamet"
-  conf$table <- "epk2t_grid"
-  input <- ruut::construct_to_gpkg_output_postgres_str(conf = conf)
-  # ruut::qgis_algorithm_search_by_word(str = "extract")
   postgres <- sprintf(
     "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'id\' srid=3301 type=Polygon checkPrimaryKeyUnicity=\'1\' ",
     conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password
   )
   ## Algorithm
+  # ruut::qgis_algorithm_search_by_word(str = "extract")
   algorithm <- "native:extractbylocation"
   # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
 
-  ## Loop
+  ## -------------------- Loop -----------------------
   intersect_layers <- c("piir", "bb")
   ruudud <- c("epk10t_grid", "epk2t_grid", "epk02t_grid", "epk10t", "epk2t")
   ruudud <- c("epk02t_grid")
@@ -60,7 +52,7 @@ gpkg_piirkonnale_ruudustike_lisamine <- function(obj = NULL, gpkg_home = "/tmp")
           '%s table=\"%s\".\"%s\" (geom)',
           postgres, "maaamet", ruut
         ),
-        INTERSECT = sprintf("/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa/marja.gpkg|layername=%s", intersect),
+        INTERSECT = sprintf("%s|layername=%s", dsn, intersect),
         OUTPUT = output,
         PREDICATE = c(0)
       )

+ 9 - 24
R/gpkg_sellest_alustame_gpkg_loomist.R

@@ -8,7 +8,7 @@
 #' @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 GPKG andmebaasi loomine koos kihtidega 'piir' ja 'bb' (boundary box, piirikast).
-#' @seealso [sf::st_read()], [sf::write_sf()],[sf::st_transform()]
+#' @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()]
 #' @keywords GPKG, boundary box, EPSG:3301
 #' @export
 #' @examples
@@ -16,7 +16,7 @@
 #'
 #' # read geojson from string:
 #' geojson_txt <- paste('{"type":"MultiPoint","coordinates":[[658300,6474800],
-#' [658300,6475000],[658400,6475100],[658600,6475000],[658600,6474800],
+#' [658300,6475000],[658700,6476000],[659600,6475000],[659600,6474800],
 #' [658300,6474800]]}')
 #' x <- sf::read_sf(geojson_txt) %>% sf::st_cast("POLYGON")
 #' sf::st_crs(x) <- 3301
@@ -26,22 +26,16 @@
 #' gpkg_home <- "/tmp"
 #' obj <- "marja"
 #'
-#' sp <- gpkg_sellest_alustame_gpkg_loomist(pk = x, obj = obj, gpkg_home = gpkg_home)
-#' sf::st_geometry(sp) %>% graphics::plot()
-#'
+#' gpkg_sellest_alustame_gpkg_loomist(pk = x, obj = obj, gpkg_home = gpkg_home)
 #' # Layers list.
 #' dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj)
 #' sf::st_layers(dsn = dsn)
+#' bb <- sf::read_sf(dsn = dsn, layer = "bb")
+#' pk <- sf::read_sf(dsn = dsn, layer = "piir")
+#' sf::st_geometry(bb) %>% graphics::plot(border = 3, lwd = 0.3, col = "#d3fffb")
+#' sf::st_geometry(pk) %>% graphics::plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
 #' }
 gpkg_sellest_alustame_gpkg_loomist <- function(pk = NULL, obj = NULL, gpkg_home = "/tmp") {
-  # ## ------------------ test -----------------
-  # geojson_txt <- paste('{"type":"MultiPoint","coordinates":[[658300,6474800],[658300,6475000],[658700,6476000],[659600,6475000],[659600,6474800],[658300,6474800]]}')
-  # x <- sf::read_sf(geojson_txt) %>% sf::st_cast("POLYGON")
-  # sf::st_crs(x) <- 3301
-  # sf::st_geometry(x) %>% graphics::plot()
-  # gpkg_home <- "/home/ardo/aaa/data/gpkg/artiklid/artikkel_210127_valga_matsalu_lahemaa"
-  # obj <- "marja"
-  # pk <- x
   ## Konfiguratsiooni muutujale väärtuste omistamine
   conf <- ruut::get_config()
   conf$gpkg_home <- gpkg_home
@@ -63,23 +57,19 @@ gpkg_sellest_alustame_gpkg_loomist <- function(pk = NULL, obj = NULL, gpkg_home
   ## ------------- muutujad ja teisendused ---------------
   obj <- gsub(" ", "_", tolower(obj))
   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")
 
   ## ------------------- programmi osa -----------------
   ## 1. Piirjoone salvestamine
   pk <- sf::st_transform(pk, 3301)
   # write to gpkg
-  pk <- sf::st_collection_extract(pk, "POLYGON", warn =FALSE)
-  sf::write_sf(pk, dsn = dsn,layer = "piir", driver = "gpkg",fid_column_name = "id", delete_dsn = T) # append = FALSE, delete_layer = T
+  sf::write_sf(pk, dsn = dsn, layer = "piir", driver = "gpkg", fid_column_name = "id", delete_dsn = T) # append = FALSE, delete_layer = T
   ## 2. Piirikasti salvestamine
   ## konstrueerime EXTENT, HSPACING ja VSPACING väärtused piirikasti konstrueerimiseks.
   pk_attributes <- attributes(pk$geometry)
   extent <- sprintf("%s,%s,%s,%s [EPSG:3301]", round((pk_attributes$bbox["xmin"] / 100), digits = 0) * 100, ceiling((pk_attributes$bbox["xmax"] / 100)) * 100, round((pk_attributes$bbox["ymin"] / 100), digits = 0) * 100, ceiling((pk_attributes$bbox["ymax"] / 100)) * 100)
   hspacing <- (ceiling((pk_attributes$bbox["xmax"] / 100)) * 100) - (round((pk_attributes$bbox["xmin"] / 100), digits = 0) * 100)
   vspacing <- (ceiling((pk_attributes$bbox["ymax"] / 100)) * 100) - (round((pk_attributes$bbox["ymin"] / 100), digits = 0) * 100)
-  conf$gpkg_table <- 'bb'
+  conf$gpkg_table <- "bb"
   output <- ruut::construct_to_gpkg_output_file_str(conf = conf)
   # ruut::qgis_algorithm_search_by_word(str = "grid")
   algorithm <- "native:creategrid"
@@ -96,11 +86,6 @@ gpkg_sellest_alustame_gpkg_loomist <- function(pk = NULL, obj = NULL, gpkg_home
     OUTPUT = output
     # .quiet = TRUE
   )
-  result
-  bb <- sf::read_sf(dsn = dsn, layer = conf$table)
-  # Test plot.
-  sf::st_geometry(bb) %>% graphics::plot(border = 3, lwd = 0.3, col = "#d3fffb")
-  sf::st_geometry(pk) %>% graphics::plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
   # Layers list
   sf::st_layers(dsn = dsn)
 }

+ 38 - 0
man/gpkg_piirkonnale_polygoonide_lisamine.Rd

@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% 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}
+\usage{
+gpkg_piirkonnale_polygoonide_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_polygoonide_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()}}
+}
+\keyword{EPSG:3301}
+\keyword{GPKG,}
+\keyword{boundary}
+\keyword{box,}

+ 1 - 1
man/gpkg_piirkonnale_ruudustike_lisamine.Rd

@@ -30,7 +30,7 @@ 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[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()}}
 }
 \keyword{EPSG:3301}
 \keyword{GPKG,}

+ 7 - 5
man/gpkg_sellest_alustame_gpkg_loomist.Rd

@@ -24,7 +24,7 @@ Funktsioon loob geopaketi GPKG faili. Tegemist on sqlite andmebaasiga. Samas lis
 
 # read geojson from string:
 geojson_txt <- paste('{"type":"MultiPoint","coordinates":[[658300,6474800],
-[658300,6475000],[658400,6475100],[658600,6475000],[658600,6474800],
+[658300,6475000],[658700,6476000],[659600,6475000],[659600,6474800],
 [658300,6474800]]}')
 x <- sf::read_sf(geojson_txt) \%>\% sf::st_cast("POLYGON")
 sf::st_crs(x) <- 3301
@@ -34,16 +34,18 @@ sf::st_geometry(x) \%>\% graphics::plot()
 gpkg_home <- "/tmp"
 obj <- "marja"
 
-sp <- gpkg_sellest_alustame_gpkg_loomist(pk = x, obj = obj, gpkg_home = gpkg_home)
-sf::st_geometry(sp) \%>\% graphics::plot()
-
+gpkg_sellest_alustame_gpkg_loomist(pk = x, obj = obj, gpkg_home = gpkg_home)
 # Layers list.
 dsn <- sprintf("\%s/\%s.gpkg", gpkg_home, obj)
 sf::st_layers(dsn = dsn)
+bb <- sf::read_sf(dsn = dsn, layer = "bb")
+pk <- sf::read_sf(dsn = dsn, layer = "piir")
+sf::st_geometry(bb) \%>\% graphics::plot(border = 3, lwd = 0.3, col = "#d3fffb")
+sf::st_geometry(pk) \%>\% graphics::plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
 }
 }
 \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[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()}}
 }
 \keyword{EPSG:3301}
 \keyword{GPKG,}