#' 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")) }