Geopandas – using multiple layers to enhance the map visualization

Mesmo usando os comandos e procedimentos certos, nem sempre se consegue obter os melhores mapas com a riqueza de detalhes que o projeto exige. Por isso é importante usar certos truques e/ou recursos adicionais para obter o máximo de uma aplicação.

Projeto:

Digamos que queremos visualizar estruturas, como por exemplos, massas de água, com dimensões onde a maior seja milhares vezes maior que a menor, num simples gráfico 2D sem nenhum recurso de zoom. Imediatamente, vê-se que algumas dessas estruturas vão ficar invisíveis, quando comparando-se as maiores com as menores. Sem usar zoom, a solução seria plotar o mapa por partes para visualizar o máximo ou tentar intensificar cada estrutura.

Dataset:

Quanto mais variadas forem as bases de dados que temos para trabalhar, maior serão nossos desafios e, consequentemente, mais aprenderemos. Sendo assim, trago uma base bem interessante que é a Massa d'Água da Região Atlântico Sul localizada no PORTAL BRASILEIRO DE DADOS ABERTOS. Nele constam todas (ou quase) as massas de água do Rio Grande do Sul, com arquivos nos formatos KML, GeoJSON, CSV, shapefile e outros. Aqui tem uma revisão sobre os formatos. Os arquivos possuem diversos atributos como IDshape_Lengshape_AreaGeometry e muito mais.

Execução

Para exemplificar melhor, a Figura 1 mostra o mapa das massas de água Atlântico Sul, do Rio Grande do Sul. Vê-se que há diferença considerável entre os tamanhos das massas de água e, que as menores são quase imperceptíveis.

Figura 1: mapa das massas de água Atlântico Sul.

Uma alternativa para tentar melhor a visualização seria traçar as bordas de cada estrutura. Para isso deixaríamos a cor da massa de água transparente, para o contorno se sobressair. Aplicando o comando para realizar a tarefa, ficaria arquivo.plot(facecolor=”none”, edgecolor=”blue”). Contudo, isso causaria uma certa confusão, pois os argumentos “none” e None são diferentes quando se usa “facecolor” , eles têm funções opostas. O melhor procedimento é usar arquivo.boundary.plot() . Este contexto é mais explícito e claro para o módulo de plotagem. A Figura 2 exemplifica o resultado da operação. Ainda assim, não parece um resultado muito bom, pois massas de água pequenas ou sinuosas parecem estar preenchidas e não é possível fazer distinção entre estruturas muito próximas.

Figura 2: Contorno das massas de água

Melhorando o resultado

Bom, o meu truque para intensificar a visualização é usar múltiplas camadas. Usaremos uma camada para o contorno e outra para o preenchimento. Quando se usa múltiplas camadas, usa-se zorder para controlar a ordem em que as camadas aparecem e, aí vem a segunda parte do truque que é ordenar de forma correta as camadas, pois se ordenar errado o preenchimento fica por baixo e não aparecerá. A terceira parte, que é opcional, é adicionar cor variável as massas de água, a variação pode estar relacionada ao ID da estrutura ou ao tamanho. A Figura 3 mostra o resultado. Melhor, né?

Figura 3: Sobreposição e ordenação das camadas para melhorar o mapa.

Código completo

import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt

gdf = gpd.read_file('DATA_SETS\MASSAS_DAGUA\Atlantico_Sul.shp')
gdf = gdf.dropna()
gdf.shape
gdf.head()
# Figura 1
gdf.plot(figsize=(14, 8));

# Figura 2
gdf.boundary.plot(figsize=(14, 8));

# Figura 3
ax = gdf.plot(figsize=(14, 8), column='objectid', cmap='brg', zorder=2)
gdf.boundary.plot(ax=ax, zorder=1);

Conclusão

Para quem está iniciando com Geopandas e mapeamento é importante ter em mente que sempre tem mais de uma maneira de fazer as coisas. Deixe que a imaginação seja a válvula propulsora e Python, o fio condutor, proporcionando uma infinidade de ferramentas para materializar o que a mente idealizar.

Leave A Comment