Selaa lähdekoodia

Vahekoopia ja lisatud uusi geomeetriate teisendusi.

Ardo Kubjas 5 vuotta sitten
vanhempi
sitoutus
7137a3d6b0

+ 36 - 21
00_algandmed.R

@@ -16,32 +16,60 @@ source("01_funktsioonid.R")
 conf <- ruut::get_config()
 conf$schema <- "xxx_artikkel_210127"
 ruut::db_create_new_schema(conf = conf)
+
+
 # Objektide nimekiri
 objektid <- c("valga", "matsalu", "lahemaa")
-# Objektide piirjooned
 
-# ----------------- Valitud piirkond -----------------
+# ----------------- Loe piirkond (objekt) -----------------
 ## Piirkonna 'pk'
 conn <- ruut::db_connect(conf = conf)
 ## Valitud objekti indeks
-i <- 3
+i <- 1
 
 ## 1. piirkonna piir
 pk <- pk_piir(obj = objektid[i])
 sf::st_geometry(pk) %>% plot()
-## 2. piirkonna epk10t ruudud
-epk10t <- pk_piir_bb(obj = objektid[i])
-sf::st_geometry(epk10t) %>% plot(border = 3, lwd = 0.3, col = "#d3fffb")
+## 2. piirkonna 3301 projektsiooniga piirikast
+conn <- ruut::db_connect()
+q <- sprintf("SELECT * FROM %s.%s_bb", "xxx_artikkel_210127", objektid[i])
+cat(sprintf("\n-----------------\n%s\n\n", q))
+pk_bb_3301 <- sf::st_read(conn, query = q)
+sf::st_geometry(pk) %>% plot()
+sf::st_geometry(pk_bb_3301) %>% plot(add = T)
+
+## 3. piirkonna epk10t ruudud
+# 3.1 kogu ruutvõrgustik
+epk10t_grid <- pk_epk10t_grid(obj = objektid[i])
+# 3.1 ainult piirkonna ruutvõrgustik
+epk10t <- pk_epk10t(obj = objektid[i])
+sf::st_geometry(epk10t_grid) %>% plot(border = 3, lwd = 0.3, col = "#d3fffb")
+sf::st_geometry(epk10t) %>% plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
+sf::st_geometry(pk) %>% plot(add = T)
+
+# 4 piirkonna epk10t kaardiruutude nimekiri ortofotode allalaadimiseks
+epk10t_nr <- pk_epk10t_ruutude_nimekiri(objektid[i])
+
+## 5. piirkonna epk2t ruudud
+# 3.1 kogu ruutvõrgustik
+epk2t_grid <- pk_epk2t_grid(obj = objektid[i])
+# 3.1 ainult piirkonna ruutvõrgustik
+epk2t <- pk_epk2t(obj = objektid[i])
+sf::st_geometry(epk2t_grid) %>% plot(border = 3, lwd = 0.3, col = "#d3fffb")
+sf::st_geometry(epk2t) %>% plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
 sf::st_geometry(pk) %>% plot(add = T)
-# 2.1 kaardiruutude nimekiri
-epk10t_nr <- epk10t$nr
 
+
+
+
+## -------------- Muud ruudustikega seotud demo joonised ----------------
 ## 2. Kaardiruudustiku epk200t (100x100km) piirikast
 conn <- ruut::db_connect()
 q <- sprintf("SELECT * FROM %s.%s", "maaamet", "epk200t_bb")
 cat(sprintf("\n-----------------\n%s\n\n", q))
 epk200t_bb <- sf::st_read(conn, query = q)
 sf::st_geometry(epk200t_bb) %>% plot()
+
 ## 3. Kaardiruudustiku epk200t (100x100km)
 conn <- ruut::db_connect()
 q <- sprintf("SELECT * FROM %s.%s", "maaamet", "epk200t")
@@ -49,16 +77,3 @@ cat(sprintf("\n-----------------\n%s\n\n", q))
 epk200t <- sf::st_read(conn, query = q)
 sf::st_geometry(epk200t) %>% plot(add = T, border = 3, lwd = 0.3, col = "#d3fffb")
 
-
-
-## 2. boundarybox
-# ----------------- Piirkonna BB leidmine -----------------
-## Piirkonna 'pk' Boundary Box.
-result <- ruut::pk_bbox(epk10t, type = 0)
-pk_bbox <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
-sf::st_geometry(pk_bbox) %>% plot(border = 2)
-sf::st_geometry(epk10t) %>% plot(add = T, border = "darkblue", lwd = 0.5, lty = 1.8)
-
-# -------------- export bbox to postgis database ---------------
-conf$table <- "bbox"
-ruut::copy_polygon_to_db(x = result, conf = conf, id = "fid")

+ 22 - 1
00_piirkonna_uute_geomeetriate_loomine.R

@@ -1,6 +1,8 @@
 #' Uute geomeetriliste joonte genereerimine ja salvestamine andmebaasi.
 #'
 
+source("01_funktsioonid.R")
+
 ## 1. Piirkonda katvate epk10t ruudud
 for (i in 1:length(objektid)) {
   cat(sprintf("\n-----------------\n%s\n\n", objektid[i]))
@@ -10,6 +12,15 @@ for (i in 1:length(objektid)) {
   conf$table <- sprintf("%s_epk10t", objektid[i])
   ruut::copy_qgis_object_to_db(x = result, conf = conf, geometry_type = "POLYGON")
 }
+## 1. Piirkonda katvate epk2t ruudud
+for (i in 1:length(objektid)) {
+  cat(sprintf("\n-----------------\n%s\n\n", objektid[i]))
+  result <- create_pk_epk2t(obj = objektid[i])
+  epk2t <- sf::read_sf(qgis_output(result, "OUTPUT"))
+  # sf::st_geometry(epk2t) %>% plot()
+  conf$table <- sprintf("%s_epk2t", objektid[i])
+  ruut::copy_qgis_object_to_db(x = result, conf = conf, geometry_type = "POLYGON")
+}
 
 ## 2. Ortofotode allalaadimine
 # kaardiruutude nimekiri
@@ -30,4 +41,14 @@ create_epk200t_bb()
 create_epk200t_grid() # 100x100 km
 create_epk10t_grid() # 5x5 km
 create_epk2t_grid() # 1x1 km
-create_epk02t_grid() # 100x100 m
+# create_epk02t_grid() # 100x100 m
+
+## 5. Piirkonna piirikastide + vastavate ruudustike loomine
+for (i in 1:length(objektid)) {
+  cat(sprintf("\n-----------------\n%s\n\n", objektid[i]))
+  create_boundarybox_3301_to_pk(obj = objektid[i])
+  create_epk10t_grid_to_pk_bb(obj = objektid[i])
+  create_epk2t_grid_to_pk_bb(obj = objektid[i])
+}
+
+## 6. Piirkonna piirikastide maatriksite loomine

+ 13 - 3
01_funktsioonid.R

@@ -3,14 +3,24 @@
 #'
 
 source("geomeetria_teisendused/pk_piir.R")
+source("geomeetria_teisendused/create_boundarybox_3301_to_pk.R")
+
+
+source("geomeetria_teisendused/create_epk10t_grid_to_pk_bb.R")
+source("geomeetria_teisendused/create_epk2t_grid_to_pk_bb.R")
 source("geomeetria_teisendused/create_pk_epk10t.R")
+source("geomeetria_teisendused/create_pk_epk2t.R")
 source("geomeetria_teisendused/pk_epk10t.R")
+source("geomeetria_teisendused/pk_epk2t.R")
+source("geomeetria_teisendused/pk_epk10t_grid.R")
+source("geomeetria_teisendused/pk_epk2t_grid.R")
+source("geomeetria_teisendused/pk_epk10t_ruutude_nimekiri.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")
-
 
 

+ 1 - 0
geomeetria_teisendused/create_epk10t_grid_to_pk_bb.R

@@ -38,3 +38,4 @@ create_epk10t_grid_to_pk_bb <- function(obj) {
   ruut::copy_qgis_object_to_db(x = result, conf = conf, geometry_type = "PROMOTE_TO_MULTI")
   cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
 }
+# create_epk10t_grid_to_pk_bb()

+ 1 - 1
geomeetria_teisendused/create_epk2t_grid.R

@@ -37,4 +37,4 @@ create_epk2t_grid <- function() {
   )
   cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
 }
-create_epk2t_grid()
+# create_epk2t_grid()

+ 41 - 0
geomeetria_teisendused/create_epk2t_grid_to_pk_bb.R

@@ -0,0 +1,41 @@
+#' Funktsioon: piirkonna EPSG:3301 piirikasti sisse ruudustiku genereerimine
+#' Piirikastis paiknevate 1x1 km ruudustike leidmine. Fail salvestatakse
+#' andmebaasi laiendiga 'piirkond_epk2t_grid'.
+
+create_epk2t_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.epk2t_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_epk2t_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))
+}
+# create_epk2t_grid_to_pk_bb()

+ 20 - 0
geomeetria_teisendused/create_pk_epk2t.R

@@ -0,0 +1,20 @@
+#' Funktsioon: piirkonna piiri katvate epk2t (5x5km) ruutude loomine
+#' Valitud objekti järele leitakse milliste ruutude 'maaamet.epk2t' sees
+#' asub valitud piirkond.
+
+create_pk_epk2t <- 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\".\"epk2t\" (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_epk2t(obj = objektid[i])

+ 10 - 0
geomeetria_teisendused/pk_epk10t_grid.R

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

+ 37 - 0
geomeetria_teisendused/pk_epk10t_ruutude_nimekiri.R

@@ -0,0 +1,37 @@
+#' Funktsioon: epk10t kaardiruutude nimekiri
+#' Vajalik ortofotode allalaadimiseks. Nimekiri käib piirkonna
+#' EPSG:3301 piirikasti kohta
+
+pk_epk10t_ruutude_nimekiri <- function(obj) {
+  # obj - objekti nimetus (näiteks: valga)
+  conn <- ruut::db_connect()
+  q <- sprintf("SELECT * FROM %s.%s_bb", conf$schema, tolower(obj))
+  cat(sprintf("\n-----------------\n%s\n\n", q))
+  sp <- sf::st_read(conn, query = q)
+
+  ## epk10t ruutvõrgustiku lugemine
+  # 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 )\" (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$nr
+}
+# pk_epk10t_ruutude_nimekiri(obj = "valga")

+ 10 - 0
geomeetria_teisendused/pk_epk2t.R

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

+ 10 - 0
geomeetria_teisendused/pk_epk2t_grid.R

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