statistika_csv.R 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #' Statistikaameti REL andmed CSV kujul ja import andmebaasi.
  2. #'
  3. #' Statistikaamet csv andmete sidumine andmebaasiga 'rel_1x1km'. Source: \url{https://estat.stat.ee/StatistikaKaart/VKR}. Lae sealt käsitsi alla 1x1 km andmestiku shp fail. Andmed salvestatakse postgisi andmebaasi. Schema = 'statistikaamet'. Koniguratsiooni muutmiseks muuda konfiguratsiooni. Muutujate vaikeväärtused on sellised, et ei ole vaja midagi muuta.
  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()]
  7. #' @keywords postgis, maps, ESRI Shpfile, OSM
  8. #' @export
  9. #' @examples
  10. #' \dontrun{
  11. #'
  12. #' conf <- ruut::get_config()
  13. #' statistika_csv(conf = conf)
  14. #' }
  15. statistika_csv <- function(conf = NULL) {
  16. ## --------------------- muutujad ja teisendused -----------------------------
  17. vars <- ajutised_muutujad(conf = conf)
  18. conf <- vars$conf
  19. # conf$schema <- "minu_teed"
  20. # conf$table <- "zzz"
  21. # output <- ruut::construct_to_gpkg_output_postgres_str(conf = conf, geometry_field = "geom")
  22. # cat(paste(paste0('"', ruut::db_table_colnames(conf = conf)$column_name, '"'), collapse = ","))
  23. # Directory for csv files.
  24. tmp_dir <- sprintf("%s/tmp/%s", system.file(package = "estmap"), "statistika_csv")
  25. if (!dir.exists(tmp_dir)) {
  26. dir.create(tmp_dir)
  27. }
  28. ## -------- 1.1 Kontrollime andmebaasis vajalike tabelite olemasolu ----------
  29. conf$schema <- "statistikaamet"
  30. conf$table <- "rel_1x1km"
  31. tbl_names <- ruut::db_schema_tablenames(conf = conf)
  32. if (!all(c("rel_1x1km") %in% tbl_names)) {
  33. cat("\n------------------\nPuuduvad vajalikud andmebaasitabelid.\n")
  34. return(NULL)
  35. }
  36. # List of files
  37. ls <- list.files(path = tmp_dir, pattern = ".csv")
  38. ls_long <- list.files(path = tmp_dir, pattern = ".csv", full.names = T)
  39. tbl_names <- unlist(strsplit(x = ls, split = ".csv"))
  40. tbl_names <- tolower(gsub("_[(]Ruudustik_1_x_1_km_2011[)]", "", tbl_names))
  41. tbl_names <- gsub("__", "_", tbl_names)
  42. tbl_names <- gsub("-", "_", tbl_names)
  43. tbl_names <- gsub("[(]", "", tbl_names)
  44. tbl_names <- gsub("[)]", "", tbl_names)
  45. tbl_names <- gsub(" ", "", tbl_names)
  46. tbl_names <- gsub("\u00E4", "a", tbl_names) #ä
  47. tbl_names <- gsub("^([0-9])", "n\\1", tbl_names) # postgis'i tabeli nimi ei tohi alata numbriga
  48. # Connect db
  49. conn <- ruut::db_connect()
  50. for (i in 1:length(tbl_names)) {
  51. ## -------------------- 1.1 Copy csv file to postgis -----------------------
  52. conf$table <- tbl_names[i]
  53. conf$table <- "ajutine"
  54. PG <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
  55. # ogr2ogr oskab csv faili lugeda juhul kui laiend on csv.
  56. cmd <- sprintf("ogr2ogr -f PostgreSQL %s -lco SCHEMA=%s -lco OVERWRITE=yes -lco FID=%s -nln \"%s\" \"%s\"", PG, conf$schema, "id", conf$table, ls_long[i])
  57. system(cmd)
  58. postgis_tbl_colnames <- ruut::db_table_colnames(conf = conf)
  59. # Connect db
  60. conn <- ruut::db_connect()
  61. ## --------------- 1.2 Kopeerime väärtused põhitabelisse ------------------
  62. # Drop column
  63. conf$table <- "rel_1x1km"
  64. q <- sprintf("ALTER TABLE \"%s\".\"%s\" DROP COLUMN IF EXISTS %s;", conf$schema, conf$table, tbl_names[i])
  65. cat(q)
  66. DBI::dbExecute(conn, q)
  67. # # Drop column
  68. conf$table <- "rel_1x1km"
  69. q <- sprintf("ALTER TABLE \"%s\".\"%s\" DROP COLUMN IF EXISTS %s;", conf$schema, conf$table, "value")
  70. cat(q)
  71. DBI::dbExecute(conn, q)
  72. # Rename columns
  73. conf$table <- "ajutine"
  74. q <- sprintf("ALTER TABLE \"%s\".\"%s\" RENAME COLUMN \"%s\" TO \"%s\";", conf$schema, conf$table, postgis_tbl_colnames[3, "column_name"], "value")
  75. cat(q)
  76. DBI::dbExecute(conn, q)
  77. Sys.sleep(1)
  78. conf$table <- "ajutine"
  79. q <- sprintf("ALTER TABLE \"%s\".\"%s\" RENAME COLUMN \"%s\" TO \"%s\";", conf$schema, conf$table, postgis_tbl_colnames[2, "column_name"], "kood")
  80. cat(q)
  81. DBI::dbExecute(conn, q)
  82. # Set '<4' to '3'
  83. conf$table <- "ajutine"
  84. q <- sprintf("UPDATE \"%s\".\"%s\" SET value='3' WHERE value='<4';", conf$schema, conf$table)
  85. cat(q)
  86. DBI::dbExecute(conn, q)
  87. # Lisame uue veeru baastabelisse
  88. conf$table <- "rel_1x1km"
  89. q <- sprintf("ALTER TABLE \"%s\".\"%s\" ADD value int4 NULL DEFAULT 0;", conf$schema, conf$table)
  90. cat(q)
  91. DBI::dbExecute(conn, q)
  92. # Kopeerime andmed
  93. conf$table <- "rel_1x1km"
  94. q <- sprintf("UPDATE \"%s\".\"%s\" as r \
  95. SET value = CAST(a.value AS INT) \
  96. FROM statistikaamet.ajutine a \
  97. WHERE r.kood = a.kood;", conf$schema, conf$table)
  98. cat(q)
  99. DBI::dbExecute(conn, q)
  100. # Muudame veeru nime
  101. conf$table <- "rel_1x1km"
  102. q <- sprintf("ALTER TABLE \"%s\".\"%s\" RENAME COLUMN value TO %s;", conf$schema, conf$table, tbl_names[i])
  103. cat(q)
  104. DBI::dbExecute(conn, q)
  105. }
  106. # Kustutame ajutise tabeli.
  107. conf$table <- "ajutine"
  108. q <- sprintf("drop table if exists %s.%s cascade;", conf$schema, conf$table)
  109. cat(q)
  110. DBI::dbExecute(conn, q)
  111. }