create_boundarybox_3301_to_pk.R 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #' Funktsioon: piirikasti leidmine piirkonnale
  2. #' Piirikast leitakse 2-astmelisena. Esmalt genereeritakse piirkonna
  3. #' peale projektsiooniga EPSG:3301 ruutvõrgustik suurusega 500x500 meetrit, seda
  4. #' arvestusega, et teises etapis leitavast piirikastist ei jääks välja
  5. #' arvestatav osa 1x1 km ruutusid. Need ruudud saavad hiljem aluseks map algebra
  6. #' piirkonna maatriksitele. Teises etapis leitakse ruudustikele piirikast,
  7. #' mis on piirkonna ristiklülikukujuline piirikast projektsioonis EPSG:3301.
  8. create_boundarybox_3301_to_pk <- function(obj) {
  9. # obj - objekti nimetus (näiteks: valga)
  10. input <- sprintf(
  11. 'postgres://dbname=\'data\' host=localhost port=6432 user=\'osm\' sslmode=disable password=\'osm\' key=\'fid\' srid=4326 type=Polygon checkPrimaryKeyUnicity=\'1\' table=\"xxx_artikkel_210127\".\"%s_piir\" (geometry)',
  12. obj
  13. )
  14. ## a. ruutvõrgustiku konstrueerimine
  15. # ruut::qgis_algorithm_search_by_word(str = "grid")
  16. algorithm <- "native:creategrid"
  17. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  18. result <- qgisprocess::qgis_run_algorithm(
  19. algorithm = algorithm,
  20. CRS = "EPSG:3301",
  21. # EXTENT = '25.454305528,26.259893095,59.454118579,59.714621582 [EPSG:4326]',
  22. EXTENT = input,
  23. HOVERLAY = 0,
  24. HSPACING = 500,
  25. TYPE = 2,
  26. VOVERLAY = 0,
  27. VSPACING = 500,
  28. OUTPUT = qgisprocess::qgis_tmp_vector(),
  29. .quiet = TRUE
  30. )
  31. result
  32. pk_grid <- sf::read_sf(qgisprocess::qgis_output(result, "OUTPUT"))
  33. # sf::st_geometry(pk_grid) %>% plot()
  34. ## b. ruutvõrgustikule piirikasti leidmine
  35. # ruut::qgis_algorithm_search_by_word(str = "minimumboundinggeometry")
  36. algorithm <- "qgis:minimumboundinggeometry"
  37. # cat(qgisprocess::qgis_show_help(algorithm = algorithm))
  38. result1 <- qgisprocess::qgis_run_algorithm(
  39. algorithm = algorithm,
  40. FIELD = "",
  41. INPUT = pk_grid,
  42. TYPE = 3,
  43. OUTPUT = qgisprocess::qgis_tmp_vector(),
  44. .quiet = TRUE
  45. )
  46. result1
  47. # pk_grid_bb <- sf::read_sf(qgisprocess::qgis_output(result1, "OUTPUT"))
  48. # sf::st_geometry(pk_grid_bb) %>% plot()
  49. ## c. kopeerimine andmebaasi laiendiga '_bb'
  50. conf <- ruut::get_config()
  51. conf$table <- sprintf("%s_bb", obj)
  52. conf$schema <- "xxx_artikkel_210127"
  53. ruut::copy_qgis_object_to_db(x = result1, conf = conf, geometry_type = "POLYGON", crs_source = "EPSG:3301")
  54. cat(sprintf("\n-----------------\nAlgoritm: %s valmis.\n\n", algorithm))
  55. }
  56. # create_boundarybox_3301_to_pk()