## ----get-bbox, eval = FALSE--------------------------------------------------- # library (osmdata) # # bb <- getbb ("Southeastern Connecticut COG", featuretype = "boundary") # bb ## ----out1, eval = FALSE------------------------------------------------------- # #> min max # #> x -72.46677 -71.79315 # #> y 41.27591 41.75617 ## ----bbox-split, eval = FALSE------------------------------------------------- # dx <- (bb ["x", "max"] - bb ["x", "min"]) / 2 # # bbs <- list (bb, bb) # # bbs [[1]] ["x", "max"] <- bb ["x", "max"] - dx # bbs [[2]] ["x", "min"] <- bb ["x", "min"] + dx # # bbs ## ----out2, eval = FALSE------------------------------------------------------- # #> [[1]] # #> min max # #> x -72.46677 -72.12996 # #> y 41.27591 41.75617 # #> # #> [[2]] # #> min max # #> x -72.12996 -71.79315 # #> y 41.27591 41.75617 ## ----opq-2x, eval = FALSE----------------------------------------------------- # res <- list () # # res [[1]] <- opq (bbox = bbs [[1]]) |> # add_osm_feature (key = "admin_level", value = "8") |> # osmdata_sf () # res [[2]] <- opq (bbox = bbs [[2]]) |> # add_osm_feature (key = "admin_level", value = "8") |> # osmdata_sf () ## ----opq-merge, eval = FALSE-------------------------------------------------- # res <- c (res [[1]], res [[2]]) ## ----bbox-auto-split, eval = FALSE-------------------------------------------- # split_bbox <- function (bbox, grid = 2, eps = 0.05) { # xmin <- bbox ["x", "min"] # ymin <- bbox ["y", "min"] # dx <- (bbox ["x", "max"] - bbox ["x", "min"]) / grid # dy <- (bbox ["y", "max"] - bbox ["y", "min"]) / grid # # bboxl <- list () # # for (i in 1:grid) { # for (j in 1:grid) { # b <- matrix (c ( # xmin + ((i - 1 - eps) * dx), # ymin + ((j - 1 - eps) * dy), # xmin + ((i + eps) * dx), # ymin + ((j + eps) * dy) # ), # nrow = 2, # dimnames = dimnames (bbox) # ) # # bboxl <- append (bboxl, list (b)) # } # } # bboxl # } ## ----bbox-pre-split, eval = FALSE--------------------------------------------- # bb <- getbb ("Connecticut", featuretype = NULL) # queue <- split_bbox (bb) # result <- list () ## ----auto-query, eval = FALSE------------------------------------------------- # while (length (queue) > 0) { # # print (queue [[1]]) # # opres <- NULL # opres <- try ({ # opq (bbox = queue [[1]], timeout = 25) |> # add_osm_feature (key = "natural", value = "tree") |> # osmdata_sf () # }) # # if (class (opres) [1] != "try-error") { # result <- append (result, list (opres)) # queue <- queue [-1] # } else { # bboxnew <- split_bbox (queue [[1]]) # queue <- append (bboxnew, queue [-1]) # } # } ## ----merge-result-list, eval = FALSE------------------------------------------ # final <- do.call (c, result)