瀏覽代碼

ortofoto_split_to_epk2t funktsiooni lisamine

Ardo Kubjas 3 年之前
父節點
當前提交
820e49d8b2
共有 3 個文件被更改,包括 238 次插入0 次删除
  1. 1 0
      NAMESPACE
  2. 196 0
      R/ortofoto_split_to_epk2t.R
  3. 41 0
      man/ortofoto_split_to_epk2t.Rd

+ 1 - 0
NAMESPACE

@@ -19,6 +19,7 @@ export(minu_teed_muud_teed)
 export(minu_teed_riigiteed)
 export(minu_teed_riigiteed_ls)
 export(minu_teed_riigiteed_valjapaasud)
+export(ortofoto_split_to_epk2t)
 export(osm_shp)
 export(statistika_csv)
 export(statistika_rahvaarv)

+ 196 - 0
R/ortofoto_split_to_epk2t.R

@@ -0,0 +1,196 @@
+#' Maa-ameti ortofoto splittimine 1x1km suurusteks TIFF fotofailideks
+#'
+#' Maa-ameti allalaetud ortofoto jagamine väiksemateks osadeks. Andmestruktuur: raster. Mõõtkava 1:2 000 (vaata ruudustiku infot \url{https://geoportaal.maaamet.ee/est/ruumiandmed/kaardilehtede-susteemid-p224.html}). Loe: \url{https://geoportaal.maaamet.ee/est/andmed-ja-kaardid/ortofotod-p99.html}. Uued kaardid salvestatakse kataloogi (default = '~/ortofotod'). Faili nimi on EPK2T maa-ameti kaardiruudu väärtusega.  Eesti topokaardistuse tarbeks toodetud ortofotodes on piksli suurusega 20-40 cm ja katavad kogu riigi territooriumi. Andmete kasutamisel palume viidata Maa-ametile. Näiteks: 'Ortofoto, Maa-amet 2021'. Käsitsi allalaadimine /url{https://geoportaal.maaamet.ee/index.php?lang_id=1&page_id=610}.
+#' @importFrom magrittr %>%
+#' @param epk10t 5-kohaline number, mis vastab kaardi 1:10 000 ruudu numbrile \url{https://geoportaal.maaamet.ee/est/ruumiandmed/kaardilehtede-susteemid-p224.html}.
+#' @param dir kataloog, kus GEOTIFF failasub.
+#' @param saveToDir Splititud GEOTIFF failide salvestamise kataloog.
+#' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.
+#' @return GEOTIFF files.
+#' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()]
+#' @keywords maa-amet, ortofoto
+#' @export
+#' @examples
+#' \dontrun{
+#'
+#' conf <- ruut::get_config()
+#' ortofoto_split_to_epk2t(epk10t = 54711, dir = "/home/ardo/ortofotod",
+#' saveToDir = "/home/ardo/ortofotod", conf = conf)
+#' }
+ortofoto_split_to_epk2t <-
+  function(epk10t = NULL,
+           dir = "/home/ardo/ortofotod",
+           saveToDir = "/home/ardo/ortofotod",
+           conf = NULL) {
+    ## ------------- muutujad ja teisendused ---------------
+    # source("R/ajutised_muutujad.R")
+    vars <- ajutised_muutujad(conf = conf)
+    conf <- vars$conf
+    # epk10t <- 62053; epk10t <- 65813
+    # epk10t numbri õigsuse kontroll
+    epk10t_all <-
+      utils::read.csv(file = system.file("csv", "epk10t.csv", package = "estmap"),
+                      header = T)[, "nr"]
+    if (!epk10t %in% epk10t_all) {
+      cat(
+        sprintf(
+          "\n---------------\n\nValitud epk10t ruudu number %s ei ole \u00F5ige.\n",
+          epk10t
+        )
+      )
+      return()
+    }
+    # GEOTIFF failide salvestamise kataloog.
+    if (!dir.exists(saveToDir)) {
+      dir.create(saveToDir, recursive = T)
+    }
+    # Kas GEOTIFF fail eksisteerib.
+    input_tif_file <- sprintf("%s/%s.tif", dir, epk10t)
+    if (!file.exists(input_tif_file)) {
+      cat(sprintf(
+        "\n---------------\n\nEi leia TIFF faili: %s.\n",
+        input_tif_file
+      ))
+      return()
+    }
+
+    # 1. ============= Ortofoto TIFF faili piirkast =============
+    # ruut::qgis_algorithm_search_by_word("mask")
+    algorithm <- "native:polygonfromlayerextent"
+    input <- input_tif_file
+    output <- vars$tmp_gpkg_file_output_1 # ajutine fail
+    str <-
+      sprintf("{
+    'INPUT' : '%s',
+    'OUTPUT' : '%s',
+    'ROUND_TO' : 0.0
+}",
+              input,
+              output)
+    cmd <-
+      ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
+    system(cmd)
+
+    # 2. ============= epk2t_grid ja TIFF piirkasti ühisosa =============
+    # ruut::qgis_algorithm_search_by_word("intersection")
+    algorithm <- "native:extractbylocation"
+    conf$schema <- "maaamet"
+    conf$table <- "epk2t_grid"
+    input <-
+      ruut::construct_to_gpkg_output_postgres_str(
+        conf = conf,
+        geometry_field = "geom",
+        geometry_type = "Polygon",
+        srid = 3301,
+        checkPrimaryKeyUnicity = TRUE,
+        key = "id"
+      )
+    intersect <- vars$tmp_gpkg_file_input_1 # ajutine fail
+    output <- vars$tmp_gpkg_file_output_2 # ajutine fail
+    str <-
+      sprintf(
+        "{
+    'INPUT' : '%s',
+    'INTERSECT' : '%s',
+    'OUTPUT' : '%s',
+    'PREDICATE' : [6]
+}",
+        input,
+        intersect,
+        output
+      )
+    cmd <-
+      ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
+    system(cmd)
+
+
+    # 3. ============= Multipolygon to polygon =============
+    # ruut::qgis_algorithm_search_by_word("singlepart")
+    algorithm <- "native:multiparttosingleparts"
+    input <- vars$tmp_gpkg_file_input_2 # ajutine fail
+    output <- vars$tmp_gpkg_file_output_3 # ajutine fail
+    str <-
+      sprintf("    {
+        'INPUT' : '%s',
+        'OUTPUT' : '%s'
+    }",
+              input,
+              output)
+    cmd <-
+      ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
+    system(cmd)
+
+    # 4. ============= epk2t kaardiosadega tiff faili lõikamine tükkideks =============
+    # EPK2T kaartide atribuutide tabeli kirjutamine csv fail.
+    input <- paste(vars$tmp_gpkg_file,
+                   "test_layer_3") # ajutine fail
+    output <-
+      sprintf("%s/%s.csv", vars$tmp_dir, "xxxx") # ajutine fail
+
+    cmd <-
+      sprintf(
+        "ogr2ogr -f \"CSV\" -lco SEPARATOR=COMMA -lco STRING_QUOTING=IF_NEEDED -lco LINEFORMAT=LF %s %s",
+        output,
+        input
+      )
+    system(cmd)
+    # EPK2T indeksite lugemine CSV failist
+    epk2t_list <- utils::read.csv(file = output)[, 'id']
+    # Loop
+    for (i in 1:length(epk2t_list)) {
+      # ruut::qgis_algorithm_search_by_word("extract")
+      algorithm <- "native:extractbyattribute"
+      input <- vars$tmp_gpkg_file_input_3
+      output <- vars$tmp_gpkg_file_output_4
+      str <-
+        sprintf(
+          "{'FIELD' : 'id',
+    'INPUT' : '%s',
+    'OPERATOR' : 0,
+    'OUTPUT' : '%s',
+    'VALUE' : '%d'
+}",
+          input,
+          output,
+          epk2t_list[i]
+        )
+      cmd <-
+        ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
+      system(cmd)
+      # ===================  Salvestame TIFF faili =============================
+      algorithm <- "gdal:cliprasterbymasklayer"
+      input <- input_tif_file
+      mask <- vars$tmp_gpkg_file_input_4
+      str <-
+        sprintf(
+          "{   'ALPHA_BAND' : false,
+    'CROP_TO_CUTLINE' : true,
+    'DATA_TYPE' : 0,
+    'EXTRA' : '',
+    'INPUT' : '%s',
+    'KEEP_RESOLUTION' : false,
+    'MASK' : '%s',
+    'MULTITHREADING' : false,
+    'NODATA' : null,
+    'OPTIONS' : '',
+    'OUTPUT' : '%s/%s.tif',
+    'SET_RESOLUTION' : false,
+    'SOURCE_CRS' : 'EPSG:3301',
+    'TARGET_CRS' : 'EPSG:3301'
+}",
+          input,
+          mask,
+          saveToDir,
+          epk2t_list[i]
+        )
+      cmd <-
+        ruut::construct_qgis_output_result_to_better_format(str = str, algorithm = algorithm)
+      system(cmd)
+    }
+    cat(
+      sprintf(
+        "\n---------------\n\nEPK2T tiff failid salvestati kataloogi %s.\n",
+        epk10t
+      )
+    )
+  }

+ 41 - 0
man/ortofoto_split_to_epk2t.Rd

@@ -0,0 +1,41 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/ortofoto_split_to_epk2t.R
+\name{ortofoto_split_to_epk2t}
+\alias{ortofoto_split_to_epk2t}
+\title{Maa-ameti ortofoto splittimine 1x1km suurusteks TIFF fotofailideks}
+\usage{
+ortofoto_split_to_epk2t(
+  epk10t = NULL,
+  dir = "/home/ardo/ortofotod",
+  saveToDir = "/home/ardo/ortofotod",
+  conf = NULL
+)
+}
+\arguments{
+\item{epk10t}{5-kohaline number, mis vastab kaardi 1:10 000 ruudu numbrile \url{https://geoportaal.maaamet.ee/est/ruumiandmed/kaardilehtede-susteemid-p224.html}.}
+
+\item{dir}{kataloog, kus GEOTIFF failasub.}
+
+\item{saveToDir}{Splititud GEOTIFF failide salvestamise kataloog.}
+
+\item{conf}{A list() of configuration variables. Default values \code{\link[ruut]{get_config}}.}
+}
+\value{
+GEOTIFF files.
+}
+\description{
+Maa-ameti allalaetud ortofoto jagamine väiksemateks osadeks. Andmestruktuur: raster. Mõõtkava 1:2 000 (vaata ruudustiku infot \url{https://geoportaal.maaamet.ee/est/ruumiandmed/kaardilehtede-susteemid-p224.html}). Loe: \url{https://geoportaal.maaamet.ee/est/andmed-ja-kaardid/ortofotod-p99.html}. Uued kaardid salvestatakse kataloogi (default = '~/ortofotod'). Faili nimi on EPK2T maa-ameti kaardiruudu väärtusega.  Eesti topokaardistuse tarbeks toodetud ortofotodes on piksli suurusega 20-40 cm ja katavad kogu riigi territooriumi. Andmete kasutamisel palume viidata Maa-ametile. Näiteks: 'Ortofoto, Maa-amet 2021'. Käsitsi allalaadimine /url{https://geoportaal.maaamet.ee/index.php?lang_id=1&page_id=610}.
+}
+\examples{
+\dontrun{
+
+conf <- ruut::get_config()
+ortofoto_split_to_epk2t(epk10t = 54711, dir = "/home/ardo/ortofotod",
+saveToDir = "/home/ardo/ortofotod", conf = conf)
+}
+}
+\seealso{
+\code{\link[ruut:get_config]{ruut::get_config()}}, \code{\link[ruut:copy_shp_to_db]{ruut::copy_shp_to_db()}}
+}
+\keyword{maa-amet,}
+\keyword{ortofoto}