R/read_precvias.R

Defines functions read_precvias

Documented in read_precvias

#' 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)
}

Try the precviasBR package in your browser

Any scripts or data that you put into this service are public.

precviasBR documentation built on May 6, 2026, 1:07 a.m.