Pacote Leaflet

O pacote leaflet foi desenvolvido no ano de 2015 por Joe Cheng, um desenvolvedor de software na RStudio. Cheng é conhecido por sua contribuição significativa para a comunidade R, incluindo o desenvolvimento do framework Shiny. Baseado na popular biblioteca JavaScript Leaflet, o pacote Leaflet é um htmlwidget que permite aos usuários a criação de mapas dinâmicos diretamente a partir de scripts R, facilitando a visualização e a análise de dados geoespaciais. O Leaflet é uma das bibliotecas JavaScript mais populares para a criação de mapas interativos. Ele tem como um dos principais objetivos fornecer uma interface amigável, permitindo a criação de mapas complexos com poucas linhas de código para usar em documentos RMarkdown e Shiny.

Instalação do pacote Leaflet

Para instalar o pacote no R, executamos o comando “install.packages(”leaflet”)“.

Explicando o funcionamento do pacote

A criação de um mapa por meio do Leaflet deve seguir 3 passos práticos. São eles: 1. Criação do mapa chamando a função leaflet(); 2. Adição de camadas com as funções addTiles(), addMarkers() ou addPolygons(); 3. Impressão do mapa;

Funções no Leaflet

As funções supracitadas funcionam da seguinte maneira:

Função Leaflet

Função addTiles

library(leaflet)
library (dplyr) #usaremos operador pipe
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
leaflet()%>%
  addTiles()

Função addMarkers

Vamos criar um data frame com dados de latitude e longitudade das cidades de Belo Horizonte, Porto Alegre e Salvador. Após isso, iremos utilizar os comandos do leaflet() para carregar o motor, addTiles() para carregar a função zoom e a telha padrão e a função addMarkers(), que irá receber longitude, latitude e um popup de cidade, criando um balão em cima de cada uma das cidades escolhidas, que permite clicar no marcador para visualizar qual cidade ele está apresentando.

data <- data.frame(
  lat = c(-19.9204, -29.9442, -12.9804),
  lng = c(-43.9565, -51.1936, -38.5063),
  city = c("Belo Horizonte", "Porto Alegre", "Salvador")
)

#Obs.: vamos utilizar o operador pipe para facilitar nosso código
leaflet(data) %>%
  addTiles() %>%
  addMarkers(~lng, ~lat, popup = ~city)

Função clusterOptions()

Antes de partir para a explicação de addPolygons(), vamos entender como funciona a função clusterOptions(), ferramenta do addMarkers(), como dito acima, que permite agrupar pontos no mapa em conjuntos de vários pontos. Observação importante, para criar um clusterOptions() padrão, utilizaremos o markerClusterOptions().

Para entender essa ferramenta, vamos criar um data frame com coordenadas de algumas cidades de Portugal, criar o mapa para essas coordenadas e adicionar marcadores com agrupamento.

library(leaflet)

#criando o data frame
cidades <- data.frame(
  nome = c("Lisboa", "Porto", "Coimbra", "Faro", "Braga"),
  lat = c(38.7223, 41.1496, 40.2033, 37.0179, 41.5454),
  lng = c(-9.1393, -8.6109, -8.4196, -7.9304, -8.4265)
)

#criando o mapa
mapa <- leaflet() %>%
  addTiles() %>%
  setView(lng = -8.0, lat = 39.5, zoom = 6) #utilizamos essa função para definir a visualização inicial que queremos que apareca quando fornecida a imagem do mapa.

#adicionando os marcadores com agrupamento
mapa <- mapa %>%
  addMarkers(
    data = cidades,
    ~lng, ~lat,
    popup = ~nome,
    clusterOptions = markerClusterOptions()
  )

#imprimindo o mapa
mapa

Nesse mapa, podemos perceber que, caso o zoom seja diminuido, todas as 5 cidades aparecem dentro de um agrupamento de marcadores(numerado pelo 5 no mapa), que nos permite clicar no agrupamento e então visualizar os marcadores individuais, aonde as cidade de Lisboa e Faro aparecem com os marcadores individuais já, porém, as cidades de Porto, Coimbra e Braga, por suas proximidades relativas, aparecem como um agrupamento de marcadores também (numerado pelo 3 no mapa), que nos permite clicar no agrupamento e então visualizar os marcadores individuais.

Função addPolygons

Seguindo para a função do addPolygons(), ela é usada para adicionar polígonos a um mapa Leaflet. Os polígonos são formas geométricas fechadas que podem ser usadas para representar áreas no mapa, como regiões, zona ou qualquer outra forma geoespacial. Seus argumentos necessitam dos parâmetros “map”, “lng” (longitude), “lat” (latitude) e vários outros argumentos opcionais para personalizar o polígono, como cor, preenchimento, popup, etc.

Para visualizar essa aplicação, vamos criar um novo data frame com coordenadas dos vértices do polígono que desejamos e, depois, criar um mapa e adicionar nosso polígono.

library(leaflet)
poligono_coords <- data.frame(
  lng = c(-9.142685, -9.146437, -9.151157, -9.145067, -9.142685),
  lat = c(38.707750, 38.707837, 38.704211, 38.703098, 38.707750)
)

mapa_2 <- leaflet() %>%
  addTiles() %>%
  setView(lng = -9.145, lat = 38.705, zoom = 15)

mapa_2 <- mapa_2 %>%
  addPolygons(
    lng = poligono_coords$lng,
    lat = poligono_coords$lat,
    color = "blue", #cor da borda do polígono
    weight = 3, #largura da borda do polígono
    opacity = 0.8, #opacidade da borda do polígono
    fillColor = "lightblue", #cor que irá preencher o polígono
    fillOpacity = 0.5, #opacidade do preenchimento do polígono
    popup = "Área Exemplo", #texto que queremos que apareça no popup quando clicar no polígono
    label = "Polígono Exemplo" #texto que queremos que apareça ao passar o mouse sobre o polígono
  )

mapa_2

Considerações Finais

Por fim, ao estudar o pacote Leaflet do R, fomos capazes de perceber a versatilidade e praticidade de tal pacote, visto que conseguimos construir mapas complexos com poucas linhas de código e ainda utilizar diferentes funções que nos permitem uma vasta gama de funcionalidades diferentes dentro do programa. Isso posto, utilizando o leaflet, podemos criar uma varidade imensa de mapas e funcionalidades que ainda assim não foram citados acima neste trabalho. São eles:

Uma ressalva ao pacote, embora o Leaflet seja uma excelente biblioteca para criar mapas interativos na web e seja amplamente utilizados, existem algumas situações ou requisitos específicos onde ele pode não ser a melhor escolha. Prova disso seria em aplicações que requerem operações avançadas de GIS (Geographic Information System), visto que o leaflet é principalmente uma biblioteca de visualização de mapas e não foi projetada para realizar operações de GIS complexas, como análise espacial, geoprocessamento ou modelagem geospacial avançada. Outro exemplo seriam em aplicações que requerem uma manipulação intensiva de mapas vetoriais ou rasterizados complexos, já que o Leaflet foi projeto principalemente para mapas rasterizados e dados vetoriais simples, então, quanso de trata de manipulação e renderização de grandes quantidades de dados vetoriais complexos, o desempenho pode ser comprometido.

Concluindo, o pacote é muito interessante e extremamente prático, contando com uma extensa gama de funcionalidades e parâmetros que podem ser utilizados na aplicabilidade das mais diversas construções de mapas.