teeregister_teed.R 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #' Teeregistri teejooned
  2. #'
  3. #' Allalaadimise link: \url{https://teeregister.mnt.ee/reet/shpreports?0}. Andmed tuleb alla laadida käsitsi ja paigaldada kataloogi './inst/tmp/teeregister_teed'. Teeregistri sõiduteede ja teeosade andmed on antud SHP-formaadis kaardikihitidena. Avaandmed teede kohta leiab: \url{https://avaandmed.eesti.ee/datasets/teeregister}, kus on link WFS kujul kättesaamiseks \url{https://teeregister-api.mnt.ee/teenus/wfs?request=GetCapabilities&service=WFS}. WMS kaardilingi leiab \url{https://kaart.maaamet.ee/wms/alus-geo?}.
  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. #' teeregister_teed(conf = conf)
  14. #' }
  15. teeregister_teed <- function(conf = NULL) {
  16. ans <- utils::askYesNo("Do you want to import maps into database?", default = F)
  17. if (!ans | is.na(ans)) {
  18. cat("\n------------------------\n")
  19. cat("Kaardikihte ei lisatud.")
  20. cat("\n------------------------\n")
  21. return()
  22. }
  23. if (ans) {
  24. # Temp directory
  25. tmp_dir <- sprintf("%s/tmp/%s", system.file(package = "estmap"), "teeregister_teed")
  26. if (!dir.exists(tmp_dir)) {
  27. dir.create(tmp_dir)
  28. }
  29. # Params
  30. params <- c("muutee_soiduteed", "muutee_teeosad", "riigitee_soiduteed", "riigitee_teeosad")
  31. # Export to postgis
  32. if (is.null(conf)) {
  33. conf <- ruut::get_config()
  34. conf$schema <- "teeregister"
  35. }
  36. # New schema
  37. ruut::db_create_new_schema(conf = conf)
  38. for (j in 1:length(params)) {
  39. # Shapefile (ZIP archive)
  40. # Download and save
  41. saveTo <- sprintf("%s/shp_%s.zip", tmp_dir, params[j])
  42. # Unzip
  43. utils::unzip(saveTo, overwrite = T, exdir = tmp_dir)
  44. # List of files
  45. ls <- list.files(path = tmp_dir, pattern = ".dbf")
  46. ls_long <- list.files(path = tmp_dir, pattern = ".dbf", full.names = T)
  47. tbl_names <- unlist(strsplit(x = ls, split = ".dbf"))
  48. # Multi layer
  49. for (i in 1:length(tbl_names)) {
  50. print(tbl_names[i])
  51. table <- gsub("[^[:alnum:]]", "", gsub("[[:digit:]]", "", tbl_names[i]))
  52. conf$table <- sprintf("tmp_%s", table)
  53. source <- sprintf('"%s" "%s"', tmp_dir, tbl_names[i])
  54. ## -------- Export to postgis database ----------
  55. ruut::copy_shp_to_db(
  56. dir = tmp_dir, layer = tbl_names[i], conf = conf,
  57. id = "fid", crs_source = "EPSG:3301", crs_target = "EPSG:3301",
  58. geometry_type = "MULTILINESTRING"
  59. )
  60. # ------- multilinestring to linestring -----------
  61. # ruut::qgis_algorithm_search_by_word(str = "singleparts")
  62. algorithm <- "native:multiparttosingleparts"
  63. # cat(ruut::qgis_show_help(algorithm = algorithm))
  64. # Run algorithm.
  65. input <- sprintf(
  66. 'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' srid=3301 type=MultiLineString checkPrimaryKeyUnicity=\'1\' table=\"%s\".\"%s\" (geom)',
  67. conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, conf$schema, conf$table
  68. )
  69. conf$table <- table
  70. output <- sprintf(
  71. 'postgres://dbname=\'%s\' host=%s port=%s user=\'%s\' sslmode=%s password=\'%s\' table=\"%s\".\"%s\" (geom)',
  72. conf$dbname, conf$host, conf$port, conf$user, conf$sslmode, conf$password, conf$schema, conf$table
  73. )
  74. str <- sprintf("{ 'INPUT' : '%s', 'OUTPUT' : '%s' }", input, output)
  75. cmd <- ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
  76. system(cmd)
  77. # ------------ drop temp table ---------
  78. # Connect to db
  79. conn <- ruut::db_connect()
  80. q <- sprintf("DROP TABLE IF EXISTS %s.tmp_%s CASCADE;", conf$schema, table)
  81. cat("\n-----------------\n")
  82. cat(q)
  83. DBI::dbExecute(conn, q)
  84. cat(sprintf(
  85. "\nShp fail %s kopeeriti POSTGIS andmebaasi %s.%s\n\n",
  86. ls[i], conf$schema, conf$table
  87. ))
  88. }
  89. # Delete unnecessary files.
  90. system(sprintf("find %s -type f -not -name '*.zip' -print0 | xargs -0 rm --", tmp_dir))
  91. }
  92. }
  93. }