Pārlūkot izejas kodu

Piirkonnaga seotud geomeetria teisendusfunktsioonide salvestamine eraldi failidesse.

Ardo Kubjas 5 gadi atpakaļ
vecāks
revīzija
a6b7939299

+ 10 - 219
01_funktsioonid.R

@@ -1,225 +1,16 @@
+#'
 #' Funktsioonid
 #'
 
-# -----------------------------------------------------------------------
-## Funktsioon: piirkonna piir
-pk_piir <- function(obj) {
-  # obj - objekti nimetus (näiteks: valga)
-  conn <- ruut::db_connect()
-  q <- sprintf("SELECT * FROM %s.%s_piir", conf$schema, tolower(obj))
-  cat(sprintf("\n-----------------\n%s\n\n", q))
-  sf::st_read(conn, query = q)
-}
-# pk_piir(obj = "valga")
-
-
-# -----------------------------------------------------------------------
-## Funktsioon: piirkonna piiri katvate epk10t (5x5km) ruutude loomine
-create_pk_epk10t <- function(obj) {
-  # obj - objekti nimetus (näiteks: valga)
-  # ruut::qgis_algorithm_search_by_word(str = "extract")
-  algorithm <- "native:extractbylocation"
-  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
-  result <- qgisprocess::qgis_run_algorithm(
-    algorithm = algorithm,
-    INPUT = 'postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable authcfg=0i30k14 key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"maaamet\".\"epk10t\" (geometry)',
-    INTERSECT = sprintf('postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable authcfg=0i30k14 key=\'ogc_fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"xxx_artikkel_210127\".\"%s_piir\" (geometry)', obj),
-    OUTPUT = qgisprocess::qgis_tmp_vector(),
-    PREDICATE = c(0, 1),
-    .quiet = TRUE
-  )
-  result
-}
-# create_pk_epk10t(obj = objektid[i])
-
-## Funktsioon: piirkonna piiri katvate epk10t (5x5km) ruutude lugemine
-pk_epk10t <- function(obj) {
-  # obj - objekti nimetus (näiteks: valga)
-  conn <- ruut::db_connect()
-  q <- sprintf("SELECT * FROM %s.%s_epk10t", conf$schema, tolower(obj))
-  cat(sprintf("\n-----------------\n%s\n\n", q))
-  sf::st_read(conn, query = q)
-}
-# pk_epk10t(obj = "valga")
-
-
-# -----------------------------------------------------------------------
-## Funktsioon: epk200t (100x100km) kaardiruutudele piirikasti (boundary box) loomine
-create_epk200t_bb <- function() {
-  # ruut::qgis_algorithm_search_by_word(str = "bounding")
-  algorithm <- "qgis:minimumboundinggeometry"
-  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
-  result <- qgisprocess::qgis_run_algorithm(
-    algorithm = algorithm,
-    FIELD = "",
-    INPUT = 'postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable authcfg=0i30k14 key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"maaamet\".\"epk200t\" (geometry)',
-    TYPE = 3,
-    OUTPUT = qgisprocess::qgis_tmp_vector(),
-    .quiet = TRUE
-  )
-  # result
-  epk200t_bb <- sf::read_sf(qgis_output(result, "OUTPUT"))
-  sf::st_geometry(epk200t_bb) %>% plot()
-  conf <- ruut::get_config()
-  conf$table <- "epk200t_bb"
-  conf$schema <- "maaamet"
-  ruut::copy_qgis_object_to_db(x = result, conf = conf, geometry_type = "POLYGON")
-  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
-  # result
-}
-
-
-
-# ---------------------------------------------------------------------
-## Grdid genereerimine.
-#' Funktsioonid gnereerivad kogu Eestit (s.o maaameti 100x100 km kogu Eestit katvate
-#' ruudstikega määratud ala). Ruutvõrgustik genereeritakse ruutudele 1x1, 5x5 ja
-#' 100x100 km.
-
-# 1. 100x100 km ruudustik
-create_epk200t_grid <- function() {
-  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
-  algorithm <- "grass7:v.mkgrid"
-  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
-  result <- qgisprocess::qgis_run_algorithm(
-    algorithm = algorithm,
-    "-h" = 0,
-    "-p" = 0,
-    GRASS_OUTPUT_TYPE_PARAMETER = 0,
-    GRASS_REGION_PARAMETER = "",
-    GRASS_VECTOR_DSCO = "",
-    GRASS_VECTOR_EXPORT_NOCAT = 0,
-    GRASS_VECTOR_LCO = "",
-    angle = 0,
-    box = "100000,100000",
-    breaks = 0,
-    coordinates = "300000,6300000 [EPSG:3301]",
-    grid = "4,5",
-    map = "tmp/epk200t_grrid.gpkg",
-    position = 0,
-    .quiet = TRUE
-  )
-  # result
-  epk200t_grid <- sf::read_sf(qgis_output(result, "map"))
-  sf::st_geometry(epk200t_grid) %>% plot()
-  conf <- ruut::get_config()
-  conf$table <- "epk200t_grid"
-  conf$schema <- "maaamet"
-  ruut::copy_qgis_object_to_db(
-    x = result, conf = conf, geometry_type = "POLYGON",
-    crs_source = "EPSG:3301"
-  )
-  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
-  # result
-}
+source("geomeetria_teisendused/pk_piir.R")
+source("geomeetria_teisendused/create_pk_epk10t.R")
+source("geomeetria_teisendused/pk_epk10t.R")
+source("geomeetria_teisendused/create_epk200t_bb.R")
+source("geomeetria_teisendused/create_epk10t_grid.R")
+source("geomeetria_teisendused/create_epk2t_grid.R")
+source("geomeetria_teisendused/create_epk02t_grid.R")
+source("geomeetria_teisendused/create_boundarybox_3301_to_pk.R")
+source("geomeetria_teisendused/create_epk10t_grid_to_pk_bb.R")
 
-# 2. 5x5 km ruudustik
-create_epk10t_grid <- function() {
-  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
-  algorithm <- "grass7:v.mkgrid"
-  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
-  result <- qgisprocess::qgis_run_algorithm(
-    algorithm = algorithm,
-    "-h" = 0,
-    "-p" = 0,
-    GRASS_OUTPUT_TYPE_PARAMETER = 0,
-    GRASS_REGION_PARAMETER = "",
-    GRASS_VECTOR_DSCO = "",
-    GRASS_VECTOR_EXPORT_NOCAT = 0,
-    GRASS_VECTOR_LCO = "",
-    angle = 0,
-    box = "5000,5000", # 5x5 km
-    breaks = 0,
-    coordinates = "300000,6300000 [EPSG:3301]",
-    grid = "80,100", # ridade ja veergude arv
-    map = "tmp/epk10t_grrid.gpkg",
-    position = 0,
-    .quiet = TRUE
-  )
-  # result
-  epk10t_grid <- sf::read_sf(qgis_output(result, "map"))
-  sf::st_geometry(epk10t_grid) %>% plot()
-  conf <- ruut::get_config()
-  conf$table <- "epk10t_grid"
-  conf$schema <- "maaamet"
-  ruut::copy_qgis_object_to_db(
-    x = result, conf = conf, geometry_type = "POLYGON",
-    crs_source = "EPSG:3301"
-  )
-  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
-  # result
-}
 
-# 3. 1 x 1 km ruudustik
-create_epk2t_grid <- function() {
-  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
-  algorithm <- "grass7:v.mkgrid"
-  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
-  result <- qgisprocess::qgis_run_algorithm(
-    algorithm = algorithm,
-    "-h" = 0,
-    "-p" = 0,
-    GRASS_OUTPUT_TYPE_PARAMETER = 0,
-    GRASS_REGION_PARAMETER = "",
-    GRASS_VECTOR_DSCO = "",
-    GRASS_VECTOR_EXPORT_NOCAT = 0,
-    GRASS_VECTOR_LCO = "",
-    angle = 0,
-    box = "1000,1000",
-    breaks = 0,
-    coordinates = "300000,6300000 [EPSG:3301]",
-    grid = "400,500",
-    map = "tmp/epk2t_grrid.gpkg",
-    position = 0,
-    .quiet = TRUE
-  )
-  # result
-  # epk2t_grid <- sf::read_sf(qgis_output(result, "map"))
-  # sf::st_geometry(epk2t_grid) %>% plot()
-  conf <- ruut::get_config()
-  conf$table <- "epk2t_grid"
-  conf$schema <- "maaamet"
-  ruut::copy_qgis_object_to_db(
-    x = result, conf = conf, geometry_type = "POLYGON",
-    crs_source = "EPSG:3301"
-  )
-  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
-  # result
-}
 
-# 3. 100 x 100 m ruudustik
-create_epk02t_grid <- function() {
-  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
-  algorithm <- "grass7:v.mkgrid"
-  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
-  result <- qgisprocess::qgis_run_algorithm(
-    algorithm = algorithm,
-    "-h" = 0,
-    "-p" = 0,
-    GRASS_OUTPUT_TYPE_PARAMETER = 0,
-    GRASS_REGION_PARAMETER = "",
-    GRASS_VECTOR_DSCO = "",
-    GRASS_VECTOR_EXPORT_NOCAT = 0,
-    GRASS_VECTOR_LCO = "",
-    angle = 0,
-    box = "100,100",
-    breaks = 0,
-    coordinates = "300000,6300000 [EPSG:3301]",
-    grid = "4000,5000",
-    map = "tmp/epk02t_grrid.gpkg",
-    position = 0,
-    .quiet = TRUE
-  )
-  # result
-  # epk02t_grid <- sf::read_sf(qgis_output(result, "map"))
-  # sf::st_geometry(epk02t_grid) %>% plot()
-  conf <- ruut::get_config()
-  conf$table <- "epk02t_grid"
-  conf$schema <- "maaamet"
-  ruut::copy_qgis_object_to_db(
-    x = result, conf = conf, geometry_type = "POLYGON",
-    crs_source = "EPSG:3301"
-  )
-  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
-  # result
-}

+ 57 - 0
geomeetria_teisendused/create_boundarybox_3301_to_pk.R

@@ -0,0 +1,57 @@
+#' Funktsioon: piirikasti leidmine piirkonnale
+#' Piirikast leitakse 2-astmelisena. Esmalt genereeritakse piirkonna
+#' peale projektsiooniga EPSG:3301 ruutvõrgustik suurusega 500x500 meetrit, seda
+#' arvestusega, et teises etapis leitavast piirikastist ei jääks välja
+#' arvestatav osa 1x1 km ruutusid. Need ruudud saavad hiljem aluseks map algebra
+#' piirkonna maatriksitele. Teises etapis leitakse ruudustikele piirikast,
+#' mis on piirkonna ristiklülikukujuline piirikast projektsioonis EPSG:3301.
+
+create_boundarybox_3301_to_pk <- function(obj) {
+  # obj - objekti nimetus (näiteks: valga)
+  input <- sprintf(
+    'postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable password=\'osm\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"xxx_artikkel_210127\".\"%s_piir\" (geometry)',
+    obj
+  )
+  ## a. ruutvõrgustiku konstrueerimine
+  # ruut::qgis_algorithm_search_by_word(str = "grid")
+  algorithm <- "native:creategrid"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    CRS = "EPSG:3301",
+    # EXTENT = '25.454305528,26.259893095,59.454118579,59.714621582 [EPSG:4326]',
+    EXTENT = input,
+    HOVERLAY = 0,
+    HSPACING = 500,
+    TYPE = 2,
+    VOVERLAY = 0,
+    VSPACING = 500,
+    OUTPUT = qgisprocess::qgis_tmp_vector(),
+    .quiet = TRUE
+  )
+  result
+  pk_grid <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
+  # sf::st_geometry(pk_grid) %>% plot()
+  ## b. ruutvõrgustikule piirikasti leidmine
+  # ruut::qgis_algorithm_search_by_word(str = "minimumboundinggeometry")
+  algorithm <- "qgis:minimumboundinggeometry"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result1 <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    FIELD = "",
+    INPUT = pk_grid,
+    TYPE = 3,
+    OUTPUT = qgisprocess::qgis_tmp_vector(),
+    .quiet = TRUE
+  )
+  result1
+  # pk_grid_bb <- sf::read_sf(qgisprocess::qgis_output(result1, "OUTPUT"))
+  # sf::st_geometry(pk_grid_bb) %>% plot()
+  ## c. kopeerimine andmebaasi laiendiga '_bb'
+  conf <- ruut::get_config()
+  conf$table <- sprintf("%s_bb", obj)
+  conf$schema <- "xxx_artikkel_210127"
+  ruut::copy_qgis_object_to_db(x = result1, conf = conf, geometry_type = "POLYGON", crs_source = "EPSG:3301")
+  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
+}
+# create_boundarybox_3301_to_pk()

+ 74 - 0
geomeetria_teisendused/create_epk02t_grid.R

@@ -0,0 +1,74 @@
+#  Võrgustike genereerimine ja salvestamine andmebaasi
+#' Funktsioon gnereerib kogu Eestit katva ruudustike piirikasti
+#' 'maaamet.epk200t_bb' sisse ruutvõrgustiku ruudu suurusega 100x100 m.
+#' Võrgustik salvestatakse andmebaasi nime 'epk02t_grid' alla.
+#' !!!!!!! Võrgustiku genereerimine ja salvestamine andmebaasi
+#' võtab aega üle 12 tunni. Salvestatavate andmete maht ca 5 GB.
+
+create_epk02t_grid <- function() {
+  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
+  algorithm <- "grass7:v.mkgrid"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  if (!dir.exists("tmp/epk02t_grid")) dir.create("tmp/epk02t_grid", recursive = T)
+  conf <- ruut::get_config()
+  conf$table <- "epk02t_grid"
+  conf$schema <- "maaamet"
+  ## Loe instaleeritud tabelid andmebaasis
+  installed_tables <- ruut::db_schema_tablenames(conf = conf)
+  if (!conf$table %in% installed_tables) {
+    # 1:40
+    for (i in 1:40) {
+      coordinates <- sprintf("300000,6%s0000 [EPSG:3301]", (29 + i))
+      map <- sprintf("tmp/epk02t_grid/%s.gpkg", i)
+      cat(sprintf("\n%s/40 1. coordinates: %s, 2. map: %s", i, coordinates, map))
+      # ------------------
+      result <- qgisprocess::qgis_run_algorithm(
+        algorithm = algorithm,
+        "-h" = 0,
+        "-p" = 0,
+        GRASS_OUTPUT_TYPE_PARAMETER = 3,
+        GRASS_REGION_PARAMETER = "300000,800000,6320000,6700000  [EPSG:3301]",
+        GRASS_VECTOR_DSCO = "",
+        GRASS_VECTOR_EXPORT_NOCAT = 0,
+        GRASS_VECTOR_LCO = "",
+        angle = 0,
+        box = "100,100",
+        breaks = 0,
+        coordinates = coordinates,
+        grid = "100,5000", # "4000,5000"
+        map = map,
+        position = 0,
+        .quiet = TRUE
+      )
+      # result
+      ## Muudame rea numbreid, kuna tsükliga lähevad need kaduma.
+      layers <- rgdal::ogrListLayers(map)
+      x <- rgdal::readOGR(map, layers[1])
+      x$row <- x$row + (i - 1) * 100
+      x$cat <- rev(x$cat + (i - 1) * 100)
+      rgdal::writeOGR(obj = x, dsn = map, layer = layers[1], driver = "GPKG", overwrite_layer = T)
+      ## Lisame kihi andmebaasi
+      cmd <- sprintf(
+        paste0(
+          "ogr2ogr -append --config PG_USE_COPY YES -f PostgreSQL ",
+          "PG:\" dbname='%s' host=%s port=%d user='%s' password='%s' ",
+          "sslmode=%s active_schema=%s \" -lco DIM=2 \"%s\" -nlt GEOMETRY ",
+          "-lco GEOMETRY_NAME=geometry -lco FID=%s -nln %s.%s ",
+          "-s_srs %s -t_srs %s -nlt %s"
+        ),
+        conf$dbname, conf$host, conf$port, conf$user, conf$password, conf$sslmode,
+        conf$schema, map, "id", conf$schema, conf$table, "EPSG:3301", "EPSG:4326",
+        "POLYGON"
+      )
+      cat(sprintf("\n-----------------\n%s\n", cmd))
+      system(cmd)
+    }
+    cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
+    # result
+  } else {
+    cat(sprintf(
+      "\n-----------------\nUue andmebaasi '%s' installimiseks pead vana enne kustutama.\n",
+      conf$table
+    ))
+  }
+}

+ 40 - 0
geomeetria_teisendused/create_epk10t_grid.R

@@ -0,0 +1,40 @@
+#  Võrgustike genereerimine ja salvestamine andmebaasi
+#' Funktsioon gnereerib kogu Eestit katva ruudustike piirikasti
+#' 'maaamet.epk200t_bb' sisse ruutvõrgustiku ruudu suurusega 5x5 km.
+#' Võrgustik salvestatakse andmebaasi nime 'epk10t_grid' alla.
+
+create_epk10t_grid <- function() {
+  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
+  algorithm <- "grass7:v.mkgrid"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    "-h" = 0,
+    "-p" = 0,
+    GRASS_OUTPUT_TYPE_PARAMETER = 0,
+    GRASS_REGION_PARAMETER = "",
+    GRASS_VECTOR_DSCO = "",
+    GRASS_VECTOR_EXPORT_NOCAT = 0,
+    GRASS_VECTOR_LCO = "",
+    angle = 0,
+    box = "5000,5000", # 5x5 km
+    breaks = 0,
+    coordinates = "300000,6300000 [EPSG:3301]",
+    grid = "80,100", # ridade ja veergude arv
+    map = "tmp/epk10t_grid.gpkg",
+    position = 0,
+    .quiet = TRUE
+  )
+  # result
+  epk10t_grid <- sf::read_sf(qgisprocess::qgis_output(result, "map"))
+  sf::st_geometry(epk10t_grid) %>% plot()
+  conf <- ruut::get_config()
+  conf$table <- "epk10t_grid"
+  conf$schema <- "maaamet"
+  ruut::copy_qgis_object_to_db(
+    x = result, conf = conf, geometry_type = "POLYGON",
+    crs_source = "EPSG:3301"
+  )
+  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
+}
+# create_epk10t_grid()

+ 40 - 0
geomeetria_teisendused/create_epk10t_grid_to_pk_bb.R

@@ -0,0 +1,40 @@
+#' Funktsioon: piirkonna EPSG:3301 piirikasti sisse ruudustiku genereerimine
+#' Piirikastis paiknevate 5x5 km ruudustike leidmine. Fail salvestatakse
+#' andmebaasi laiendiga 'piirkond_epk10t_grid'.
+
+create_epk10t_grid_to_pk_bb <- function(obj) {
+  # obj - objekti nimetus (näiteks: valga)
+  ## a. ruutvõrgustiku konstrueerimine
+  # ruut::qgis_algorithm_search_by_word(str = "joinattributesbylocation")
+  algorithm <- "native:joinattributesbylocation"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    DISCARD_NONMATCHING = 1,
+    INPUT = 'postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable password=\'osm\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"(SELECT * FROM maaamet.epk10t_grid )\" (geometry)',
+    JOIN = sprintf('postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable password=\'osm\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"(SELECT * FROM xxx_artikkel_210127.%s_bb )\" (geometry)', obj),
+    JOIN_FIELDS = c("id"),
+    METHOD = 0,
+    PREDICATE = c(0, 1),
+    PREFIX = "",
+    OUTPUT = qgisprocess::qgis_tmp_vector(),
+    NON_MATCHING = qgisprocess::qgis_tmp_vector(),
+    .quiet = TRUE
+  )
+  result
+  ## !!!!!!!! NB !!!!!!!!
+  ## Siin on 2 objekti väljundiks 'OUTPUT' ja 'NON_MATCHING'. Peame valima
+  ## ainult ühe ja teisendama.
+  pk_grid <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
+  # sf::st_geometry(pk_grid) %>% plot()
+  # pk_grid_non <- sf::read_sf(qgisprocess::qgis_output(result, "NON_MATCHING"))
+  # sf::st_geometry(pk_grid_non) %>% plot()
+  ## b. kopeerimine andmebaasi laiendiga '_epk10t_grid'
+  conf <- ruut::get_config()
+  conf$table <- sprintf("%s_epk10t_grid", obj)
+  conf$schema <- "xxx_artikkel_210127"
+  result$NON_MATCHING <- NULL
+  result$JOINED_COUNT <- NULL
+  ruut::copy_qgis_object_to_db(x = result, conf = conf, geometry_type = "PROMOTE_TO_MULTI")
+  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
+}

+ 26 - 0
geomeetria_teisendused/create_epk200t_bb.R

@@ -0,0 +1,26 @@
+#' Funktsioon: epk200t (100x100km) kaardiruutudele piirikasti (boundary box) loomine
+#' Olemasolevatele ruutudele 'maaamet.epk200t' luuakse piirikast ning
+#' salvestatakse see tabelisee nimega 'maaamet.epk200t_bb'.
+
+create_epk200t_bb <- function() {
+  # ruut::qgis_algorithm_search_by_word(str = "bounding")
+  algorithm <- "qgis:minimumboundinggeometry"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    FIELD = "",
+    INPUT = 'postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable password=\'osm\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"maaamet\".\"epk200t\" (geometry)',
+    TYPE = 3,
+    OUTPUT = qgisprocess::qgis_tmp_vector(),
+    .quiet = TRUE
+  )
+  # result
+  epk200t_bb <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
+  sf::st_geometry(epk200t_bb) %>% plot()
+  conf <- ruut::get_config()
+  conf$table <- "epk200t_bb"
+  conf$schema <- "maaamet"
+  ruut::copy_qgis_object_to_db(x = result, conf = conf, geometry_type = "POLYGON")
+  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
+}
+# create_epk200t_bb()

+ 40 - 0
geomeetria_teisendused/create_epk200t_grid.R

@@ -0,0 +1,40 @@
+#  Võrgustike genereerimine ja salvestamine andmebaasi
+#' Funktsioon gnereerib kogu Eestit katva ruudustike piirikasti
+#' 'maaamet.epk200t_bb' sisse ruutvõrgustiku ruudu suurusega 100x100 km.
+#' Võrgustik salvestatakse andmebaasi nime 'epk200t_grid' alla.
+
+create_epk200t_grid <- function() {
+  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
+  algorithm <- "grass7:v.mkgrid"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    "-h" = 0,
+    "-p" = 0,
+    GRASS_OUTPUT_TYPE_PARAMETER = 0,
+    GRASS_REGION_PARAMETER = "",
+    GRASS_VECTOR_DSCO = "",
+    GRASS_VECTOR_EXPORT_NOCAT = 0,
+    GRASS_VECTOR_LCO = "",
+    angle = 0,
+    box = "100000,100000",
+    breaks = 0,
+    coordinates = "300000,6300000 [EPSG:3301]",
+    grid = "4,5",
+    map = "tmp/epk200t_grid.gpkg",
+    position = 0,
+    .quiet = TRUE
+  )
+  # result
+  epk200t_grid <- sf::read_sf(qgisprocess::qgis_output(result, "map"))
+  sf::st_geometry(epk200t_grid) %>% plot()
+  conf <- ruut::get_config()
+  conf$table <- "epk200t_grid"
+  conf$schema <- "maaamet"
+  ruut::copy_qgis_object_to_db(
+    x = result, conf = conf, geometry_type = "POLYGON",
+    crs_source = "EPSG:3301"
+  )
+  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
+}
+# create_epk200t_grid()

+ 40 - 0
geomeetria_teisendused/create_epk2t_grid.R

@@ -0,0 +1,40 @@
+#  Võrgustike genereerimine ja salvestamine andmebaasi
+#' Funktsioon gnereerib kogu Eestit katva ruudustike piirikasti
+#' 'maaamet.epk200t_bb' sisse ruutvõrgustiku ruudu suurusega 1x1 km.
+#' Võrgustik salvestatakse andmebaasi nime 'epk2t_grid' alla.
+
+create_epk2t_grid <- function() {
+  # ruut::qgis_algorithm_search_by_word(str = "v.mkgrid")
+  algorithm <- "grass7:v.mkgrid"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    "-h" = 0,
+    "-p" = 0,
+    GRASS_OUTPUT_TYPE_PARAMETER = 0,
+    GRASS_REGION_PARAMETER = "",
+    GRASS_VECTOR_DSCO = "",
+    GRASS_VECTOR_EXPORT_NOCAT = 0,
+    GRASS_VECTOR_LCO = "",
+    angle = 0,
+    box = "1000,1000",
+    breaks = 0,
+    coordinates = "300000,6300000 [EPSG:3301]",
+    grid = "400,500",
+    map = "tmp/epk2t_grid.gpkg",
+    position = 0,
+    .quiet = TRUE
+  )
+  # result
+  # epk2t_grid <- sf::read_sf(qgisprocess::qgis_output(result, "map"))
+  # sf::st_geometry(epk2t_grid) %>% plot()
+  conf <- ruut::get_config()
+  conf$table <- "epk2t_grid"
+  conf$schema <- "maaamet"
+  ruut::copy_qgis_object_to_db(
+    x = result, conf = conf, geometry_type = "POLYGON",
+    crs_source = "EPSG:3301"
+  )
+  cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
+}
+create_epk2t_grid()

+ 20 - 0
geomeetria_teisendused/create_pk_epk10t.R

@@ -0,0 +1,20 @@
+#' Funktsioon: piirkonna piiri katvate epk10t (5x5km) ruutude loomine
+#' Valitud objekti järele leitakse milliste ruutude 'maaamet.epk10t' sees
+#' asub valitud piirkond.
+
+create_pk_epk10t <- function(obj) {
+  # obj - objekti nimetus (näiteks: valga)
+  # ruut::qgis_algorithm_search_by_word(str = "extract")
+  algorithm <- "native:extractbylocation"
+  # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
+  result <- qgisprocess::qgis_run_algorithm(
+    algorithm = algorithm,
+    INPUT = 'postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable password=\'osm\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"maaamet\".\"epk10t\" (geometry)',
+    INTERSECT = sprintf('postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable password=\'osm\' key=\'ogc_fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"xxx_artikkel_210127\".\"%s_piir\" (geometry)', obj),
+    OUTPUT = qgisprocess::qgis_tmp_vector(),
+    PREDICATE = c(0, 1),
+    .quiet = TRUE
+  )
+  result
+}
+# create_pk_epk10t(obj = objektid[i])

+ 10 - 0
geomeetria_teisendused/pk_epk10t.R

@@ -0,0 +1,10 @@
+#' Funktsioon: piirkonna piiri katvate epk10t (5x5km) ruutude lugemine
+
+pk_epk10t <- function(obj) {
+  # obj - objekti nimetus (näiteks: valga)
+  conn <- ruut::db_connect()
+  q <- sprintf("SELECT * FROM %s.%s_epk10t", conf$schema, tolower(obj))
+  cat(sprintf("\n-----------------\n%s\n\n", q))
+  sf::st_read(conn, query = q)
+}
+# pk_epk10t(obj = "valga")

+ 12 - 0
geomeetria_teisendused/pk_piir.R

@@ -0,0 +1,12 @@
+#' Funktsioon: piirkonna piir.
+#' Piirkonna piiri lugemiseks andmebaasist. Piir peab olema varem salvestatud
+#' nimega 'piirkond_piir'.
+
+pk_piir <- function(obj) {
+  # obj - objekti nimetus (näiteks: valga)
+  conn <- ruut::db_connect()
+  q <- sprintf("SELECT * FROM %s.%s_piir", conf$schema, tolower(obj))
+  cat(sprintf("\n-----------------\n%s\n\n", q))
+  sf::st_read(conn, query = q)
+}
+# pk_piir(obj = "valga")