maaamet_aadressandmed.R 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #' Maa-ameti aadressandmed
  2. #'
  3. #' Source: \url{https://xgis.maaamet.ee/adsavalik/valjav6te/}. Andmed salvestatakse postgisi andmebaasi. Schema = 'maamet'. Koniguratsiooni muutmiseks muuda konfiguratsiooni. Muutujate vaikeväärtused on sellised, et ei ole vaja midagi muuta. Kehtivad ja ootel olekus aadressiobjektid ning nendega seotud aadressid. Kui objektil on enam kui 1 aadress, siis esineb ta väljavõttes enam kui 1 kord. Samuti esinevad aadressid väljavõttes mitu korda, kui nad on seotud mitme objektiga.
  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. #' ## Not run:
  11. #' ##
  12. #' ## maaamet_aadressandmed()
  13. #' ##
  14. #' ## End(**Not run**)
  15. maaamet_aadressandmed <- function(conf = NULL) {
  16. ans <- utils::askYesNo("Do you want to import maps into database?")
  17. if (!ans) {
  18. cat("\n------------------------\n")
  19. cat("Kaardikihte ei lisatud.")
  20. cat("\n------------------------\n")
  21. }
  22. if (ans) {
  23. # Temp directory
  24. tmp_dir <- "/tmp/maaamet_aadressandmed"
  25. if (!dir.exists(tmp_dir)) {
  26. dir.create(tmp_dir)
  27. }
  28. # Download link
  29. url <- "https://xgis.maaamet.ee/adsavalik/valjav6te/"
  30. # Estonia shapefile (ZIP archive)
  31. map_shapefile <- "aadressandmed.zip"
  32. # Download and save
  33. # Aadressandmete õige lingi tuvastamine
  34. adsavalik <- jsonlite::fromJSON(url)
  35. url_download <- sprintf("%s%s",url, adsavalik$fail[which(adsavalik$vvnr==1 & is.na(adsavalik$kov))])
  36. saveTo <- sprintf("%s/%s", tmp_dir, map_shapefile)
  37. if (!file.exists(saveTo)) {
  38. utils::download.file(
  39. url = url_download,
  40. destfile = saveTo, method = "curl", extra = "-L"
  41. )
  42. }
  43. # Unzip
  44. utils::unzip(saveTo, overwrite = T, exdir = tmp_dir)
  45. # List of files
  46. ls <- list.files(path = tmp_dir, pattern = ".dbf")
  47. ls_long <- list.files(path = tmp_dir, pattern = ".dbf", full.names = T)
  48. tbl_names <- unlist(strsplit(x = ls, split = ".dbf"))
  49. # Export to postgis
  50. if (is.null(conf)) {
  51. conf <- ruut::get_config()
  52. conf$schema <- "maaamet"
  53. }
  54. # New schema
  55. ruut::db_create_new_schema(conf = conf)
  56. # Multi layer
  57. for (i in 1:length(tbl_names)) {
  58. print(tbl_names[i])
  59. conf$table <- tbl_names[i]
  60. source <- sprintf('"%s" "%s"', tmp_dir, tbl_names[i])
  61. ## Export to postgis database.
  62. ruut::copy_shp_to_db(
  63. dir = tmp_dir, layer = tbl_names[i], conf = conf,
  64. id = "fid", crs_source = "EPSG:3301", crs_target = "EPSG:4326",
  65. geometry_type = "POINT"
  66. )
  67. cat(sprintf(
  68. "\nShp fail %s kopeeriti POSTGIS andmebaasi %s.%s\n\n",
  69. ls[i], conf$schema, conf$table
  70. ))
  71. }
  72. # Delete temp directory
  73. # system(sprintf("rm -rf %s/*", tmp_dir))
  74. }
  75. }