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

Lisatud 'db_repair_tabel_geometry' andmebaaside geomeetria parandamiseks. Kindlasti on vaja asustusüksuse geomeetria parandada.

Ardo Kubjas 5 жил өмнө
parent
commit
7409e7257b

+ 1 - 0
NAMESPACE

@@ -13,6 +13,7 @@ export(db_all_schemas)
 export(db_connect)
 export(db_create_new_schema)
 export(db_is_shema_exist)
+export(db_repair_tabel_geometry)
 export(db_schema_tablenames)
 export(db_table_colnames)
 export(get_config)

+ 49 - 0
R/db_repair_tabel_geometry.R

@@ -0,0 +1,49 @@
+#' Postgis andmebaasi vigase geomeetria parandamine
+#'
+#' Funktsioon parandab andmebaasi vigase geomeetria. Olemasolevale andmebaasile listakse ette laiend 'old_'. Parnadatud geomeetriaga failiga kirjutatakse olemasolev fail üle.
+#' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
+#' @return No output.
+#' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()], [ruut::copy_qgis_object_to_db()]
+#' @keywords postgis, gpkg
+#' @export
+#' @examples
+#' \dontrun{
+#'
+#' conf <- ruut::get_config()
+#' # conf$schema <- "maaamet"
+#' # conf$table <- "maakond"
+#' # conf$table <- "omavalitsus"
+#' # conf$table <- "omavalitsusvalispiirini"
+#' conf$table <- "asustusyksus"
+#' db_repair_tabel_geometry(conf = conf)
+#' }
+db_repair_tabel_geometry <- function(conf = conf) {
+  ## Algorithm
+  # ruut::qgis_algorithm_search_by_word(str = "fix")
+  # algorithm <- "native:fixgeometries"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  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
+  )
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = "native:fixgeometries",
+    INPUT = sprintf(
+      '%s table=\"%s\".\"%s\" (geom)',
+      postgres, conf$schema, conf$table
+    ),
+    OUTPUT = sprintf(
+      '%s table=\"%s\".\"tmp_%s\" (geom)',
+      postgres, conf$schema, conf$table
+    )
+    # .quiet = TRUE
+  )
+  conn <- ruut::db_connect()
+  ## Rename
+  q <- sprintf("
+  ALTER TABLE %s.%s RENAME TO old_%s; \
+  drop table if exists %s.%s cascade; \
+  ALTER TABLE %s.tmp_%s RENAME TO %s;", conf$schema, conf$table, conf$table, conf$schema, conf$table, conf$schema, conf$table, conf$table)
+  cat(q)
+  DBI::dbExecute(conn, q)
+}

+ 34 - 0
man/db_repair_tabel_geometry.Rd

@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/db_repair_tabel_geometry.R
+\name{db_repair_tabel_geometry}
+\alias{db_repair_tabel_geometry}
+\title{Postgis andmebaasi vigase geomeetria parandamine}
+\usage{
+db_repair_tabel_geometry(conf = conf)
+}
+\arguments{
+\item{conf}{A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.}
+}
+\value{
+No output.
+}
+\description{
+Funktsioon parandab andmebaasi vigase geomeetria. Olemasolevale andmebaasile listakse ette laiend 'old_'. Parnadatud geomeetriaga failiga kirjutatakse olemasolev fail üle.
+}
+\examples{
+\dontrun{
+
+conf <- ruut::get_config()
+# conf$schema <- "maaamet"
+# conf$table <- "maakond"
+# conf$table <- "omavalitsus"
+# conf$table <- "omavalitsusvalispiirini"
+conf$table <- "asustusyksus"
+db_repair_tabel_geometry(conf = conf)
+}
+}
+\seealso{
+\code{\link[=get_config]{get_config()}}, \code{\link[=copy_shp_to_db]{copy_shp_to_db()}}, \code{\link[=copy_qgis_object_to_db]{copy_qgis_object_to_db()}}
+}
+\keyword{gpkg}
+\keyword{postgis,}