db_repair_tabel_geometry.R 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #' Postgis andmebaasi vigase geomeetria parandamine
  2. #'
  3. #' Funktsioon parandab andmebaasi vigase geomeetria. Olemasolevale andmebaasile listakse ette laiend 'old_'. Parnadatud geomeetriaga failiga kirjutatakse olemasolev fail üle.
  4. #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
  5. #' @return No output.
  6. #' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()], [ruut::copy_qgis_object_to_db()]
  7. #' @keywords postgis, gpkg
  8. #' @export
  9. #' @examples
  10. #' \dontrun{
  11. #'
  12. #' conf <- ruut::get_config()
  13. #' # conf$schema <- "maaamet"
  14. #' # conf$table <- "maakond"
  15. #' # conf$table <- "omavalitsus"
  16. #' # conf$table <- "omavalitsusvalispiirini"
  17. #' conf$table <- "asustusyksus"
  18. #' db_repair_tabel_geometry(conf = conf)
  19. #' }
  20. db_repair_tabel_geometry <- function(conf = conf) {
  21. ## Algorithm
  22. # ruut::qgis_algorithm_search_by_word(str = "fix")
  23. # algorithm <- "native:fixgeometries"
  24. postgres <- sprintf(
  25. "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'id\' srid=3301 type=Polygon checkPrimaryKeyUnicity=\'1\' ",
  26. conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password
  27. )
  28. ## Fix geometries
  29. cmd <- sprintf("qgis_process run native:fixgeometries --INPUT='%s table=\"%s\".\"%s\" (geom)' --OUTPUT='%s table=\"%s\".\"tmp_%s\" (geom)'", postgres, conf$schema, conf$table, postgres, conf$schema, conf$table)
  30. system(cmd)
  31. conn <- ruut::db_connect()
  32. ## Rename
  33. q <- sprintf("
  34. ALTER TABLE %s.%s RENAME TO old_%s; \
  35. drop table if exists %s.%s cascade; \
  36. ALTER TABLE %s.tmp_%s RENAME TO %s;", conf$schema, conf$table, conf$table, conf$schema, conf$table, conf$schema, conf$table, conf$table)
  37. cat(q)
  38. DBI::dbExecute(conn, q)
  39. }