#' Riigiteedevõrgu väljapääsupunktide leidmine #' #' 'Minu teed' andmestikest riigiteede väljapääsupunktide leidmine. #' #' @param conf A list() of configuration variables. Default values \code{\link[ruut]{get_config}}. #' @return No output. #' @seealso [ruut::get_config()], [ruut::copy_shp_to_db()], [estmap::minu_teed_riigiteed()], [estmap::minu_teed_muud_teed()], [estmap::minu_teed_eesti()], [estmap::minu_teed_riigiteed_valjapaasud()] #' @keywords postgis #' @export #' @examples #' \dontrun{ #' #' conf <- ruut::get_config() #' minu_teed_riigiteed_valjapaasud(conf = conf) #' } minu_teed_riigiteed_valjapaasud <- function(conf = NULL) { ## --------------------- muutujad ja teisendused ----------------------------- vars <- ajutised_muutujad(conf = conf) conf <- vars$conf # conf$schema <- "minu_teed" # conf$table <- "zzz" # output <- ruut::construct_to_gpkg_output_postgres_str(conf = conf, geometry_field = "geom") ## -------- 1.1 Kontrollime andmebaasis vajalike tabelite olemasolu ---------- tbl_names <- ruut::db_schema_tablenames(conf = conf) if (!all(c("teedevork_riigiteed", "teedevork_kt_p", "teedevork_kt_numbrita_p") %in% tbl_names)) { cat("\n------------------\nPuuduvad vajalikud andmebaasitabelid.\n") return(NULL) } ## -------------- 1.1 Muude teede lõikumispunkt riigiteedega ----------------- # ruut::qgis_algorithm_search_by_word("intersections") algorithm <- "native:lineintersections" # ruut::qgis_show_help(algorithm = algorithm) conf$schema <- "minu_teed" conf$table <- "teedevork_kt" input <- ruut::construct_to_gpkg_output_postgres_str( conf = conf, geometry_type = "MultiLineString", srid = 3301, checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom" ) conf$schema <- "minu_teed" conf$table <- "teedevork_riigiteed" intersect <- ruut::construct_to_gpkg_output_postgres_str( conf = conf, geometry_type = "MultiLineString", srid = 3301, checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom" ) output <- vars$tmp_gpkg_file_output_1 cmd <- sprintf("qgis_process run %s --INPUT='%s' --INPUT_FIELDS='tyyp' --INTERSECT='%s' --INTERSECT_FIELDS='id' --INTERSECT_FIELDS='tyyp_t' --INTERSECT_FIELDS='tee' --INTERSECT_FIELDS='nimetus' --INTERSECT_FIELDS_PREFIX=\"\" --OUTPUT='%s' ", algorithm, input, intersect, output) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output)) ## ------------ 1.2 Numbrita teede lõikumispunkt riigiteedega ---------------- # ruut::qgis_algorithm_search_by_word("intersections") algorithm <- "native:lineintersections" # ruut::qgis_show_help(algorithm = algorithm) conf$schema <- "minu_teed" conf$table <- "teedevork_kt_numbrita" input <- ruut::construct_to_gpkg_output_postgres_str( conf = conf, geometry_type = "MultiLineString", srid = 3301, checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom" ) conf$schema <- "minu_teed" conf$table <- "teedevork_riigiteed" intersect <- ruut::construct_to_gpkg_output_postgres_str( conf = conf, geometry_type = "MultiLineString", srid = 3301, checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom" ) output <- vars$tmp_gpkg_file_output_2 cmd <- sprintf("qgis_process run %s --INPUT='%s' --INPUT_FIELDS='tyyp' --INTERSECT='%s' --INTERSECT_FIELDS='id' --INTERSECT_FIELDS='tyyp_t' --INTERSECT_FIELDS='tee' --INTERSECT_FIELDS='nimetus' --INTERSECT_FIELDS_PREFIX=\"\" --OUTPUT='%s' ", algorithm, input, intersect, output) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output)) ## --------------------- 1.3 Ühendame lõikepunktid --------------------------- # ruut::qgis_algorithm_search_by_word("merge") algorithm <- "native:mergevectorlayers" # ruut::qgis_show_help(algorithm = algorithm) layer_1 <- vars$tmp_gpkg_file_input_1 layer_2 <- vars$tmp_gpkg_file_input_2 output <- vars$tmp_gpkg_file_output_3 cmd <- sprintf("qgis_process run native:mergevectorlayers --CRS='epsg:3301' --LAYERS='%s' --LAYERS='%s' --OUTPUT='%s' ", layer_1, layer_2, output) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output)) ## ------------------ 1.4 Kustutame ebaolulised väljad ----------------------- # ruut::qgis_algorithm_search_by_word("delete") algorithm <- "native:deletecolumn" # ruut::qgis_show_help(algorithm = algorithm) input <- vars$tmp_gpkg_file_input_3 output <- vars$tmp_gpkg_file_output_4 cmd <- sprintf("qgis_process run %s --COLUMN='id' --COLUMN='layer' --COLUMN='path' --INPUT='%s' --OUTPUT='%s' ", algorithm, input, output) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output)) ## ------------------ 1.5 Copy temp gpkg file to postgis --------------------- conf$schema <- "minu_teed" conf$table <- "teedevork_exits_muud_teed" PG <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf) cmd <- sprintf("ogr2ogr -progress --config PG_USE_COPY YES -f PostgreSQL %s -lco DIM=2 %s %s -overwrite -nlt %s -lco GEOMETRY_NAME=geom -lco FID=id -nln %s.%s -nlt PROMOTE_TO_MULTI", PG, vars$tmp_gpkg_file, vars$layer_4, "POINT", conf$schema, conf$table) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", conf$table)) ## ------------ 1.6 Riigiteede omavahelised lõikumispunktd ------------------- # ruut::qgis_algorithm_search_by_word("intersections") algorithm <- "native:lineintersections" # ruut::qgis_show_help(algorithm = algorithm) conf$schema <- "minu_teed" conf$table <- "teedevork_riigiteed" input <- ruut::construct_to_gpkg_output_postgres_str( conf = conf, geometry_type = "MultiLineString", srid = 3301, checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom" ) conf$schema <- "minu_teed" conf$table <- "teedevork_riigiteed" intersect <- ruut::construct_to_gpkg_output_postgres_str( conf = conf, geometry_type = "MultiLineString", srid = 3301, checkPrimaryKeyUnicity = TRUE, key = "id", geometry_field = "geom" ) output <- vars$tmp_gpkg_file_output_1 cmd <- sprintf("qgis_process run %s --INPUT='%s' --INPUT_FIELDS='tyyp' --INTERSECT='%s' --INTERSECT_FIELDS='id' --INTERSECT_FIELDS='tyyp_t' --INTERSECT_FIELDS='tee' --INTERSECT_FIELDS='nimetus' --INTERSECT_FIELDS_PREFIX=\"\" --OUTPUT='%s' ", algorithm, input, intersect, output) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output)) ## ------------------ 1.7 Kustutame ebaolulised väljad ----------------------- # ruut::qgis_algorithm_search_by_word("delete") algorithm <- "native:deletecolumn" # ruut::qgis_show_help(algorithm = algorithm) input <- vars$tmp_gpkg_file_input_1 output <- vars$tmp_gpkg_file_output_2 cmd <- sprintf("qgis_process run %s --COLUMN='id' --COLUMN='layer' --COLUMN='path' --INPUT='%s' --OUTPUT='%s' ", algorithm, input, output) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", output)) ## ------------------ 1.8 Copy temp gpkg file to postgis --------------------- conf$schema <- "minu_teed" conf$table <- "teedevork_exits_riigiteed" PG <- ruut::construct_ogr2ogr_PG_connect_str(conf = conf) cmd <- sprintf("ogr2ogr -progress --config PG_USE_COPY YES -f PostgreSQL %s -lco DIM=2 %s %s -overwrite -nlt %s -lco GEOMETRY_NAME=geom -lco FID=id -nln %s.%s -nlt PROMOTE_TO_MULTI", PG, vars$tmp_gpkg_file, vars$layer_2, "POINT", conf$schema, conf$table) system(cmd) cat(sprintf("\n-------------\nLoodi andmebaas '%s'.\n", conf$table)) }