| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- #' Maa-ameti aadressandmed
- #'
- #' 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.
- #'
- #' ADOB_LIIK:
- #' Aadressiobjekti liigid (Kood, Nimetus, UnikInit, taseOrig, register)
- #' - MK maakond 1 maaregister
- #' - OV omavalitsus 2 maaregister
- #' - AY asustusüksus 3 maaregister
- #' - LO linnaosa 3 maaregister
- #' - VK väikekoht 4 kohanimeregister
- #' - LP liikluspind 5 kohanimeregister
- #' - CU maaüksus 6,7 maaregister
- #' - EE elukondlik hoone 6,7 ehitisregister
- #' - ETAKME mitteelukondlik hoone 6,7 ehitisregister
- #' - ETAKER eluruum 8 ehitisregister
- #' - ADSMR mitteeluruum 8 ehitisregister
- #' - ADS
- #' @importFrom magrittr %>%
- #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
- #' @return No output.
- #' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()]
- #' @keywords postgis, maps, ESRI Shpfile, OSM
- #' @export
- #' @examples
- #' \dontrun{
- #'
- #' conf <- ruut::get_config()
- #' maaamet_aadressandmed(conf = conf)
- #'
- #' }
- maaamet_aadressandmed <- function(conf = NULL) {
- ans <- utils::askYesNo("Do you want to import aadressandmed into database?", default = F)
- if (!ans | is.na(ans)) {
- cat("\n------------------------\n")
- cat("Kaardikihte ei lisatud.")
- cat("\n------------------------\n")
- return()
- }
- if (ans) {
- # Temp directory
- tmp_dir <- sprintf("%s/tmp/%s", system.file(package = "estmap"), "maaamet_aadressandmed")
- if (!dir.exists(tmp_dir)) {
- dir.create(tmp_dir)
- }
- # Download link
- url <- "https://xgis.maaamet.ee/adsavalik/valjav6te/"
- # Estonia shapefile (ZIP archive)
- map_shapefile <- "aadressandmed.zip"
- # Download and save
- # Aadressandmete õige lingi tuvastamine
- adsavalik <- jsonlite::fromJSON(url)
- url_download <- sprintf("%s%s", url, adsavalik$fail[which(adsavalik$vvnr == 1 & is.na(adsavalik$kov))])
- saveTo <- sprintf("%s/%s", tmp_dir, map_shapefile)
- if (!file.exists(saveTo)) {
- utils::download.file(
- url = url_download,
- destfile = saveTo, method = "curl", extra = "-L"
- )
- }
- # Unzip
- utils::unzip(saveTo, overwrite = T, exdir = tmp_dir)
- # List of files
- ls <- list.files(path = tmp_dir, pattern = ".csv")
- ls_long <- list.files(path = tmp_dir, pattern = ".csv", full.names = T)
- tbl_names <- unlist(strsplit(x = ls, split = ".csv"))
- # Export to postgis
- if (is.null(conf)) {
- conf <- ruut::get_config()
- conf$schema <- "maaamet"
- conf$table <- "aadressandmed"
- }
- # Multi layer: paneme kõik csv failid üheks failiks.
- # test <- read.csv(file = "/tmp/maaamet_aadressandmed/1_4022021_01505_3.csv",
- # nrows = 10, sep = ";", dec = ",", stringsAsFactors = F)
- # test$ADS_KEHTIV <- as.POSIXct(strptime(test$ADS_KEHTIV, "%d.%m.%Y %H:%M:%S"))
- #
- # write.csv(x = test, file = "/tmp/maaamet_aadressandmed/xxxx.csv", row.names = F)
- # testx <- read.csv(file = "/tmp/maaamet_aadressandmed/xxxx.csv", nrows = 10,sep = ",")
- # Versioon 1 kokkupakkimisest
- # vignette("readr")
- # vignette("locales")
- dataset <- list.files(
- path = tmp_dir,
- pattern = "*.csv",
- # pattern = "*505*",
- full.names = T
- ) %>%
- purrr::map_df(~ readr::read_csv2(.,
- col_types = readr::cols(
- TASE3_KOOD = readr::col_character(),
- TASE4_KOOD = readr::col_skip(),
- TASE4_NIMETUS = readr::col_skip(),
- TASE4_NIMETUS_LIIGIGA = readr::col_skip(),
- TASE5_KOOD = readr::col_skip(),
- TASE5_NIMETUS = readr::col_skip(),
- TASE5_NIMETUS_LIIGIGA = readr::col_skip(),
- TASE6_KOOD = readr::col_skip(),
- TASE6_NIMETUS = readr::col_skip(),
- TASE6_NIMETUS_LIIGIGA = readr::col_skip(),
- TASE7_KOOD = readr::col_skip(),
- TASE7_NIMETUS = readr::col_skip(),
- TASE7_NIMETUS_LIIGIGA = readr::col_skip(),
- TASE8_KOOD = readr::col_skip(),
- TASE8_NIMETUS = readr::col_skip(),
- TASE8_NIMETUS_LIIGIGA = readr::col_skip(),
- HOONE_OID = readr::col_skip()
- ),
- skip = 0,
- col_names = T,
- na = character(),
- quote = "\"",
- # trim_ws = TRUE,
- # n_max = 20,
- locale = readr::locale(
- date_names = "et", # date_names_langs()
- date_format = "%d.%m.%Y %H:%M:%S",
- time_format = "%H:%M:%S",
- decimal_mark = ",",
- grouping_mark = "",
- tz = "UTC",
- encoding = "ISO-8859-4",
- asciify = FALSE
- ) # readr::default_locale()
- ))
- saveTo <- sprintf("%s/%s", tmp_dir, "aadressandmed.csv")
- utils::write.csv(dataset, file = saveTo, row.names = F, na = "")
- if (file.exists(saveTo)) {
- # New schema
- ruut::db_create_new_schema(conf = conf)
- ## Export to postgis database.
- conf$table <- "aadressandmed"
- pg <- ruut::construct_ogr2ogr_PG_connect_str()
- cmd <- sprintf(
- paste0(
- "ogr2ogr -f PostgreSQL ",
- "%s -lco SCHEMA=%s -lco OVERWRITE=yes -nln \"%s\" \"%s/%s\""
- ), pg, conf$schema, conf$table, tmp_dir, "aadressandmed.csv"
- )
- # cmd <- sprintf(
- # paste0(
- # "export PGCLIENTENCODING=ISO-8859-4; ",
- # "ogr2ogr -overwrite --config PG_USE_COPY YES --config PGCLIENTENCODING ISO-8859-4 -f PostgreSQL ",
- # "%s -lco SCHEMA=%s -lco OVERWRITE=yes -skipfailures -nln %s \"%s/%s\""
- # ), pg, conf$schema, conf$table, tmp_dir, "aadressandmed.csv"
- # )
- cat(cmd)
- cat("\n")
- # -overwrite vs. -append -progress
- # -sql ST_Transform(ST_SetSRID(ST_MakePoint(viitepunkt_x::double precision, viitepunkt_y::double precision),3301),4326) as geometry
- system(cmd)
- # Add geometry column
- Sys.sleep(2)
- conn <- ruut::db_connect()
- # Import source CSV
- # q <- sprintf("
- # COPY %s.%s FROM '%s/%s' DELIMITER ';' CSV header ENCODING 'utf8';",
- # conf$schema, conf$table, tmp_dir, "aadressandmed.csv")
- # DBI::dbExecute(conn, q)
- q <- sprintf("
- -- ALTER TABLE %s.%s DROP COLUMN geometry; \
- ALTER TABLE %s.%s ADD geometry geometry DEFAULT NULL; \
- UPDATE %s.%s SET viitepunkt_x=NULL where viitepunkt_x=''; \
- UPDATE %s.%s SET viitepunkt_y=NULL where viitepunkt_y=''; \
- ALTER TABLE %s.%s ALTER COLUMN viitepunkt_x TYPE double precision USING viitepunkt_x::double precision; \
- ALTER TABLE %s.%s ALTER COLUMN viitepunkt_y TYPE double precision USING viitepunkt_y::double precision; \
- ALTER TABLE %s.%s ALTER COLUMN ads_kehtiv TYPE date USING ads_kehtiv::date;",
- conf$schema, conf$table, conf$schema, conf$table,
- conf$schema, conf$table, conf$schema, conf$table,
- conf$schema, conf$table, conf$schema, conf$table,
- conf$schema, conf$table
- )
- cat(q)
- cat('\n')
- DBI::dbExecute(conn, q)
- # Insert data into geometry
- q <- sprintf(
- "
- UPDATE %s.%s as a SET geometry =subquery.geom \
- FROM (\
- SELECT adob_id, \
- ST_Transform(ST_SetSRID(ST_MakePoint(viitepunkt_x::double precision, \
- viitepunkt_y::double precision),3301),4326) as geom \
- FROM %s.%s a \
- ) AS subquery \
- WHERE a.adob_id=subquery.adob_id;",
- conf$schema, conf$table, conf$schema, conf$table
- )
- cat(q)
- cat('\n')
- DBI::dbExecute(conn, q)
- # ogr2ogr help.
- # system("ogr2ogr --long-usage")
- }
- # Delete unnecessary files.
- system(sprintf("rm -rf %s/*.csv", tmp_dir))
- }
- }
|