瀏覽代碼

Lisatud teeregistri WFS andmestiku kopeerimine andmebaasi.

Ardo Kubjas 5 年之前
父節點
當前提交
7300861b5a
共有 4 個文件被更改,包括 115 次插入0 次删除
  1. 1 0
      NAMESPACE
  2. 31 0
      R/loe_teeregistri_wfs_kihid.R
  3. 52 0
      R/teeregister_wfs.R
  4. 31 0
      man/teeregister_wfs.Rd

+ 1 - 0
NAMESPACE

@@ -9,5 +9,6 @@ export(maaamet_kataster)
 export(maaamet_ortofotod)
 export(osm_shp)
 export(teeregister_teed)
+export(teeregister_wfs)
 importFrom(magrittr,"%>%")
 importFrom(rlang,.data)

+ 31 - 0
R/loe_teeregistri_wfs_kihid.R

@@ -0,0 +1,31 @@
+#' Teeregistri WFS kihtide lugemine
+#'
+#' See on Eesti avaandmete \url{https://avaandmed.eesti.ee/datasets?emsId=35} teabevärava kaudu teederegistri WFS (Web Feature Service) andmete info filtreerimine.
+#'
+#' @return matrix
+#' @noRd
+#' @examples
+#' \dontrun{
+#'
+#' loe_teeregistri_wfs_kihid()
+#' }
+#'
+loe_teeregistri_wfs_kihid <- function() {
+  # Andmeallikas
+  url <- "https://teeregister-api.mnt.ee/teenus/wfs?request=GetCapabilities&service=WFS"
+  data <- xml2::read_xml(url) %>% xml2::xml_contents()
+  result <- data[[4]] %>% xml2::xml_children()
+  list <- lapply(1:length(result), function(i) {
+    layer <- (result[[i]] %>% xml2::xml_children() %>% xml2::xml_text())[1]
+    title <- (result[[i]] %>% xml2::xml_children() %>% xml2::xml_text())[2]
+    abstract <- gsub("\n", "", (result[[i]] %>% xml2::xml_children() %>% xml2::xml_text())[3])
+    defaultCRS <- gsub("urn:ogc:def:crs:", "", (result[[i]] %>% xml2::xml_children() %>% xml2::xml_text())[4])
+    bbox <- (result[[i]] %>% xml2::xml_children() %>% xml2::xml_text())[8]
+    metadataURL <- (result[[i]] %>% xml2::xml_children())[9] %>% xml2::xml_attr("href")
+    c(
+      "layer" = layer, "title" = title, "abstract" = abstract, "defaultCRS" = defaultCRS,
+      "bbox" = bbox, "metadataURL" = metadataURL
+    )
+  })
+  do.call("rbind", list)
+}

+ 52 - 0
R/teeregister_wfs.R

@@ -0,0 +1,52 @@
+#' Teeregistri WFS kihid
+#'
+#' Eesti avaandmete \url{https://avaandmed.eesti.ee/datasets?emsId=35} teabevärava kaudu teederegistri WFS (Web Feature Service) andmete eksportimine postgisandmebaasi. WFS andmestiku kirjeldus: \url{https://teeregister-api.mnt.ee/teenus/wfs?request=GetCapabilities&service=WFS}
+#'
+#' @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, WFS, OSM
+#' @export
+#' @examples
+#' \dontrun{
+#'
+#' conf <- ruut::get_config()
+#' teeregister_wfs(conf = conf)
+#' }
+teeregister_wfs <- function(conf = NULL) {
+  ans <- utils::askYesNo("Do you want to import maps into database?", default = F)
+  if (!ans | is.na(ans)) {
+    cat("\n------------------------\n")
+    cat("Kaardikihte ei lisatud.")
+    cat("\n------------------------\n")
+    return()
+  }
+  if (ans) {
+    # Export to postgis
+    if (is.null(conf)) {
+      conf <- ruut::get_config()
+      conf$schema <- "teeregister_wfs"
+    }
+    # New schema
+    ruut::db_create_new_schema(conf = conf)
+    ## Teeregistri avaandmete kihtide lugemine
+    wfs_list <- loe_teeregistri_wfs_kihid()
+    layer_list <- wfs_list[, "layer"]
+    pg <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf)
+    ## WFS andmekogu
+    wfs <- "\"WFS:https://teeregister-api.mnt.ee/teenus/wfs\""
+    # Andmete kopeerimine andmebaasi
+    for (i in 1:length(layer_list)) {
+      wfs_layer <- layer_list[i]
+      conf$table <- gsub("ms:", "", wfs_layer)
+      cat(sprintf("\n-----------------\nKihi \"%s\" kopeerimine andmebaasi.\n", wfs_layer))
+      q <- sprintf(
+        "ogr2ogr -progress --config PG_USE_COPY YES -f PostgreSQL %s -lco DIM=2 %s %s -overwrite -nlt GEOMETRY -lco GEOMETRY_NAME=geometry -lco FID=id -nln %s.%s -s_srs EPSG:3301 -t_srs EPSG:4326 -a_srs EPSG:4326 -nlt PROMOTE_TO_MULTI ",
+        pg, wfs, wfs_layer, conf$schema, conf$table
+      )
+      cat(sprintf("\n%s\n", q))
+      system(q)
+      cat(sprintf("\n%s\n-------------\n", "Kopeerimine l\U00F5petati"))
+    }
+  }
+}

+ 31 - 0
man/teeregister_wfs.Rd

@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/teeregister_wfs.R
+\name{teeregister_wfs}
+\alias{teeregister_wfs}
+\title{Teeregistri WFS kihid}
+\usage{
+teeregister_wfs(conf = NULL)
+}
+\arguments{
+\item{conf}{A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.}
+}
+\value{
+No output.
+}
+\description{
+Eesti avaandmete \url{https://avaandmed.eesti.ee/datasets?emsId=35} teabevärava kaudu teederegistri WFS (Web Feature Service) andmete eksportimine postgisandmebaasi. WFS andmestiku kirjeldus: \url{https://teeregister-api.mnt.ee/teenus/wfs?request=GetCapabilities&service=WFS}
+}
+\examples{
+\dontrun{
+
+conf <- ruut::get_config()
+teeregister_wfs(conf = conf)
+}
+}
+\seealso{
+\code{\link[ruut:get_config]{ruut::get_config()}}, \code{\link[ruut:copy_shp_to_db]{ruut::copy_shp_to_db()}}
+}
+\keyword{OSM}
+\keyword{WFS,}
+\keyword{maps,}
+\keyword{postgis,}