Plotar mapas no python

Nesse post, estão dois mapas para serem feitos usando python: o primeiro usa uma camada com os contornos políticos do IBGE e outro busca corpos d’água no OpenStreetMap usando OSMnx. Ambos contam com recursos de marcação de pontos com latitude/longitude e textos escritos diretamente sobre o mapa. Os códigos estão disponíveis no Github (vinioger/plot_map).

Para desenhar os mapas e gerar as imagens, são usados os pacotes Cartopy e Matplotlib. O Cartopy é um pacote Python projetado para processamento de dados geoespaciais visando produzir mapas e outras análises. O Matplotlib é uma biblioteca abrangente para criar visualizações estáticas, animadas e interativas em Python. Você pode instalar esses e outros pacotes necessários criando um ambiente virtual com o conda:

conda create -n maps -c conda-forge osmnx matplotlib cartopy

O pacote OSMnx permite baixar, modelar, analisar e visualizar facilmente redes de ruas e outros recursos geoespaciais do OpenStreetMap. Ele é necessário somente para o script hydro_map.py.

Mapa com camadas (shapefiles)

De modo geral, são necessários dois tipos de dados de entrada: uma camada com os valores de ao menos uma variável com a respectiva localização (latitude e longitude) de cada ponto e outra camada com os contornos geográficos e/ou políticos da região de interesse.

Arquivos que contêm dados geoespaciais em forma de vetor, conhecidos como shapefiles, trabalham como um conjunto de três arquivos, interligados por um único ID para cada unidade espacial: um principal (.shp), que traz o desenho do mapa propriamente, um índice (.shx), que é um indexador de informações para facilitar buscas, e um de banco de dados (.dbf), trazendo informações e atributos das unidades espaciais. Arquivos shapefile com os contornos geopolíticos do Brasil estão disponíveis para Download no FTP do IBGE (ou em outros links, como o do ArcGIS).

O script plot_map.py carrega um arquivo CSV com as informações de cada ponto georreferenciado (colunas “lat,lon,alt”, onde alt é o nome da variável a ser plotada, a altitude) e um shapefile com os contornos políticos do Brasil. Também é possível imprimir o nome da ‘id’ junto ao ponto e faz uma condicional para salvar figura PNG (agora ajustada, com menos branco nas margens) ou somente exibir na tela (basta deixar em branco a variável ‘file_out’).

Como os dados estão definidos em coordenadas geográficas (latitude/longitude), deve-se aplicar o método “PlateCarree()” na projeção (parâmetro “projection”). Também são definidos os formatos dos valores e os eixos. Posteriormente, é acrescentada uma camada com os contornos geopolíticos em linhas pretas de largura 0.5. Por fim, são acrescentados os valores dos pontos e uma barra de cores. O mapa pode ser impresso na tela ou salvo em arquivo PNG.

Mapa com hidrografia (OSM)

A biblioteca OSMnx permite baixar vetores de corpos d’água (rios, lagos, canais) diretamente do OpenStreetMap, baseando-se em uma “Bounding Box” (caixa delimitadora) de coordenadas que você define. O matplotlib e o cartopy desenham esses polígonos sobre um fundo verde claro, simulando a terra firme.

Além disso, o script hydro_map.py adicionar marcadores (ex: ‘X’ vermelho) e textos (ex: nomes de cidades) em coordenadas geográficas específicas. Outro ponto importante é que ele gera automaticamente um “mini-mapa” de localização (neste caso, da América do Sul) no canto da imagem, mostrando exatamente onde a sua área de estudo está no continente.

Dica final

O site bboxfinder permite desenhar um retângulo ou outras formas geomátricas sobre mapa, retornando as coordenadas de seus vértices. Para mais informações sobre o território brasileiro (CSV com informações sobre todos os municípios do Brasil), clique no link.

3 comments

  1. Saudações prezado.
    Apreciei bastante esta sua postagem e tenho interesse nela. Eu sei como desenhar mapa mas ainda não sei como inserir ou seja, desenhar mapas com pontos tal como vc fez.
    Se vc poder me passar o código para inserir os pontos em um mapa agradeço.

    1. Olá, que bom que gostou da postagem, obrigado pela visita. O código que usei para fazer esse mapa e inserir os pontos está nesse link do Github (arquivo plot_map.py) https://github.com/viniroger/plot_map . Os pontos são dados no arquivo info_est.csv, também no link. Se forem poucos pontos, você pode montar essa tabela manualmente, ou consultar de um arquivo que já tenha.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.