10_piirkonnale_maatriksi_loomine.R 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #' Maatriksi loomine
  2. #'
  3. #' Etteantud piirkonna geomeetrilise piirjoone ('piir') järele leitakse selle piirkonna EPSG:3301 projektsioonile vastav piirikast ('boundarybox_3301'). Piirikasti järele leitakse selle kastiga kaetud 5x5 km ('epk10t_grid'), 1x1 km ('epk2t_grid') ja 100x100 meetrit ('epk02t_grid') ruudustikud. Samuti leitakse piirkonna piiri sees olevad ja statistilist ning muud infot sisaldavad 5x5 km ('epk10t') ja 1x1 km ('epk2t') sisaldavad ruudu. Andmed salvestatakse GPKG faili kihtidena. Faili nimeks on objekti nimi.
  4. #'
  5. #' @param obj str Objekti nimi.
  6. #' @param pk Piirkonna geomeetriline joon.
  7. #' @param gpkg_home path Salvestatavate GPKG faili asukoht.
  8. #' @param obj_only TRUE/FALSE Kas geomeetriad leitakse ainult objekti või kogu piirikastiga määratud ala jaoks.
  9. #'
  10. #'
  11. piirkonnale_maatriksi_loomine <- function(obj = NULL, pk = NULL, gpkg_home = "/tmp", obj_only = TRUE) {
  12. if (!kas_on_piirkond(obj = obj, pk = pk)) {
  13. return()
  14. }
  15. ## Algandmed
  16. dsn <- sprintf("%s/%s.gpkg", gpkg_home, obj) # Polygon
  17. layer <- "bb_epk02t_grid"
  18. dsn_info <- sf::st_layers(dsn = dsn)
  19. ## Loeme andmebaasist piiri ja piirikasti.
  20. # Layers list
  21. gpkg_info <- sf::st_layers(dsn = dsn)
  22. layer_names <- gpkg_info$name
  23. for (layer_name in layer_names) {
  24. cat(sprintf("\n%s", layer_name))
  25. assign(layer_name, sf::read_sf(dsn = dsn, layer = layer_name))
  26. }
  27. # Valge piirikast
  28. sf::st_geometry(bb) %>% plot(border = 0, lwd = 0.3, col = "#ffffff")
  29. # Must piir
  30. sf::st_geometry(piir) %>% plot(add = T, border = 3, lwd = 0.3, col = "#63fffb")
  31. sf::st_geometry(bb) %>% plot(border = 3, lwd = 0.3, col = "#d3fffb")
  32. sf::st_geometry(bb_epk02t_grid) %>% plot(border = 3, lwd = 0.3, col = "#d3fffb")
  33. sf::st_geometry(piir_epk02t_grid) %>% plot(add = T, border = 3, lwd = 0.3, col = "#a3fffb")
  34. sf::st_geometry(piir) %>% plot(add = T, border = 3, lwd = 0.3, col = "#63fffb")
  35. sp <- sf::read_sf(dsn = dsn, layer)
  36. sp$value <- 0
  37. unique(sp$left)
  38. unique(sp$bottom)
  39. length(sp$value)
  40. #
  41. # pk <- sf::st_transform(pk, sf::st_crs(sp))
  42. sf::st_geometry(sp) %>% plot()
  43. sf::st_geometry(pk) %>% plot(add = T)
  44. # 0 - intersect
  45. # 1 - contain
  46. # 2 - disjoint
  47. # 3 - equal
  48. # 4 - touch
  49. # 5 - overlap
  50. # 6 - are within
  51. # 7 - cross
  52. x <- sf::st_contains(pk, sp, sparse = TRUE)
  53. sp$value[x[[1]]] <- 1
  54. x[[1]]
  55. max(sp$value)
  56. sp
  57. if (length(x[[1]]) == 0) {
  58. cat("\n--------------\nAndmebaasis olev ruudustik ei kattu piirkonnaga.\nPalu genereeri eelnevalt piirikast\n funktsiooniga 'piirkonnale_ruudustike_lisamine()'.\n\n")
  59. return()
  60. }
  61. # plot(sp)
  62. # sf::st_geometry(sp) %>% plot()
  63. rows <- sort(unique(sp$bottom), decreasing = f)
  64. cols <- sort(unique(sp$left))
  65. length(rows)*length(cols)
  66. (m0 <- matrix(0L, nrow = length(rows), ncol = length(cols), byrow = F)) # 0-maatriks
  67. (m <- matrix(sp$value, nrow = length(rows), ncol = length(cols), byrow = F))
  68. > mat1.data <- c(1,2,3,4,5,6,7,8,9)
  69. > mat1 <- matrix(mat1.data,nrow=3,ncol=3,byrow=TRUE)
  70. > mat1
  71. # colnames(m) <- paste0("X",cols)
  72. # rownames(m) <- paste0("Y",rows)
  73. # m["802","3480"]<- 100
  74. cat("\n---------------\nTagastati maatriks.\n")
  75. m
  76. }
  77. # piirkonnale_maatriksi_loomine(obj = obj, pk = pk, gpkg_home = gpkg_home, obj_only = TRUE)