00_piirkonna_piirikast_100_meetri_joontel.R 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #' Piirkonnale piirikast leidmine
  2. #'
  3. #' 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.
  4. #'
  5. #' @param pk Piirkonna geomeetriline joon.
  6. #' @return Polygon.
  7. #' @seealso [ruut::get_config()]
  8. #' @keywords boundary box, EPSG:3301
  9. #' @export
  10. #' @examples
  11. #' \dontrun{
  12. #'
  13. #' pk_grid <- piirkonna_piirikast_100_meetri_joontel(pk = pk)
  14. #' sf::st_geometry(pk_grid) %>% plot()
  15. #' }
  16. piirkonna_piirikast_100_meetri_joontel <- function(pk = NULL) {
  17. if (is.null(pk) || !sf::st_is_valid(pk)) {
  18. cat("\nPalun kontrolli geomeetrilise kujundi õigsust.\n")
  19. return(FALSE)
  20. }
  21. # teisendame projektsiooni
  22. # sf::st_crs(3301)
  23. pk <- sf::st_transform(pk, 3301)
  24. pk_attributes <- attributes(pk$geometry)
  25. ## konstrueerime EXTENT, HSPACING ja VSPACING väärtused.
  26. 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)
  27. hspacing <- (ceiling((pk_attributes$bbox["xmax"] / 100)) * 100) - (round((pk_attributes$bbox["xmin"] / 100), digits = 0) * 100)
  28. vspacing <- (ceiling((pk_attributes$bbox["ymax"] / 100)) * 100) - (round((pk_attributes$bbox["ymin"] / 100), digits = 0) * 100)
  29. ## -------------------- piirikast ------------------
  30. # ruut::qgis_algorithm_search_by_word(str = "grid")
  31. algorithm <- "native:creategrid"
  32. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  33. result <- qgisprocess::qgis_run_algorithm(
  34. algorithm = algorithm,
  35. CRS = "EPSG:3301",
  36. EXTENT = extent,
  37. HOVERLAY = 0,
  38. HSPACING = hspacing,
  39. TYPE = 2,
  40. VOVERLAY = 0,
  41. VSPACING = vspacing,
  42. OUTPUT = qgisprocess::qgis_tmp_file(ext = ".gpkg")
  43. # .quiet = TRUE
  44. )
  45. # result
  46. sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
  47. }