Como ler arquivos .shp diretamente do Google Drive (flexdashboard)

Olá pessoal!

Construí um painel de dados (usando o pacote flexdashboard) que apresenta mapas de distribuição de espécies ameaçadas de aves e parques eólicos, além de outras camadas de interesse. Estou tentando hospedá-lo no github, mas estou enfrentando problemas devido ao grande tamanho dos arquivos de dados espaciais.

Pensei que talvez eu pudesse manter os arquivos grandes de dados em um repositório gratuito e lê-los diretamente do repositório usando algum pacote disponível.

Usei o pacote ‘gsheet’ para ler parte dos dados (algumas tabelas em formato .xlsx ou .csv) e funcionou.

r

install.packages('gsheet')

library(gsheet)

dados <- gsheet2tbl ('https://drive.google.com/open?id=1tgvOoEMkHRgNTVuHdlO3DikH0cEGsL0X')

View(dados)

Mas não encontrei nenhuma maneira de ler os arquivos mais pesados (no formato .shp) diretamente do Google Drive o de outro repositório gratuito qualquer.

Alguém teria alguma dica ou ideia de como eu poderia resolver o problema?

Agradeço antecipadamente por qualquer ajuda.

Arlindo

Olá! Experimente o pacote {googledrive}.

Exemplo:

u <- "https://drive.google.com/file/d/1Hv3CIoYSTWff4g_RJohc-UCQUsRp_RhU/view?usp=sharing"

arquivo_temporario <- fs::file_temp("shp", ext = ".zip")
pasta_do_arquivo_temporario <- dirname(arquivo_temporario)
googledrive::drive_download(u, arquivo_temporario)
#> → Using an auto-discovered, cached token
#>   To suppress this message, modify your code or options to clearly consent to the
#>   use of a cached token
#>   See gargle's "Non-interactive auth" vignette for more details:
#>   <https://gargle.r-lib.org/articles/non-interactive-auth.html>
#> → The googledrive package is using a cached token for julio.trecenti@gmail.com
#> File downloaded:
#>   * datageo.zip
#> Saved locally as:
#>   * /tmp/RtmpPMgz76/shp110166db1658d.zip
unzip(arquivo_temporario, exdir = pasta_do_arquivo_temporario)

dados <- sf::read_sf(pasta_do_arquivo_temporario,
                     options = "ENCODING=WINDOWS-1252")
dados
#> Simple feature collection with 463 features and 5 fields
#> Geometry type: POINT
#> Dimension:     XY
#> Bounding box:  xmin: -53.00611 ymin: -24.72889 xmax: -44.77389 ymax: -19.84861
#> Geodetic CRS:  SIRGAS 2000
#> # A tibble: 463 x 6
#>    Codigo  Corpo_Dagu    KLOCAL            Valor Classe                 geometry
#>    <chr>   <chr>         <chr>             <int> <chr>               <POINT [°]>
#>  1 ABAN02… Córrego Água… Ponte na Rod. Mu…    63 Boa       (-47.85306 -22.23111)
#>  2 ABRA02… Ribeirão Águ… Ponte na Av. Pri…    60 Boa       (-45.36833 -23.81944)
#>  3 ACLA00… Reservatório… No Pier do Reser…    82 Ótima     (-46.65833 -23.39778)
#>  4 AGUA02… Rio Aguapeí … Ponte na SP-425 …    67 Boa       (-50.58917 -21.67639)
#>  5 AGUA02… Rio Aguapeí … Ponte que liga T…    71 Boa       (-51.49778 -21.22083)
#>  6 AGUA02… Rio Aguapeí … Ponte na Rodovia…    71 Boa       (-49.67556 -21.92139)
#>  7 AGUA02… Rio Aguapeí … Ponte na rodovia…    72 Boa       (-51.01444 -21.43194)
#>  8 ALIM02… Ribeirão da … Junto a sua foz,…    41 Regul…    (-44.94972 -22.56583)
#>  9 ANCO02… Rio Branco    Na ponte da Rodo…    55 Boa       (-46.46444 -23.93472)
#> 10 APIA02… Rio Apiaí-Gu… Ponte na Rod. SP…    70 Boa        (-48.65611 -23.9275)
#> # … with 453 more rows

Created on 2021-04-11 by the reprex package (v2.0.0)

1 Curtida

Caro Júlio,

Obrigado pela dica. O script funcionou perfeitamente e consegui ler os arquivos no formato .shp armazenados no googledrive. Entretanto, ocorreu um erro no momento da renderização do código:

r
Error in if (length(nms) != n || any(nms == "")) stop("'options' must be a fully named list, or have no names (NULL)") : valor ausente onde TRUE/FALSE necessário

Pelo que pesquisei, parece ser uma incompatibilidade entre o pacote sf (Simple Features) e a função addPolygons() do pacote Leaflet. Se entendi corretamente, parece que essa função do Leaflet não lê feições de polígonos “geradas” a partir do pacote sf.

De qualquer modo, muito grato pela ajuda!

Arlindo