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.
Para instalar o pacote no R, executamos o comando “install.packages(”leaflet”)“.
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;
As funções supracitadas funcionam da seguinte maneira:
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()
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)
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.
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
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:
Mapas com círculos com raios proporcionais à uma certa variável (ex.: um mapa gráfico onde teremos círculos com raios proporcionais à porcentagem de municípios com rede de esgoto em cada estado do Brasil);
Mapas de calor, os famosos heatmaps, que são mapas que tonalizam certas partes dele conforme a varíavel correspondente (ex.: seguindo o exemplo anterior, poderíamos tonalizar cada estado conforme a porcentagem correspondente, ou seja, quanto maior a cobertura de saneamento básico em um estado, mais vibrante será a sua coloração);
Calcular distâncias entre um ponto e outro em um mapa (para isso, incluímos o pacote “Turf.js”, que, juntamente com o “Leaflet” serão capazes de calcular qualquer distância entre pontos presentes em um mapa);
Entre outras diversas funcionalidades;
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.