Nothing
#' Le os dados espaciais de precariedade viaria
#'
#' Conecta-se aos arquivos Parquet em cache usando lazy evaluation
#' atraves do Apache Arrow. Pode funcionar totalmente offline se o diretorio local for fornecido.
#'
#' @param uf Sigla do estado (ex: "RS"), ou "all" para o Brasil inteiro. Padrao "all".
#' @param code_muni (Opcional) Codigo IBGE do municipio com 7 digitos (ex: 4314902).
#' @param dir_local (Opcional) Caminho para uma pasta no computador contendo os arquivos Parquet.
#' @return Um objeto \code{ArrowDataset}. Para renderizar mapas, converta a geometria
#' WKB para \code{sf} executando: \code{st_as_sf(dados, wkb_column = "geometry_wkb")}.
#' @importFrom rlang .data
#' @export
#' @examples
#' if (arrow::codec_is_available("zstd")) {
#' dados_ac <- read_precvias(uf = "AC")
#' dados_rb <- read_precvias(code_muni = 1200401) |> dplyr::collect()
#' }
#'
read_precvias <- function(uf = "all", code_muni = NULL, dir_local = NULL) {
mapa_prefixos <- c("11"="RO", "12"="AC", "13"="AM", "14"="RR", "15"="PA",
"16"="AP", "17"="TO", "21"="MA", "22"="PI", "23"="CE",
"24"="RN", "25"="PB", "26"="PE", "27"="AL", "28"="SE",
"29"="BA", "31"="MG", "32"="ES", "33"="RJ", "35"="SP",
"41"="PR", "42"="SC", "43"="RS", "50"="MS", "51"="MT",
"52"="GO", "53"="DF")
if (!is.null(code_muni)) {
code_muni <- as.character(code_muni)
prefixo <- substr(code_muni, 1, 2)
if (!prefixo %in% names(mapa_prefixos)) stop("Codigo IBGE invalido.")
uf <- mapa_prefixos[[prefixo]]
}
uf <- toupper(uf)
if (!is.null(dir_local)) {
if (!dir.exists(dir_local)) stop("O diretorio local informado nao existe.")
if (uf == "ALL") {
caminho_dados <- dir_local
} else {
caminho_dados <- file.path(dir_local, sprintf("malha_precariedade_%s.parquet", uf))
if (!file.exists(caminho_dados)) stop(sprintf("Arquivo nao encontrado na pasta local.", basename(caminho_dados)))
}
message("Modo offline: Lendo arquivos do diretorio local...")
} else {
caminho_dados <- download_precvias(uf)
}
ds <- arrow::open_dataset(caminho_dados) |>
dplyr::mutate(
name_via = dplyr::coalesce(.data$name_via, "Via sem nome oficial")
)
if (!is.null(code_muni)) {
ds <- ds |>
dplyr::filter(startsWith(as.character(.data$code_tract), code_muni))
}
return(ds)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.