Ver Fonte

Lisatud 'piirkonna_piirikast_100_meetri_joontel'.

Ardo Kubjas há 5 anos atrás
pai
commit
137406cd6a
1 ficheiros alterados com 48 adições e 0 exclusões
  1. 48 0
      gpkg/00_piirkonna_piirikast_100_meetri_joontel.R

+ 48 - 0
gpkg/00_piirkonna_piirikast_100_meetri_joontel.R

@@ -0,0 +1,48 @@
+#' Piirkonnale piirikast leidmine
+#'
+#' Geomeetrilise joonega piiratud piirkonnale piirikast leidmine, nii et see asuks koordinaatsüsteemi 'EPSG:3301' 100 meetri joontel ja kujund peab asuma täielikult piirikasti sees. Selline piirikast on vajalik 100x100 meetri suuruste ruutude leidmiseks.
+#'
+#' @param pk Piirkonna geomeetriline joon.
+#' @return Polygon.
+#' @seealso [ruut::get_config()]
+#' @keywords boundary box, EPSG:3301
+#' @export
+#' @examples
+#' \dontrun{
+#'
+#' pk_grid <- piirkonna_piirikast_100_meetri_joontel(pk = pk)
+#' sf::st_geometry(pk_grid) %>% plot()
+#' }
+piirkonna_piirikast_100_meetri_joontel <- function(pk = NULL) {
+  if (is.null(pk) || !sf::st_is_valid(pk)) {
+    cat("\nPalun kontrolli geomeetrilise kujundi õigsust.\n")
+    return(FALSE)
+  }
+  # teisendame projektsiooni
+  # sf::st_crs(3301)
+  pk <- sf::st_transform(pk, 3301)
+  pk_attributes <- attributes(pk$geometry)
+  ## konstrueerime EXTENT, HSPACING ja VSPACING väärtused.
+  extent <- sprintf("%s,%s,%s,%s [EPSG:3301]", round((pk_attributes$bbox["xmin"] / 100), digits = 0) * 100, ceiling((pk_attributes$bbox["xmax"] / 100)) * 100, round((pk_attributes$bbox["ymin"] / 100), digits = 0) * 100, ceiling((pk_attributes$bbox["ymax"] / 100)) * 100)
+  hspacing <- (ceiling((pk_attributes$bbox["xmax"] / 100)) * 100) - (round((pk_attributes$bbox["xmin"] / 100), digits = 0) * 100)
+  vspacing <- (ceiling((pk_attributes$bbox["ymax"] / 100)) * 100) - (round((pk_attributes$bbox["ymin"] / 100), digits = 0) * 100)
+
+  ## -------------------- piirikast ------------------
+  # 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 = extent,
+    HOVERLAY = 0,
+    HSPACING = hspacing,
+    TYPE = 2,
+    VOVERLAY = 0,
+    VSPACING = vspacing,
+    OUTPUT = qgisprocess::qgis_tmp_file(ext = ".gpkg")
+    # .quiet = TRUE
+  )
+  # result
+  sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
+}