3. Criando um mapa
Você se lembra do mapa de papel com alfinetes representando casos espalhados pelo município? Ele também é um exemplo de representação espacial. A representação espacial de evento de saúde é o processo de criar símbolos que representem as ruas, os bairros ou os casos acometidos por alguma doença e possam ser interpretados pelas pessoas. Os mapas são extremamente úteis e bem difundidos para esta tarefa.
Mas, o que seria um mapa? Mapa é um meio de comunicação gráfica, visual ou até tátil que representa algum fenômeno do mundo real. Tudo o que acontece na superfície terrestre pode ser espacializado e representado. O produto da transformação do dado espacial coletado, processado, editado e integrado em uma visualização com nível de detalhe específico é um mapa.
No R
, a criação de mapas pode utilizar vários pacotes.
Vamos praticar com os principais, como o pacote sf
, e
outros que tenham maior simplicidade para manejo, como os pacotes
mapsf
e tmap
. Mas não se preocupe, falaremos
deles mais à frente. Neste momento, precisaremos instalá-los e
carregá-los. Execute o código abaixo no seu computador:
# Instalando e carregando os pacotes necessários
if(!require(tidyverse)) install.packages("tidyverse");library(tidyverse)
if(!require(foreign)) install.packages("foreign");library(foreign)
if(!require(readxl)) install.packages("readxl");library(readxl)
if(!require(janitor)) install.packages("janitor");library(janitor)
if(!require(stringi)) install.packages("stringi");library(stringi)
if(!require(sf)) install.packages("sf");library(sf)
if(!require(mapsf)) install.packages("mapsf");library(mapsf)
if(!require(tmap)) install.packages("tmap");library(tmap)
if(!require(ggspatial)) install.packages("ggspatial");library(ggspatial)
Agora vamos conhecer os elementos básicos que compõem um mapa, como
importar arquivos vetoriais e visualizá-los como um mapa no
R
. Acompanhe com atenção os próximos tópicos.

O mapa é uma simplificação da realidade. Por isso, precisamos priorizar qual nível de detalhe expressa melhor a realidade que queremos representar. Esta tarefa não é trivial. É necessário o conhecimento de conceitos importantes para a melhor representação possível de um fenômeno. Um mapa errado pode levar a interpretações e decisões equivocadas, gasto irracional de dinheiro público.
3.1 Elementos básicos na composição de um mapa
Alguns elementos devem fazer parte na elaboração de mapas. Esses elementos são focados na comunicação com o leitor, por meio de informações elementares na representação dos fenômenos. De modo geral, podem ser elementos de comunicação que visam melhor explicar o que está sendo mapeado, apresentando informações sobre o assunto, mas também podem ser elementos cartográficos, para explicar as referências cartográficas utilizadas para sobre a elaboração do mapa. Os principais elementos são:
Título: elemento de comunicação que deve mostrar o assunto, onde e quando o fenômeno representado aconteceu. A depender das regras de elaboração utilizadas para a montagem do mapa ou relatório que o mapa seja incluído (como por exemplo, normas da Associação Brasileira de Normas Técnicas - ABNT, de periódicos científicos ou regras de publicação definidas pelo setor de comunicação) pode conter tamanho de letra e posição específicas;
Legenda: elemento de comunicação de decodificação dos símbolos, relações, cores, formas e texturas utilizadas no mapa, sendo considerado um guia para a leitura. Mais adiante no material serão discutidas formas de classificação a depender do tipo de mapa produzido;
Escala: elemento cartográfico que representa a relação entre o tamanho dos elementos representados em um mapa e o tamanho real. Na área da saúde, geralmente, é representada em sua forma gráfica, por uma linha ou barra subdivida em trechos nos quais cada comprimento significa o valor correspondente na superfície;
Seta norte: elemento de orientação na superfície terrestre oriundo dos pontos cardeais;
Fonte dos dados: descrição da origem dos dados utilizados para a elaboração e digitalização do mapa. A depender das normas de elaboração utilizadas, podem ser apenas citados na seção de métodos de relatórios, por exemplo;
Sistema Geodésico de Referência: é um conjunto de parâmetros para ajustar a forma real da Terra à geometria que melhor representa. Existem diversos sistemas geodésicos que se ajustam melhor de acordo com a região do mundo. No Brasil, desde 2015 o Sistema de Referência Geocêntrico para as Américas (SIRGAS2000) foi definido como padrão.
O sistema de coordenadas é um dos elementos do sistema geodésico. É por meio dele que é possível localizar algo na superfície terrestre. De modo geral, esse posicionamento pode ser feito por meio de dois sistemas:
O sistema de coordenadas geográficas, que utiliza linhas verticais (meridianos) e linhas horizontais (paralelos) posicionadas no globo para definir a localização espacial de um objeto. Essa localização é, então, especificada em graus decimais (ou em graus, minutos e segundos) por meio da longitude e da latitude.
O sistema de coordenadas planas, que utiliza uma projeção em plano no qual uma localização é representada por X e Y, especificada em metros. A projeção mais utilizada na saúde pública é a do sistema Universal Transverso de Mercator (UTM), que utiliza a divisão da Terra em fusos. Com ela, é possível aplicar funções de cálculos de distâncias entre pontos e comprimento de linhas mais facilmente.

Atenção
Quando lidamos com diferentes dados, os sistemas de referência podem ser diferentes. Usar referências diferentes resultará em locais em posições diferentes ou arquivos que não se sobrepõem corretamente, ou seja, não são representados adequadamente.
Logo, é uma boa prática utilizar o mesmo sistema de referência em todos os projetos e arquivos geográficos em que se estiver trabalhando.
No R
, as coordenadas de ambos os sistemas citados estão
indexadas pelo código EPSG (sigla em inglês para
European Petroleum Survey Group que, em português, pode ser
traduzido para Grupo Europeu de Pesquisa de Petróleo). Nesta indexação,
o sistema geográfico adotado pelo Brasil, o SIRGAS2000, possui o código
4674. Para o sistema de coordenadas planas UTM há
vários códigos, de modo que cada região coberta por um fuso possui um
código (Figura 2).
É comum um município adotar um sistema de coordenada como padrão, mas acontece de alguns estarem em áreas limites entre dois fusos. Nesta situação, para elaboração de mapas, é sugerido a adoção de um sistema de coordenadas que utiliza projeção cônica cujo código EPSG é 5880.
Figura 2: Limites dos fusos na projeção UTM e respectivos códigos UTM e EPSG do Brasil.
3.1.1 O uso das cores em mapas
As cores despertam respostas emocionais diferentes nas pessoas, a depender do contexto. Por exemplo, ao elaborar um mapa com área de risco para determinada doença, utilizar a cor azul pode passar uma sensação de tranquilidade, além de poder confundir o leitor, fazendo-o pensar em ser uma representação de um rio ou lago. Então a questão é: como escolher as cores adequadamente?
Ao elaborar mapas, o profissional da Vigilância em Saúde deve ter em mente sobre o que cabe destacar no mapa e como a cor contribui com o seu objetivo. Não é uma questão de gosto, mas uma forma de comunicação que utiliza um simbolismo psicológico que pode ser muito eficiente se bem utilizada. A depender do tipo de variável que se deseja utilizar para representação no mapa, o grupo de cores devem ser apropriadas.
Existem muitas maneiras de especificar as cores no R
.
Uma das formas mais usadas é o padrão RGB (do inglês: “Red,
Green, Blue”), que representa a intensidade das cores primárias
vermelho, verde e azul. Uma das codificações desse padrão é o formato
chamado hexadecimal, formado por seis dígitos, dois
para cada cor primária. Esses dois dígitos podem ser representados por
números que variam de 00 a 99 e pares de letras de AA até FF (por
exemplo AB, AC, CE, EF, FF).
R = 00 a 99 / AA a FF G = 00 a 99 / AA a FF B = 00 a 99 / AA a FF
No R
, o símbolo (#
) nesta situação indica
que é um código hexadecimal. Então, um código #000000
representa a cor preta e #FFFFFF
representa a cor branca.
Combinando as três cores básicas podemos especificar mais de 16 milhões
de cores e tons de cinza!
Uma pequena amostra de cores pode ser vista na tabela abaixo, mas é possível visualizar as combinações possíveis clicando em https://www.w3schools.com/colors/colors_hexadecimal.asp. Na tabela, mostramos a cor em cada célula e, também, o código hexadecimal.
Tabela 2: Amostra de cores com codificação hexadecimal.
Para a representação de indicadores que expressam valores relativos (razão, taxas), deve-se seguir a lógica de ordenação (menor para maior, maior que, menor que). A escolha mais adequada é representá-los por meio de variação de cores, utilizando paletas de cores mais adequadas e intuitivas:
sequenciais: são paletas de gradientes que, de modo geral, denotam que cores mais claras representam valores baixos e cores mais escuras representam valores altos. Podem também representar uma gradação de uma única cor, por exemplo do verde claro para o verde escuro (neste caso é chamada matiz única), ou utilizar gradação de cores diferentes, por exemplo do amarelo para o roxo (sendo chamada matiz múltipla). São muito intuitivas na representação de mapas temáticos e muito comuns de escolha em produtos gráficos na Vigilância em Saúde.
divergentes: também são gradientes, mas possuem um ponto médio mais claro entre duas extremidades escuras destacadas. São usadas para representar variáveis com valores que transitam de um extremo para outro e, principalmente, quando a variável a ser representada possui um valor “central” como, por exemplo:
- zero: taxas de crescimentos que variam de valores negativos a positivos, passando pelo zero;
- porcentagens e proporções: valores que variam de 0 a 1 (ou 0% a 100%);
- meta: indicadores que possuem uma pactuação, uma meta a ser atingida;
- média ou mediana: taxas que apresentem médias gerais ou medianas.
Ambas as paletas podem representar uma gradação de cores contínua (também chamada de não categorizada) e discretizada (também chamada de classificada, escalonada, graduada). Na tabela abaixo, apresentamos alguns exemplos:
Tabela 3: Exemplos de tipos de paletas de cores para dados contínuos.
As paletas de cores voltadas para dados categóricos representam uma cor associada a cada categoria de uma variável que não pode ser ordenada ou representam dados qualitativos que não podem ser mensurados (somados ou calculados em média). Neste caso, a escolha de cor privilegia a diferenciação clara entre as categorias.
Tabela 4: Exemplo de tipo de paleta para dados qualitativos.

No menu lateral “Arquivos” do curso se encontra um arquivo em PDF com
as cores e nomes nativas da linguagem R
. Há vários pacotes
que ampliam as opções de cores como RColorBrewer
e
colorspace
.
3.2 Conhecendo e importando dados vetoriais
Lembramos há pouco dos mapas com alfinetes utilizados para representação de eventos. Atualmente, a representação é muito mais focada no meio digital. Mapas digitais são aqueles desenvolvidos utilizando um conjunto de ferramentas, incluindo programas de computador, editados e disponibilizados em formato digital em páginas online ou em relatórios enviados por email, por exemplo.
A representação dos objetos geográficos no meio digital é feita por dados do tipo gráfico. Esses dados são assim chamados porque utilizam um conjunto de geometrias para descrever, graficamente, os objetos geográficos que compõem os arquivos vetoriais. Três tipos básicos de geometria são utilizados: pontos, linhas e polígonos.
A importação de arquivos vetoriais no R
pode ser feita
utilizando o pacote sf
(referente às palavras em inglês
simple feature). O pacote sf
importa e lê esses
arquivos como dataframes, sendo as geometrias armazenadas em
colunas. Dessa forma, podem ser normalmente manipuladas com pacotes como
o dplyr
e ter visualizações com pacotes como o
ggplot2
.
Vamos conhecer um pouco mais das principais geometrias e, para isso, considere que foi solicitado pelo diretor geral, um mapa contendo as localizações das unidades de saúde e as ruas de acesso até estas unidades. Considere também utilizar dados do Estado do Acre para executar esta tarefa. Acompanhe com atenção os conceitos que seguem.
a) Pontos
Vamos importar dados de pontos contendo a localização das unidades de saúde do Estado do Acre. A geometria de pontos é composta por um conjunto de pares de coordenadas que representam a posição de um evento, estrutura física ou um objeto geográfico qualquer no espaço. Em geral, são usados para indicar um local específico.
Na nossa tarefa, vamos utilizar a função read_sf()
do
pacote sf
para importar os dados de coordenadas das
unidades de saúde {ac_unidades
}, disponível no menu lateral
“Arquivos” do curso, juntamente com os arquivos auxiliares. Importante
baixar todos na mesma pasta.
A função read_sf()
possui como argumento obrigatório
apenas o arquivo a ser importado. Como veremos mais à frente, essa
função é genérica, pois pode ser usada para importar qualquer geometria
(pontos, linhas, polígonos). Agora é com você. Execute o comando abaixo
no seu RStudio
. Lembre-se que os pacotes já devem estar
instalados e carregados.
# Importando dados vetoriais de pontos com a função read_sf() e
# salvando no objeto `ac_unidades`
ac_unidades <- read_sf('Dados/ac_unidades_saude_m.shp')
Vamos aproveitar esta importação para analisar a estrutura do
arquivo. Digite o nome do objeto salvo (ac_unidades
) no
Painel Console e veja o output:
# Analisando o arquivo importado
ac_unidades
#> Simple feature collection with 1008 features and 4 fields
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: -73.22469 ymin: -11.029 xmax: -66.64395 ymax: -7.417815
#> Geodetic CRS: SIRGAS 2000
#> # A tibble: 1,008 × 5
#> uf code_state cod_mun cnes_n geometry
#> <chr> <dbl> <dbl> <chr> <POINT [°]>
#> 1 AC 12 120035 3591018 (-72.68529 -9.309803)
#> 2 AC 12 120001 3638685 (-66.883 -9.828)
#> 3 AC 12 120001 7245890 (-66.883 -9.828)
#> 4 AC 12 120001 7026641 (-67.05353 -10.07714)
#> 5 AC 12 120001 0257184 (-66.883 -9.828)
#> 6 AC 12 120001 3382745 (-66.883 -9.828)
#> 7 AC 12 120001 3006166 (-66.883 -9.828)
#> 8 AC 12 120001 9639896 (-66.883 -9.828)
#> 9 AC 12 120001 3393984 (-66.883 -9.828)
#> 10 AC 12 120001 0153281 (-66.883 -9.828)
#> # … with 998 more rows
#> # ℹ Use `print(n = ...)` to see more rows
Um sumário parecido com o apresentado acima deve ser mostrado no seu
RStudio
. O output contém os seguintes
elementos:
- a quantidade de registros e atributos (número de linhas e colunas);
- o tipo de geometria;
- os limites geográficos dos dados (também chamado de bounding box );
- o sistema de referência (sigla CRS);
- o objeto geográfico em si (sf - simple feature);
- a coluna do tipo lista contendo a geometria (objeto de classe sfc - sigla para simple feature column);
- a geometria individual referente ao objeto geográfico identificado pelo item 5 (objeto de classe sfg - sigla para simple feature geometry).
Reveja os elementos descritos acima identificados na Figura 3:
Figura 3: Arquivo vetorial contendo geometria de pontos importada.
Bem fácil, não é mesmo? Importamos 1008 unidades de saúde, entre postos de saúde, consultórios e hospitais. Vamos agora, importar os demais dados para executar a nossa tarefa.

O formato de arquivo mais utilizado para armazenar dados espaciais é o shapefile. Este arquivo é formado por três arquivos básicos que armazenam informações diferentes e devem, obrigatoriamente, permanecerem na mesma pasta:
- “.shp”: arquivo com os dados da geometria em si;
- “.shx”: arquivo de índice posicional;
- “.dbf”: arquivo de atributos das formas representadas pelo shp.
Eventualmente, também compõem o conjunto de arquivos shapefile:
- “.prj”: arquivo de texto que contém a projeção dos dados;
- “.sbn” e “.sbx”: índice espacial;
- “.shp.xml”: metadados.
Mais recentemente, e devido às limitações do shapefile, o uso de arquivo no formato geopackage têm aumentado. Diferente do shapefile, esse formato, cuja extensão é “.gpkg”, é um arquivo único, comporta várias camadas de geometrias diferentes e suporta tamanhos maiores de bases.
Também os arquivos KML, sigla que se refere a Keyhole Markup Language, têm sido muito utilizados no ambiente das secretarias de saúde. Esse arquivo possui um formato para visualização espacial em aplicativos como Google Earth e Google Maps.
Esses arquivos e muitos outros formatos podem ser lidos no
R
e, inclusive, utilizando a mesma função do pacote
sf
, que será apresentada no próximo tópico.
Para saber mais sobre os tipos de arquivos vetoriais que são aceitos pelo pacote, clique aqui.
b) Linhas
Vamos importar um arquivo vetorial de linhas, {ac_vias
},
que representam as ruas e rodovias do Estado do Acre, disponível no menu
lateral “Arquivos” do curso, juntamente com os arquivos auxiliares.
Importante baixar todos na mesma pasta.
Os dados vetoriais de linhas são conceituados como conjuntos de pares de coordenadas conectados, com início e fim definido. As linhas são usadas para representar objetos geográficos que denotam algum comprimento como estradas ou ruas, por exemplo. Também é utilizada em análises para representar distâncias entre pontos, tendência de deslocamentos, entre outros.
Vamos lá, novamente, utilize a função read_sf
para
importar o arquivo {ac_vias
}. Execute o código abaixo no
seu computador.
# Importando dados vetoriais de linhas com a função read_sf() e
# salvando no objeto `ac_vias`
ac_vias <- read_sf('Dados/ac_vias.shp')
# Analisando o arquivo importado
ac_vias
#> Simple feature collection with 18423 features and 14 fields
#> Geometry type: MULTILINESTRING
#> Dimension: XY
#> Bounding box: xmin: -73.74049 ymin: -11.1454 xmax: -66.6359 ymax: -7.135078
#> Geodetic CRS: SIRGAS 2000
#> # A tibble: 18,423 × 15
#> fid osm_id code fclass name ref oneway maxsp…¹ layer bridge tunnel
#> <dbl> <chr> <dbl> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <chr>
#> 1 45637 379159318 5122 residen… Rua … <NA> B 0 0 F F
#> 2 45632 379159312 5122 residen… Rua … <NA> B 0 0 F F
#> 3 45635 379159315 5122 residen… <NA> <NA> B 0 0 F F
#> 4 45618 379159294 5122 residen… Rua … <NA> B 0 0 F F
#> 5 45639 685642583 5122 residen… <NA> <NA> B 0 0 F F
#> 6 45621 379159297 5122 residen… Rua … <NA> B 0 0 F F
#> 7 45623 379159299 5122 residen… Rua … <NA> B 0 0 F F
#> 8 45625 379159302 5122 residen… Rua … <NA> B 0 0 F F
#> 9 45612 379159287 5122 residen… Rua … <NA> B 0 0 F F
#> 10 45613 379159288 5122 residen… Rua … <NA> B 0 0 F F
#> # … with 18,413 more rows, 4 more variables: NM_MUN <chr>, SIGLA_UF <chr>,
#> # cod_mun <chr>, geometry <MULTILINESTRING [°]>, and abbreviated variable
#> # name ¹maxspeed
#> # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable
names
Podemos perceber que importamos 18423 linhas entre rodovia e ruas. Mais à frente, veremos como podemos visualizar esses dados, inclusive, sobrepondo com os demais dados importados.

Você percebeu que este arquivo vetorial de linhas possui algumas ruas sem nome? Inclusive, algumas ruas que existem podem não estar sendo representadas. Isso é comum na realidade e deve ser uma limitação a ser superada, buscando arquivos mais atualizados. Parcerias com setor de geoprocessamento do município são úteis para acesso a dados mais atuais ou com menos imperfeições.
c) Polígonos
Para finalizar a importação dos dados para executar nossa tarefa,
vamos importar os limites administrativos dos municípios do Acre
presentes no arquivo {ac_municipios
}, disponível no menu
lateral “Arquivos” do curso, juntamente com os arquivos auxiliares.
Importante baixar todos na mesma pasta. Esses limites utilizam a
geometria de um polígono para serem representados.
Polígonos são conjuntos de linhas que possuem, em geral, o mesmo ponto de início e fim, denotando uma estrutura fechada. Representam áreas, territórios, ou uma determinada região de destaque qualquer (por exemplo áreas de risco para alguma doença) ou com características similares (regiões climáticas, biomas).
Utilizando a função read_sf
, importe o arquivo
{ac_municipios
} seguindo o código abaixo.
# Importando dados vetoriais de polígonos com a função read_sf() e
# salvando no objeto `ac_municipios`
ac_municipios <- read_sf('Dados/ac_municipios.shp')
# Analisando o arquivo importado
ac_municipios
#> Simple feature collection with 22 features and 5 fields
#> Geometry type: POLYGON
#> Dimension: XY
#> Bounding box: xmin: -73.99045 ymin: -11.14556 xmax: -66.62368 ymax: -7.111824
#> Geodetic CRS: SIRGAS 2000
#> # A tibble: 22 × 6
#> CD_MUN NM_MUN SIGLA AREA_KM2 cod_mun geometry
#> <chr> <chr> <chr> <dbl> <chr> <POLYGON [°]>
#> 1 1200013 Acrelândia AC 1812. 120001 ((-67.13181 -9.677307, -66.62…
#> 2 1200054 Assis Brasil AC 4979. 120005 ((-69.59034 -10.3717, -69.586…
#> 3 1200104 Brasiléia AC 3928. 120010 ((-69.12866 -10.39925, -69.12…
#> 4 1200138 Bujari AC 3035. 120013 ((-68.2199 -9.242753, -67.976…
#> 5 1200179 Capixaba AC 1706. 120017 ((-67.80225 -10.19873, -67.80…
#> 6 1200203 Cruzeiro do Sul AC 8783. 120020 ((-72.62078 -7.538954, -72.58…
#> 7 1200252 Epitaciolândia AC 1653. 120025 ((-68.6448 -10.61638, -68.643…
#> 8 1200302 Feijó AC 27977. 120030 ((-70.05145 -7.84816, -69.444…
#> 9 1200328 Jordão AC 5357. 120032 ((-71.56361 -8.64941, -71.560…
#> 10 1200336 Mâncio Lima AC 5452. 120033 ((-73.1655 -7.341657, -72.900…
#> # … with 12 more rows
#> # ℹ Use `print(n = ...)` to see more rows
Analisando o arquivo importado, percebemos que os 22 municípios do Acre foram importados. Agora, vamos conhecer as principais funções para visualizar os dados espaciais que importamos.
A visualização de dados espaciais é uma atividade muito comum e, às vezes, confundida com a análise espacial. Isso ocorre porque, com um bom produto de visualização, é possível realizar análises que compõem, de fato, uma análise de dados.

Algumas funções do pacote sf
emitem outputs
similares como os citados acima como, por exemplo a função
st_geometry()
, que tem como argumento principal apenas o
arquivo vetorial a ser avaliado. Repita as linhas a seguir no seu
RStudio
e observe o resultado:
# Visualizando informações sobre o objeto ac_municipios
# com a função st_geometry()
st_geometry(ac_municipios)
#> Geometry set for 22 features #> Geometry type: POLYGON #> Dimension: XY #> Bounding box: xmin: -73.99045 ymin: -11.14556 xmax: -66.62368 ymax: -7.111824 #> Geodetic CRS: SIRGAS 2000 #> First 5 geometries: #> POLYGON ((-67.13181 -9.677307, -66.62689 -9.898… #> POLYGON ((-69.59034 -10.3717, -69.58664 -10.371… #> POLYGON ((-69.12866 -10.39925, -69.12937 -10.40… #> POLYGON ((-68.2199 -9.242753, -67.97684 -9.3527… #> POLYGON ((-67.80225 -10.19873, -67.80008 -10.20…
Para concluir nossa tarefa de visualizar as localizações das unidades de saúde e as ruas de acesso até estas unidades, vamos aprofundar um pouco mais na visualização dos dados espaciais, pois vamos precisar entender as principais funções que permitem essa visualização e quais detalhes podem melhorar a qualidade do nosso trabalho.
3.2.1 Transformação do sistema de coordenadas
Para seguir com a criação dos mapas, vamos realizar um procedimento muito comum ao trabalhar com arquivos vetoriais: a transformação do sistema de coordenadas.
A transformação do sistema de coordenadas deve ser realizada quando:
- A região geográfica da análise possui uma extensão relativamente pequena e sistema de referência do arquivo vetorial está como sistema de coordenadas geográficas e não planas,
- A análise envolver vários arquivos vetoriais e que, eventualmente, alguns estão em sistemas de coordenadas diferentes,
- Os pacotes utilizados para mapeamento possuem um melhor desempenho com sistemas de coordenadas planas.
Para regiões geográficas relativamente pequenas (extensão de um município ou um pequeno grupo de municípios), o sistema de coordenadas planas é indicado, sendo o sistema UTM o mais comum, já que esses locais estão inclusos em um único fuso.
Como já vimos anteriormente, quando a região de interesse tem uma extensão muito grande e está localizada entre dois ou mais fusos, é indicada a adoção da projeção policônica cujo código EPSG é 5880 (Projeção Policônica SIRGAS 2000).
Como podemos perceber na Figura 2, o Estado do Acre está localizado entre os fusos 18 e 19 e, dessa forma, indica que vamos precisar transformar o sistema de coordenadas do nosso arquivo vetorial.
Para verificar qual o sistema de coordenadas estão nossos arquivos,
vamos utilizar a função st_crs()
do pacote sf
.
Essa função possui como argumento principal o nome do arquivo vetorial.
Acompanhe o script abaixo e reproduza-o no seu
RStudio
:
# Verificando o sistema de coordenadas de referência
st_crs(ac_municipios)
#> 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]]
Perceba que na primeira linha já é mostrado o sistema de referência e na última linha mostra o código EPSG. O nosso arquivo, portanto, se encontra no sistema de coordenadas geográficas SIRGAS 2000, código 4674.
Para transformar do sistema de coordenadas geográficas, código 4674,
para coordenadas planas, código 5880 vamos utilizar a função
st_transform()
do pacote sf
. Os argumentos
principais dessa função são:
x
= arquivo vetorial importado pelo pacotesf
. Nesse caso, vamos utilizar {ac_municipios
};crs
= sistema de referência de destino. Neste argumento são aceitos códigos EPSG.
Acompanhe o código abaixo e reproduza no computador:
# Transformando o sistema de coordenadas do objeto `ac_municipios`
# com a função st_transform()
ac_municipios_5880 <- st_transform(x = ac_municipios, crs = 5880)
# Verificando a trasnformação do
# sistema de coordenadas de referência
st_crs(ac_municipios_5880)
#> Coordinate Reference System:
#> User input: EPSG:5880
#> wkt:
#> PROJCRS["SIRGAS 2000 / Brazil Polyconic",
#> BASEGEOGCRS["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]],
#> ID["EPSG",4674]],
#> CONVERSION["Brazil Polyconic",
#> METHOD["American Polyconic",
#> ID["EPSG",9818]],
#> PARAMETER["Latitude of natural origin",0,
#> ANGLEUNIT["degree",0.0174532925199433],
#> ID["EPSG",8801]],
#> PARAMETER["Longitude of natural origin",-54,
#> ANGLEUNIT["degree",0.0174532925199433],
#> ID["EPSG",8802]],
#> PARAMETER["False easting",5000000,
#> LENGTHUNIT["metre",1],
#> ID["EPSG",8806]],
#> PARAMETER["False northing",10000000,
#> LENGTHUNIT["metre",1],
#> ID["EPSG",8807]]],
#> CS[Cartesian,2],
#> AXIS["easting (X)",east,
#> ORDER[1],
#> LENGTHUNIT["metre",1]],
#> AXIS["northing (Y)",north,
#> ORDER[2],
#> LENGTHUNIT["metre",1]],
#> USAGE[
#> SCOPE["Topographic mapping (small scale)."],
#> AREA["Brazil - onshore and offshore. Includes Rocas, Fernando de Noronha
archipelago, Trindade, Ihlas Martim Vaz and Sao Pedro e Sao Paulo."],
#> BBOX[-35.71,-74.01,7.04,-25.28]],
#> ID["EPSG",5880]]
Pronto! É um procedimento relativamente simples, não é mesmo? Agora, vamos seguir com a elaboração dos mapas temáticos, abordando primeiramente o mapa base, a primeira camada da nossa sobreposição. Vamos lá?
3.3 Visualizando dados espaciais
Vários pacotes no R
são úteis para visualizar dados
espaciais. Alguns são mais genéricos, tendo a visualização de dados
espaciais como um dos itens contemplados na visualização de dados, como
é o caso do ggplot2
. Outros possuem funções que abordam de
forma mais específica a visualização de mapas com temas (mapas
temáticos), como é o caso do pacote tmap
e
mapsf
.
Atualmente, um pacote que funciona como uma extensão para o
ggplot2
chamado ggspatial
auxilia em alguns
pontos na padronização da visualização de mapas. Mas, se o objetivo é
apenas uma visualização rápida, a função plot()
, nativa do
R
, pode auxiliar bastante. Vamos conhecer alguns deles no
próximo tópico.
3.3.1 Usando Função base plot()
Agora que já vimos os elementos básicos para um mapa e como utilizar as cores para melhorar a qualidade do nosso produto, vamos iniciar a entender como visualizar os arquivos de dados espaciais.
Vamos iniciar com um arquivo que importamos anteriormente, o
{ac_municipios
}, disponível no menu lateral “Arquivos” do
curso, juntamente com os arquivos auxiliares. Importante baixar todos na
mesma pasta.
Esse arquivo contém dados vetoriais de polígonos, os limites dos municípios do Acre. Contudo, na rotina do trabalho da vigilância no nível municipal, pode haver arquivos que representam bairros, localidades de trabalho da equipe de endemias, áreas de abrangência da estratégia de saúde da família, setor censitário, regiões administrativas ou áreas de planejamento. O funcionamento das funções apresentadas é o mesmo.
Com a função plot()
, que vamos utilizar agora, o
argumento essencial (x
) é o objeto a ser visualizado. É
possível combinar com a função st_geometry()
do pacote
sf
para visualizar apenas a geometria, sem os outros
campos. Faça a plotagem do objeto no seu RStudio
com o
comando a seguir:
# Plotando e visualizando o objeto `ac_municipios`
plot(x = st_geometry(ac_municipios))
Figura 4: Visualizando os limites dos municípios do Acre com a funçãoplot()
.
Bem fácil, não é mesmo? Contudo, essa visualização é útil para atender a objetivos que não são necessários elementos de comunicação, como os apresentados no item 3.1. Mas, para melhorar a qualidade do nosso mapa, alguns outros argumentos podem ser utilizados como, por exemplo:
axes
: plota as coordenadas nos eixos x e y;graticule
: plota uma grade que acompanha as coordenadas;col
: define a cor de preenchimento (no caso de polígonos);xlab
eylab
: define os rótulos dos eixos;main
: apresenta um título centralizado no topo do mapa.
Agora, vamos utilizar estes elementos e criar um mapa mais completo,
embora ainda sem todos os elementos. Execute as linhas a seguir em seu
RStudio
:
# Plotando e visualizando o objeto ac_municipios
plot(
# Definindo o objeto que será utilizado para a visualização do mapa
x = st_geometry(ac_municipios),
# Definindo como verdadeiro o argumento para plotagem das coordenadas
# nos eixos do gráfico
axes = TRUE,
# Definindo como verdadeiro o argumento para plotagem da grade com as
# coordenadas
graticule = TRUE,
# Definindo a cor de preenchimento (código hexadecimal)
col = "#FAFAFA",
# Definindo os rótulos dos eixos x e y
xlab = "longitude",
ylab = "latitude"
)
Figura 5: Limites dos municípios do Estado do Acre.
Na Figura 5 vemos, portanto, os municípios do Estado do Acre. Percebe-se que o Estado do Acre se localiza ao extremo oeste do País, dado seu intervalo de longitude (67º a 74º, oeste, representado pela letra W), e no norte do país, dado seu intervalo de latitude (7º a 11º sul, representado pela letra S).
Agora vamos utilizar o pacote ggplot2
para obtermos uma
melhor qualidade e finalizar nossa tarefa. Veja em seguida e acompanhe
com atenção.
3.3.2 Usando o pacote ggplot2
O pacote ggplot2
é um poderoso recurso para visualização
de dados. Foi criado por Hadley Wickham e faz parte do universo do
tidyverse
, um metapacote projetado com a finalidade de
apoiar as análises na área de ciência de dados. Esse pacote implementa
um sistema de gráficos baseado em uma gramática própria, permitindo a
criação de gráficos avançados.
Essa gramática se encarrega de diversos detalhes que precisariam ser
especificados se fôssemos usar a função plot()
do módulo
base do R
. Ou seja, é mais fácil de utilizar. Como também é
estruturado para sobreposição de camadas, traduz muito bem o
comportamento de softwares de informação geográfica. Além
disso, integra muito bem com os demais pacotes do tidyverse
e possui várias extensões que potencializam seu uso.
Vamos lá! Agora vamos sobrepor as camadas de arquivos importados
anteriormente (unidades de saúde, ruas e limites de municípios) para
completar nossa tarefa. Para isso, vamos utilizar a função
geom_sf()
que plota camadas de objetos importados pelo
pacote sf
. Essa função tem como argumento obrigatório
data
, que se refere ao objeto sf
importado.
Vamos utilizar também argumentos estéticos como:
fill
: cor do preenchimento quando o objeto for composto por polígonos e,color
: cor das linhas e pontos, quando o objeto for compostos por estas geometrias.
Execute o seguinte código no seu computador e observe o mapa que é gerado:
# Utilizando a função ggplot() para plotagem dos mapas
ggplot() +
# Plotando o objeto de polígono com os contornos do estado
# O argumento "fill" define a cor de preenchimento
geom_sf(data = ac_municipios, fill = "#FAFAFA") +
# Plotando o objeto de linhas para visualização de estradas
# O argumento "color" define a cor das linhas
geom_sf(data = ac_vias, color = "#BABABA") +
# Plotando o objeto de pontos para visualização das unidades de saúde
# O argumento "color" define a cor de preenchimento
geom_sf(data = ac_unidades, color = "#FF0000")
Figura 6: Exemplo de sobreposição de arquivos vetoriais utilizando o pacote ggplot2
.
Ficou muito bom, não é mesmo? Está quase pronta nossa tarefa. Perceba
que usamos códigos hexadecimais para definir as cores do preenchimento
dos polígonos e das ruas. Além disso, o ggplot2
possui um
conjunto de configurações contidos em temas que padronizam a cor do
fundo e das linhas da latitude e longitude. Alguns dos temas disponíveis
são:
theme_grey()
(outheme_gray()
): tema padrão (como o visto acima);theme_bw()
: uma variação do padrão que usa fundo branco e linhas cinzas;theme_linedraw()
: um tema com apenas linhas pretas de várias larguras sobre fundo branco;theme_light()
: semelhante ao anterior, mas com linhas e eixos cinza claro, para dirigir mais atenção para os dados;theme_dark()
: “o primo escuro” detheme_light()
, com linhas de larguras semelhantes, mas com um fundo escuro. Útil para fazer saltar linhas de cores finas;theme_minimal()
: um tema minimalista, sem anotações ou fundo;theme_classic()
: Um tema de aspecto “clássico”, com linhas de eixo x e y destacado e nenhuma linha de grade (as linhas internas do gráfico);theme_void()
: um tema completamente vazio, apresentando somente o mapa.
Vamos utilizar o tema theme_bw()
no nosso próximo mapa.
Acompanhe com atenção.
Antes de analisarmos o mapa, vamos seguir os padrões cartográficos
apresentados neste curso. Agora vamos utilizar o pacote
ggspatial
para compor os elementos como escala e seta de
norte. Para isso, vamos utilizar as funções
annotation_scale()
, que sobrepõe uma escala gráfica no mapa
e annotation_north_arrow()
, que sobrepõe uma seta de norte.
Os argumentos dessas funções são:
location
: posição do elemento. Neste argumento podem ser usadas as siglas abaixo:- tr: top right, acima à direita;
- tl: top left, acima à esquerda;
- br: bottom right, abaixo à direita;
- bl: bottom left, abaixo à esquerda.
height
: altura. Necessário utilizar a funçãounit()
do pacoteggplot2
para especificar a unidade de medida que, no nosso caso, será centímetros;style
: somente para a seta. É definido um estilo para a seta.
Também vamos utilizar a função labs()
do pacote
ggplot2
para definir o texto do título (title), do
eixo x (no caso, a longitude), do y (no caso, a latitude) e a fonte dos
dados.
Para as legendas, vamos utilizar o recurso estético da função
aes()
do pacote ggplot2
junto com as funções
scale_color_manual()
e scale_fill_manual()
,
ambas do mesmo pacote ggplot2
. Com a função
aes()
, podemos definir um codinome para a cor que vamos
utilizar nas geometrias (fill e color) e utilizar as
demais para formatar rótulos e cores, propriamente ditas.
Execute o código mostrado abaixo com bastante atenção no seu
RStudio
e observe como fica a composição final do mapa:
# Utilizando a função ggplot() para plotagem dos mapas
ggplot()+
# Adicionando camada com os limites poligonais do estado do AC com o
# objeto `ac_municipios` e a função geom_sf().
# O argumento "fill" define o codinome da cor de preenchimento
geom_sf(data = ac_municipios, aes(fill = "cor_municipios")) +
# Adicionando camada com objeto de linhas representando as vias com o
# objeto `ac_vias` e a função geom_sf()
# O argumento "color" define o codinome da cor das linhas
geom_sf(data = ac_vias, aes(color = "cor_ruas")) +
# Adicionando camada com objeto de pontos representando unidades de
# saúde com o objeto `ac_unidades` e a função geom_sf()
# O argumento "color" define o codinome da cor de preenchimento
geom_sf(data = ac_unidades, aes(color = "cor_unidades")) +
# Definindo a escala gráfica do mapa com a função annotation_scale()
annotation_scale(location = "br",
height = unit(.1, "cm")) +
# Definindo a visualização de seta apontada para o Norte
annotation_north_arrow(location = "tr",
height = unit(1, "cm"),
style = north_arrow_fancy_orienteering) +
# Criando a legenda das linhas e pontos
scale_color_manual(
name = "",
guide = guide_legend(override.aes = list(linetype = c("solid", "blank"),
shape = c(NA, 16))),
values = c('cor_ruas' = '#BABABA', 'cor_unidades' = '#FF0000'),
labels = c("Vias", "Unidades de saúde")
) +
# Criando a legenda dos polígonos
scale_fill_manual(
name = "",
values = c('cor_municipios' = '#FAFAFA'),
labels = "Municípios"
) +
# Definindo o título e rótulos dos eixos do gráfico
labs(title = "Unidades de saúde e arruamento do Estado do Acre, 2022.",
x = "longitude",
y = "latitude",
caption = "Fonte dos dados: IBGE e Ministério da Saúde") +
# Adicionando o tema
theme_bw()
Figura 7: Sobreposição de arquivos vetoriais e composição de mapa com ggplot2()
.
Muito fácil, não é mesmo? Apesar de alguns comandos que podem parecer avançados ou difíceis, com o tempo você se habituará às configurações. O importante é seguir atentamente os códigos apresentados.
Um detalhe que podemos analisar no mapa acima é que, embora a escala utilizada seja para um estado inteiro, impedindo de visualizar detalhes mais próximos, ainda podemos notar as unidades de saúde com uma concentração na região Sul e Sudeste do estado. Nesta região, possivelmente, localizam-se os municípios mais populosos e com maior infraestrutura de saúde disponível, incluindo a capital Rio Branco. Percebemos também que, a Oeste do estado, alguns municípios não possuem estradas de ligação às unidades de saúde. Possivelmente, pode ser unidades localizadas em zona rural ou com acesso somente de barco por rios, dadas algumas características geográficas do Acre.
Vocês perceberam que fizemos uma breve análise somente com os dados que sobrepomos? Essas informações são importantes e podem compor o relatório para apresentar ao diretor geral que solicitou o mapa. Interessante, não é mesmo? Isso demonstra que a capacidade do analista da Vigilância em Saúde pode ir além dos conhecimentos sobre a doença.
Agora vamos entender como cruzar informações de tabelas com os arquivos vetoriais.

Os dados de limites dos municípios podem ser acessados no site do IBGE. Para acessar, acompanhe os passos:
acesse no seu navegador www.ibge.gov.br;
clique no Menu, em Geociências e, em seguida, em Downloads;
siga o seguinte caminho, clicando nas setas da árvore de arquivos:
▸ organizacao_do_territorio ▸ malhas_territoriais ▸ malhas_municipais ▸ município_2021 ▸ Brasil ▸ UFs
Outra forma de realizar o download dos limites dos
municípios, limites dos estados, localização geográfica de unidades de
saúde no Brasil, é utilizando o pacote geobr
. Esse pacote
foi desenvolvido pela equipe do Instituto de Pesquisa Econômica Aplicada
(IPEA) e tem como objetivo possibilitar o download de conjuntos
oficiais de dados espaciais do Brasil.
Sua utilização é bem simples:
# Instalando e carregando o pacote `geobr`
if(!require(geobr)) install.packages("geobr");
library(geobr)
if(!require(sf)) install.packages("sf");library(sf)
# Realizando o download dos municípios do Estado do Acre
ac_municipios_geobr <- read_municipality("AC")
# Visualizando o objeto `ac_municipios_geobr`
plot(st_geometry(ac_municipios_geobr))
Figura 8: Exemplo de visualização utilizando dados do pacotegeobr
.
E por último, uma forma de realizar o download das vias é o
pacote osmextract
, que baixa dados do projeto Open
Street Map.
# Instalando e carregando o pacote `osmextract`
if(!require(osmextract)) install.packages("osmextract");
library(osmextract)
# Realizando o download dos dados do Estado do Acre
# e filtrando apenas as vias
ac_via_osm <- oe_get(place = "Acre") |>
filter(!is.na(highway))
# Visualizando o objeto `ac_via_osm`
plot(st_geometry(ac_via_osm))
Figura 9: Exemplo de visualização utilizando dados do pacoteosmextract
.