5 Dados Geográficos
Praticamente toda questão relevante em política pública, planejamento urbano ou ciências sociais tem uma dimensão espacial. Precisamos saber onde as pessoas moram, se as escolas estão bem distribuídas no território ou quais bairros têm mais acesso a serviços de saúde. Incorporar essa dimensão à análise de dados exige um conjunto de conceitos e ferramentas específicos para trabalhar com dados geográficos.
Este capítulo é uma introdução ao tema. Há livros e disciplinas inteiras dedicados a geoprocessamento utilizando o R, a exemplo do Geocomputation with R (Lovelace et al., 2025) e do Spatial Statistics for Data Science (Moraga, 2023). Temos um objetivo mais modesto por aqui, que é o de consolidar os requisitos teóricos mínimos para trabalharmos com os dados geográficos das bases que ocupam os demais capítulos.
O foco recai inteiramente sobre dados vetoriais e como processá-los com o pacote sf (simple features), que é a principal biblioteca para esse tipo de dado no ecossistema R. Para executar as atividades ao longo do capítulo, utilizaremos alguns arquivos geográficos que seguem abaixo com link para download. Desde já, recomendo que você faça o donwload dos mesmos para uma pasta em seu computador, crie um arquivo de projeto do R neste mesmo local e, na sequência, um script .R para explorá-los conforme vá desenvolvendo a leitura do capítulo.
uf_br.gpkg— polígonos dos estados do Brasilssa.gpkg— polígono do município de Salvadorbairros_ssa.geojson— polígonos dos bairros de Salvadorescolas_ssa.gpkg— pontos das escolas de Salvadorsmsl_est.gpkg— estações do metrô de Salvadorsmsl_linhas.gpkg— linhas do metrô de Salvadorpop_uf_br.csv— população por UF (Censo 2022)
5.1 Conceitos fundamentais
Antes de partir para o código, é preciso compreender o que torna um dado geográfico diferente de qualquer outra tabela de dados, e qual o papel dos sistemas de referência que tornam possível posicionar esses dados na superfície da Terra.
5.1.1 Dado geográfico
Um dado geográfico é qualquer informação que possua referência explícita a uma localização na superfície da Terra. Essa localização pode ser absoluta, expressa em coordenadas (como latitude e longitude), ou relativa (como “200 m a leste da ponte”). A particularidade desse tipo de dado está exatamente nessa componente espacial, que abre um conjunto de análises impossíveis em uma tabela convencional, como medir proximidade entre entidades, identificar vizinhança, calcular áreas de cobertura ou detectar sobreposições entre fenômenos.
Estes tipos de dados se organizam em dois grandes modelos, conhecidos como vetorial e raster. No modelo vetorial, os fenômenos são representados por entidades discretas com geometria definida. Pontos representam localizações específicas (uma escola, uma estação de metrô, um poço). Linhas representam trajetórias ou redes (uma rua, uma linha de metrô, um rio). Polígonos representam áreas com fronteiras (um bairro, um município, um estado). A cada entidade geométrica, também chamada de feição, se associa uma tabela de atributos, exatamente como em um data frame convencional.
No modelo raster (também denominado matriz), a superfície é subdividida em uma grade regular de células (pixels), às quais podem ser atribuídos valores. Esse modelo é adequado para fenômenos contínuos e distribuídos, como elevação do terreno, temperatura, precipitação e uso do solo classificado por sensoriamento remoto. Em vez de fronteiras discretas, o raster captura gradações no espaço.
A divisão entre os dois modelos acompanha, em geral, a natureza das perguntas de pesquisa. As ciências sociais, em geral, ao trabalhar com assentamentos humanos, redes de transporte e divisões administrativas, fazem uso intensivo de dados vetoriais. As ciências ambientais se apoiam predominantemente em dados raster, especialmente aqueles advindos de sensoriamento remoto. Neste capítulo, teremos um foco em operações de geoprocessamento mais voltadas para dados vetoriais.
5.1.2 Sistema de Referência de Coordenadas (SRC)
O Sistema de Referência de Coordenadas (SRC) é esse o contexto que define como um par de coordenadas se traduz em uma posição real na superfície terrestre. Todo dado geográfico precisa de um SRC para ser interpretado corretamente, sendo composto por três elementos articulados entre si: o datum, o sistema de coordenadas e, no caso de dados projetados, a projeção cartográfica.
5.1.2.1 Datum
A Terra não é uma esfera perfeita nem um elipsoide regular. Sua forma real, influenciada pela gravidade e pela distribuição de massas internas, é chamada de geoide. O geoide é a superfície teórica que representa o nível médio dos mares prolongado pelos continentes, formando uma superfície de igual potencial gravitacional1.
Como o geoide é muito irregular para ser usado diretamente em geoprocessamento, costumamos utilizar outra entidade, o elipsoide. Este, por sua vez, trata-se de uma superfície matemática regular que aproxima a forma da Terra, definida por dois parâmetros (o raio equatorial e o achatamento polar) e que serve de base para os cálculos de coordenadas. A relação entre estes elementos pode ser melhor observada na Figura 5.2.
O datum define qual elipsoide utilizar e como ancorá-lo ao planeta, estabelecendo um ponto de referência que relaciona a superfície matemática à superfície física da Terra. Um aspecto importante a ser mencionado é que um datum pode ser geocêntrico ou local, conforme se pode observar na Figura 5.3. Um datum geocêntrico, como o WGS84 (o sistema global usado pelo GPS), posiciona o centro do elipsoide no centro de massa da Terra e é otimizado para uso em escala global. Um datum local, por sua vez, ajusta o elipsoide à superfície em uma região específica, sendo mais preciso naquela área à custa de distorções em outras.
Vale salientar que o sistema oficial de referência no Brasil é o SIRGAS 2000 (Sistema de Referência Geocêntrico para as Américas), um datum geocêntrico compatível com o WGS84 para a maioria das aplicações práticas.
5.1.2.2 Sistema de coordenadas
O sistema de coordenadas define os eixos e as unidades que permitem localizar pontos dentro do datum, podendo ser de dois tipos principais: geográfico e projetado. Um sistema de coordenadas geográfico expressa a posição em latitude e longitude, medidas em graus. A latitude varia de −90° (polo sul) a +90° (polo norte), enquanto a longitude varia de −180° a +180°. É o sistema mais familiar e universal, adotado por GPS, mapas web e a maioria dos arquivos geográficos distribuídos publicamente. Um sistema de coordenadas projetado, por sua vez, expressa a posição em coordenadas cartesianas (x e y) sobre um plano, geralmente em metros. Para chegar a esse plano, é necessária uma projeção cartográfica, o último aspecto a tratarmos neste tópico de SRC.
5.1.2.3 Projeção cartográfica
A Terra é esférica, mas um mapa é plano. Para representar a superfície curva do planeta em duas dimensões, é preciso deformá-la matematicamente. Esse processo é o que se chama de projeção cartográfica. Toda projeção introduz distorções inevitáveis, e cada tipo prioriza preservar uma ou duas propriedades geométricas (área, forma, distância ou direção) às custas das demais.
As projeções são classificadas pela superfície geométrica usada como intermediária entre o globo e o plano (Figura 5.5). Na projeção azimutal (ou plana), projeta-se a superfície terrestre sobre um plano tangente ao globo, geralmente no polo. O resultado é um mapa circular centrado no ponto de tangência, com distorções crescentes à medida que se afasta do centro. Na projeção cônica, envolve-se o globo com um cone que o toca ao longo de um ou dois paralelos; ao se abrir o cone em um plano, obtém-se um mapa em forma de setor, com distorções menores próximas aos paralelos de tangência. Na projeção cilíndrica, o globo é envolvido por um cilindro; ao abri-lo, obtém-se um mapa retangular. A projeção de Mercator (talvez a mais conhecida) é cilíndrica e preserva formas e ângulos locais, sendo útil para navegação. Apesar disso, distorce severamente a propriedade de área. Por exemplo, a Groenlândia aparece com área similar à da África, embora tenha apenas 7% da área continental africana.
Uma outra projeção bastante notória e que utilizaremos bastante é a UTM (Universal Transverse Mercator), do tipo cilíndrica, mas aplicada de forma transversal e segmentada. Em vez de um único cilindro envolvendo o mundo inteiro, o UTM divide o globo em 60 fusos verticais de 6° de longitude cada, numerados de 1 a 60 (GIS Geography). Para cada fuso, aplica-se um cilindro transversal que minimiza as distorções naquela faixa estreita.
O Brasil ocupa principalmente os fusos 18 a 25, e a escolha do fuso correto é essencial para que distâncias e áreas sejam matematicamente precisas. No exemplo da Figura 5.4 anterior, por exemplo, escolhemos o UTM 24S, pois é o fuso UTM onde o município de Vitória da Conquista-BA se localiza.
Na prática, para visualização de áreas extensas (ex.: estados inteiros) e intercâmbio de dados, o SRC geográfico (lat/lon em graus) é o mais conveniente. Para análises quantitativas que envolvam medição de distâncias, cálculo de áreas ou criação de zonas de influência, é necessário um SRC projetado com unidades métricas.
5.1.2.4 Codificação EPSG
Com centenas de sistemas de referência disponíveis, é preciso uma forma padronizada de identificá-los. A IOGP (International Association of Oil & Gas Producers, antiga European Petroleum Survey Group) publica o EPSG Geodetic Parameter Dataset, um banco de dados que atribui um código numérico único a cada SRC, datum, elipsoide e operação de transformação registrados.
Os códigos EPSG aparecem frequentemente em arquivos geográficos e funções de geoprocessamento. A tabela abaixo reúne os mais relevantes para as análises com dados brasileiros.
| Código EPSG | SRC | Tipo | Unidade |
|---|---|---|---|
| 4326 | WGS84 | Geográfico | Graus |
| 4674 | SIRGAS 2000 | Geográfico | Graus |
| 31983 | SIRGAS 2000 / UTM fuso 23S | Projetado | Metros |
| 31984 | SIRGAS 2000 / UTM fuso 24S | Projetado | Metros |
| 5880 | SIRGAS 2000 / Policônico | Projetado | Metros |
| 3857 | Web Mercator | Projetado | Metros |
Com os conceitos de SRC estabelecidos, é possível avançar para o lado prático sobre como trabalhar com dados geográficos no R, tema das nossas próximas seções.
5.2 Dados vetoriais e o pacote sf para R
O pacote sf (simple features) é a principal biblioteca para dados geográficos vetoriais no R. Ele implementa o padrão ISO 19125, conhecido como Simple Features, que define como representar e operar sobre geometrias vetoriais de forma consistente. Internamente, o sf se apoia em quatro bibliotecas escritas em C++:
- GDAL (Geospatial Data Abstraction Library): leitura e escrita de dezenas de formatos geográficos, como GeoPackage, GeoJSON, Shapefile e outros.
- GEOS (Geometry Engine, Open Source): operações geométricas como buffers, interseções e uniões em coordenadas projetadas.
- PROJ: transformações entre sistemas de referência de coordenadas.
- s2geometry: operações geométricas em coordenadas geográficas (longitude/latitude), tratando a Terra como uma esfera. Usada por padrão desde a versão 1.0 do
sf.
Em geoprocessamento, uma camada vetorial é um conjunto de feições do mesmo tipo geométrico, organizado como uma tabela. Os três componentes fundamentais de uma camada vetorial são:
- Feição (feature): cada linha da tabela corresponde a uma feição (um elemento geográfico individual), como um município, um trecho de rodovia ou uma escola. Cada feição tem uma geometria e um conjunto de atributos.
- Campos (fields) ou atributos: as colunas não-espaciais da tabela, que descrevem características de cada feição (nome, código, população, área, etc.). No R, são acessados como colunas normais de um data frame.
- Geometria: a coluna especial que armazena a representação espacial de cada feição (ponto, linha ou polígono). No
sf, essa coluna é da classesfce geralmente se chamageometryougeom.
Além desses três componentes, toda camada vetorial carrega metadados que descrevem suas propriedades globais. Eles aparecem automaticamente ao imprimir um objeto sf. Os metadados incluem o número de feições e campos, o tipo de geometria, a caixa delimitadora e o sistema de referência de coordenadas.
O objeto sf de uma camada vetorial comporta-se essencialmente como um data frame. Isso significa que todas as operações do dplyr (filter(), mutate(), left_join() etc.) funcionam diretamente sobre objetos sf, tornando o fluxo de trabalho coeso com o restante do tidyverse.
5.2.1 Tipos de geometria
O padrão Simple Features define 18 tipos de geometria. Na prática, utilizamos mais as seis primeiras das sete principais abaixo, ilustradas na Figura 5.8:
POINT: um único ponto (uma escola, uma estação de metrô).LINESTRING: uma sequência de pontos conectados (uma rua, uma linha de metrô).POLYGON: uma área fechada (um bairro, um município).MULTIPOINT: coleção de pontos pertencentes à mesma feição.MULTILINESTRING: coleção de linhas pertencentes à mesma feição (ex.: ruas descontínuas).MULTIPOLYGON: coleção de polígonos pertencentes à mesma feição (um estado com ilhas, por exemplo).GEOMETRYCOLLECTION: mistura de tipos geométricos em uma única feição.
Cada tipo tem uma representação textual padronizada chamada WKT (Well-Known Text), útil para inspecionar objetos sf, construir geometrias manualmente e trocar dados entre sistemas diferentes. A função st_as_sfc() converte uma string WKT (no formato de texto, entre aspas) em um objeto de geometria do sf.
Um POINT é o tipo mais simples: um único par de coordenadas x y separadas por espaço, onde x corresponde à longitude e y à latitude:
st_as_sfc("POINT (-38.51 -12.96)")Geometry set for 1 feature
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -38.51 ymin: -12.96 xmax: -38.51 ymax: -12.96
CRS: NA
Um LINESTRING é uma sequência de pares x y separados por vírgula. O sf os conecta em ordem, formando segmentos de reta para uma mesma linha:
st_as_sfc("LINESTRING (-38.51 -12.96, -38.49 -12.97, -38.48 -13.00)")Geometry set for 1 feature
Geometry type: LINESTRING
Dimension: XY
Bounding box: xmin: -38.51 ymin: -13 xmax: -38.48 ymax: -12.96
CRS: NA
Um POLYGON define uma área fechada por um anel de coordenadas. Por isso, o último par deve ser idêntico ao primeiro. Os quatro pares únicos abaixo definem os três cantos de um triângulo, sendo que o quarto par fecha o anel voltando ao ponto de origem. Os parênteses são duplos porque o padrão WKT reserva os parênteses internos para representar furos no polígono (não utilizados no exemplo abaixo).
st_as_sfc("POLYGON ((-38.52 -12.95, -38.47 -12.95, -38.47 -13.01, -38.52 -12.95))")Geometry set for 1 feature
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -38.52 ymin: -13.01 xmax: -38.47 ymax: -12.95
CRS: NA
Um MULTIPOINT reúne dois ou mais pontos em uma única feição. Cada ponto fica entre seus próprios parênteses internos. O importante é que, na tabela, os dois pontos abaixo correspondem a uma só linha da tabela (uma única feição com duas localizações):
st_as_sfc("MULTIPOINT ((-38.51 -12.96),
(-38.49 -12.97))")Geometry set for 1 feature
Geometry type: MULTIPOINT
Dimension: XY
Bounding box: xmin: -38.51 ymin: -12.97 xmax: -38.49 ymax: -12.96
CRS: NA
Um MULTILINESTRING reúne dois ou mais trechos de linha em uma única feição. Cada trecho fica entre seus próprios parênteses. O exemplo abaixo cria uma feição com dois segmentos, como os dois sentidos de uma avenida representados como traços separados.
st_as_sfc("MULTILINESTRING ((-38.51 -12.96, -38.49 -12.97),
(-38.48 -13.00, -38.47 -13.01))")Geometry set for 1 feature
Geometry type: MULTILINESTRING
Dimension: XY
Bounding box: xmin: -38.51 ymin: -13.01 xmax: -38.47 ymax: -12.96
CRS: NA
Um MULTIPOLYGON reúne dois ou mais polígonos em uma única feição. É o tipo mais frequente nas bases brasileiras. Estados e municípios com ilhas têm o território continental e as ilhas como polígonos distintos, mas compõem uma única feição na tabela. Cada polígono fica entre parênteses duplos (o nível interno reservado ao anel, o externo ao agrupamento), resultando em três níveis de parênteses no total.
st_as_sfc("MULTIPOLYGON (((-38.52 -12.95, -38.47 -12.95, -38.47 -13.01, -38.52 -12.95)),
((-38.45 -12.94, -38.43 -12.94, -38.43 -12.96, -38.45 -12.94)))")Geometry set for 1 feature
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -38.52 ymin: -13.01 xmax: -38.43 ymax: -12.94
CRS: NA
5.2.2 Criando camadas vetoriais do zero
Para entender a estrutura de objetos sf, é útil criá-los do zero. Em vez de descrever geometrias como texto WKT, podemos utilizar funções do pacote sf, como st_point(), st_linestring() e st_polygon(), que recebem vetores e matrizes de coordenadas. O resultado de cada uma é um objeto de geometria individual (sfg), que depois é agrupado em uma coluna de geometrias com st_sfc() e associado a um data frame de atributos com st_sf(), formando uma camada vetorial completa.
O exemplo abaixo cria três pontos (estações hipotéticas de metrô), uma linha (o traçado hipotético) e um polígono (um bairro hipotético), todos referenciados ao datum SIRGAS 2000 (EPSG 4674):
# Três pontos: estações hipotéticas
p1 <- st_point(c(-38.510, -12.960))
p2 <- st_point(c(-38.495, -12.975))
p3 <- st_point(c(-38.480, -13.005))
estacoes_hip <- st_sf(
nome = c("Estação A", "Estação B", "Estação C"),
geometry = st_sfc(p1, p2, p3, crs = 4674)
)
# Uma linha: traçado hipotético
linha_hip <- st_sf(
nome = "Linha Hipotética",
geometry = st_sfc(
st_linestring(
matrix(c(-38.510, -12.960,
-38.495, -12.975,
-38.480, -13.005),
ncol = 2, byrow = TRUE)
),
crs = 4674
)
)
# Um polígono: bairro hipotético
poligono_hip <- st_sf(
nome = "Bairro Hipotético",
geometry = st_sfc(
st_polygon(list(
matrix(c(-38.520, -12.950,
-38.470, -12.950,
-38.470, -13.015,
-38.520, -13.015,
-38.520, -12.950),
ncol = 2, byrow = TRUE)
)),
crs = 4674
)
)O resultado das operações anteriores produzem os seguintes arquivos geográficos abaixo, que aprenderemos a visualizar em R logo mais:
sf criado do zero com três tipos de geometria: um polígono, uma linha e três pontos — todos referenciados ao datum SIRGAS 2000.
Dois aspectos merecem atenção. Primeiro, o SRC é definido no momento da criação (crs = 4674). Sem ele, o objeto sf existiria, mas seria espacialmente indefinido. Segundo, a estrutura resultante é um data frame comum: estacoes_hip tem linhas (uma por estação), colunas de atributos (nome) e uma coluna de geometria.
5.2.3 Lendo Arquivos Geográficos
Mais comum do que criarmos arquivos geográficos do zero é lermos arquivos existentes de alguma base de dados. Eles podem assumir diversos formatos (extensões) predefinidos, como GeoPackage (.gpkg), GeoJSON (.geojson), Shapefile (.shp), entre outros. A função st_read() lê qualquer um desses formatos e devolve um objeto sf.
Antes de prosseguir com o código abaixo, lembre-se de fazer o download dos arquivos listados no início do capítulo, salve-os em uma pasta e inicie um porjeto no RStudio2. Na sequência, em um script .R, use os comandos abaixo para carregá-los:
library(tidyverse)
library(sf)
uf_br <- st_read("uf_br.gpkg")
ssa <- st_read("ssa.gpkg")
bairros <- st_read("bairros_ssa.geojson")
escolas <- st_read("escolas_ssa.gpkg")
est_metro <- st_read("smsl_est.gpkg")
lin_metro <- st_read("smsl_linhas.gpkg")
pop_uf <- read_csv("pop_uf_br.csv")Após carregar, use st_crs() para inspecionar o SRC de qualquer objeto:
st_crs(uf_br)Coordinate Reference System:
User input: SIRGAS 2000
wkt:
GEOGCRS["SIRGAS 2000",
DATUM["Sistema de Referencia Geocentrico para las AmericaS 2000",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
USAGE[
SCOPE["Horizontal component of 3D system."],
AREA["Latin America - Central America and South America - onshore and offshore. Brazil - onshore and offshore."],
BBOX[-59.87,-122.19,32.72,-25.28]],
ID["EPSG",4674]]
Note que o output acima gera diversos metadados relativos ao SRC do objeto espacial. Se quisermos de forma específica somente o código EPSG do SRC da camada, podemos fazer:
st_crs(uf_br)$epsg[1] 4674
st_crs(bairros)$epsg[1] 4326
st_crs(escolas)$epsg[1] 4674
Observe que os estados do Brasil (uf_br) e as escolas (escolas) estão em SIRGAS 2000 (EPSG 4674). Os bairros de Salvador (bairros) estão em WGS84 (EPSG 4326). Essa diferença de SRC entre camadas é algo a ser observado antes de qualquer operação que combine duas ou mais delas.
5.2.4 Visualizando Dados Geográficos
É possível plotar esses arquivos geográficos com apoio do pacote ggplot2, oriundo da família de pacotes tidyverse, que já vimos no capítulo anterior. Para tanto, utilizaremos a função geom_sf() para mapeá-los de maneira sobreposta, conforme o exemplo abaixo. É importante destacar que o ggplot2 reconhece objetos sf automaticamente por meio da função geom_sf().
Comecemos com o mapa de estados armazenado no objeto sf denominado uf_br, que contém feições (polígonos) relativos a cada estado do Brasil. Antes de plotá-lo, vale examinar sua estrutura:
uf_brSimple feature collection with 27 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -73.99045 ymin: -33.75208 xmax: -28.83591 ymax: 5.271841
Geodetic CRS: SIRGAS 2000
First 10 features:
code_state abbrev_state name_state code_region name_region
1 11 RO Rondônia 1 Norte
2 12 AC Acre 1 Norte
3 13 AM Amazonas 1 Norte
4 14 RR Roraima 1 Norte
5 15 PA Pará 1 Norte
6 16 AP Amapá 1 Norte
7 17 TO Tocantins 1 Norte
8 21 MA Maranhão 2 Nordeste
9 22 PI Piauí 2 Nordeste
10 23 CE Ceará 2 Nordeste
geom
1 MULTIPOLYGON (((-63.32721 -...
2 MULTIPOLYGON (((-73.18253 -...
3 MULTIPOLYGON (((-67.32609 2...
4 MULTIPOLYGON (((-60.20051 5...
5 MULTIPOLYGON (((-54.95431 2...
6 MULTIPOLYGON (((-51.1797 4....
7 MULTIPOLYGON (((-48.35878 -...
8 MULTIPOLYGON (((-45.84073 -...
9 MULTIPOLYGON (((-41.74605 -...
10 MULTIPOLYGON (((-41.16703 -...
O cabeçalho do output mostra os metadados da camada: 27 feições (uma por estado), 5 campos de atributos, tipo de geometria MULTIPOLYGON (cada estado pode ter ilhas e descontinuidades), as coordenadas das extremidades da caixa delimitadora (Bounding box) que compreende do território brasileiro e o SRC SIRGAS 2000. Logo abaixo aparecem as primeiras linhas da tabela, com os campos code_state, abbrev_state, name_state, code_region e name_region, além da coluna geom, que armazena a geometria de cada feição.
O argumento de geometria (geom_) que utilizamos no ggplot2 para visualizar arquivos vetoriais é o geom_sf(), conforme pode ser visto para a camada dos estados brasileiros abaixo:
uf_br |>
ggplot() +
geom_sf() +
theme_minimal()uf_br.gpkg e plotados com geom_sf().
Podemos produzir mapas coropléticos com base em colunas da própria base de dados ou cores determinadas a priori de nosso interesse. A coloração dos polígonos segue o padrão estético do ggplot2 definidos em aes(), com o parâmetro fill representando a cor de preenchimento e color a coloração das bordas. Perceba, no caso abaixo, que fill foi definido dentro de aes(), pois a coloração depende do valor da coluna name_region, ao passo que color foi escolhido arbitrariamente com a cor branca, fora de aes(), sem depender dos valores de qualquer coluna da base de dados.
uf_br |>
ggplot() +
geom_sf(aes(fill = name_region), color = "white", linewidth = 0.2) +
theme_minimal()
Já vimos anteriormente que é possível agregar duas bases de dados por meio de uma operação de junção (join). O mesmo pode ser feito entre objetos espaciais sf e aqueles em formatos de tabela (data.frame ou tibble, por exemplo). No exemplo abaixo, construiremos um mapa coroplético adicionando dados de população do arquivo pop_uf_br.csv ao objeto uf_br com um left_join(), antes de plotar:
uf_br |>
left_join(pop_uf, by = join_by(abbrev_state == sigla)) |>
ggplot() +
geom_sf(aes(fill = pop2022), color = "white", linewidth = 0.2) +
scale_fill_viridis_c() + # Ajusta as cores de preenchimento para a paleta Viridis
theme_minimal()
Do mesmo modo, também é possível sobrepor múltiplas camadas no mesmo mapa passando cada uma a um geom_sf() com o argumento data. No caso abaixo, conseguimos visualizar três tipos de arquivos vetoriais (polígonos, linhas e pontos), com diferentes estilos visuais. Observe que para modificar a coloração de linhas e pontos utilizamos o argumento color, uma vez que eles não têm preenchimento3.
ggplot() +
geom_sf(data = bairros, fill = "gray92", color = "gray70", linewidth = 0.2) +
geom_sf(data = lin_metro, color = "#C77D04", linewidth = 1) +
geom_sf(data = est_metro, color = "#875401", size = 2) +
theme_minimal()
5.2.5 Visualizando de Forma Interativa
O pacote mapview oferece uma alternativa interativa ao ggplot2 para explorar dados geográficos. Em vez de uma imagem estática, ele gera um mapa navegável com zoom e pan, sobreposto a uma camada de base como OpenStreetMap ou imagens de satélite. É especialmente útil na fase exploratória da análise, quando queremos inspecionar feições individuais ou verificar a coerência espacial dos dados.
Para utilizá-lo, basta passar um objeto sf à função mapview(). O resultado é imediato, sem nenhuma configuração estética:
library(mapview)Warning: package 'mapview' was built under R version 4.3.3
mapview(bairros)mapview(lin_metro)mapview(est_metro)Para sobrepor múltiplas camadas, o mapview usa o operador +, da mesma forma que o ggplot2:
mapview(bairros) + mapview(lin_metro) + mapview(est_metro)Observe que o default de coloração de preenchimento e contorno das geometrias do mapview é o azul, o que não é recomendável, pois denota características de corpos da água em feições que não são dessa natureza no nosso caso. Felizmente, a função aceita argumentos para controlar a aparência de cada camada. Para polígonos, zcol define a coluna usada para colorir as feições, col.regions recebe o vetor de cores e color controla a cor das bordas. No exemplo abaixo, colorimos os estados por grande região geográfica com cores predefinidas:
cores_regiao <- c(
"Norte" = "#2ca25f",
"Nordeste" = "#e6550d",
"Centro-Oeste" = "#756bb1",
"Sudeste" = "#e31a1c",
"Sul" = "#DDED53"
)
mapview(uf_br,
zcol = "name_region",
col.regions = cores_regiao,
color = "white")