db_repair_tabel_geometry.R 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  25. postgres <- sprintf(
  26. "postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' key=\'id\' srid=3301 type=Polygon checkPrimaryKeyUnicity=\'1\' ",
  27. conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password
  28. )
  29. result <- qgisprocess::qgis_run_algorithm(
  30. algorithm = "native:fixgeometries",
  31. INPUT = sprintf(
  32. '%s table=\"%s\".\"%s\" (geom)',
  33. postgres, conf$schema, conf$table
  34. ),
  35. OUTPUT = sprintf(
  36. '%s table=\"%s\".\"tmp_%s\" (geom)',
  37. postgres, conf$schema, conf$table
  38. )
  39. # .quiet = TRUE
  40. )
  41. conn <- ruut::db_connect()
  42. ## Rename
  43. q <- sprintf("
  44. ALTER TABLE %s.%s RENAME TO old_%s; \
  45. drop table if exists %s.%s cascade; \
  46. ALTER TABLE %s.tmp_%s RENAME TO %s;", conf$schema, conf$table, conf$table, conf$schema, conf$table, conf$schema, conf$table, conf$table)
  47. cat(q)
  48. DBI::dbExecute(conn, q)
  49. }