Aprenda Python - Construa aplicações reais
Construindo Mapas Web usando o Folium
Vamos construir nosso mapa da web usando Python e Folium. Vocês todos estão cientes do Python, então deixe-me falar sobre o Folium.
É basicamente uma biblioteca de visualização de dados para visualizar dados geoespaciais ou dados que envolvem coordenadas e locais. Você encontrará mais sobre folium em sua página oficial do projeto.
Além disso, se você é completamente novo e não sabe como instalar bibliotecas externas, recomendo que você use o "pip", que é um sistema de gerenciamento de pacotes / bibliotecas, usado por desenvolvedores python.
Para instalar o pip, execute o seguinte comando no seu terminal.
$ sudo apt install python3-pip
Ótimo! Você acabou de instalar o pip e agora está pronto para instalar sua primeira biblioteca externa. Para instalar a biblioteca de fólio, execute o seguinte comando no seu terminal.
pip install folium
Passo 1 - Criando um Mapa Base
Há um provérbio que diz: "Não use muito onde um pouco serve", enquanto acrescento minha filosofia a isso, eu propus: "Comece do básico e não use muito onde um pouco faça . ”É de extrema importância que partamos do básico. Seja aprendendo uma linguagem de programação ou aprendendo a dirigir. Noções básicas primeiro. Então adicione pouco a pouco. Sempre.
Vamos criar um mapa base. Primeiro, nós importamos a biblioteca. Agora, criamos nosso mapa com folium.Map, que leva o local em que você deseja que seu mapa comece. Você pode adicionar parâmetros adicionais, como o zoom predefinido e a aparência do mapa, mas mais sobre isso depois. Agora você criou seu mapa básico. Eu acredito que esta é a maneira mais fácil de criar um mapa.
Pra pensar: Onde coloco o mapa.html? Você não coloca, quando executar o script em python, ele criará o arquivo para você no diretório de trabalho atual!
#Importa a biblioteca
import folium
#Cria o mapa base
map = folium.Map(location=[-20.807382,-49.360453], zoom_start = 4)
#Salva o mapa
map.save("mapa.html")
Salve o script python com Geo.py em um diretório especifico para o programa e execute com o comando: python Geo.py.
Em seguida vá ao diretório de trabalho e abra o mapa.html que foi gerado automaticamente e voilà!
mapa.html gerado automaticamente pelo script python |
Passo 2 - Adicionar Marcador
Marcador, é um ponto no mapa, e é a característica mais importante da terminologia do mapa inteiro. Vamos adicionar um marcador ao nosso mapa com folium.Marker, que também usa o local no qual você deseja apontar alguns parâmetros adicionais, como o que o pop-up exibirá e como ficará o ícone.
Coisas fáceis. Agora, o importante, você vê isso .add_to (map)? Estamos adicionando o marcador que criamos ao mapa que criamos anteriormente. Sem isso, o marcador será criado, mas não será adicionado ao nosso mapa. Assim, você verá o mesmo mapa básico em branco que criamos anteriormente.
#Importa a biblioteca
import folium
#Cria o mapa base
map = folium.Map(location=[-20.807382,-49.360453], zoom_start = 10)
#Add marcador
folium.Marker(location=[-20.800385, -49.367797], popup = "Gold System", icon=folium.Icon(color = 'green')).add_to(map)
#Salva o mapa
map.save("mapa.html")
Notou algo diferente no código?
Adicionamos mais um parâmetro em nosso mapa básico. Alguma ideia do que é isso? Não? Tudo bem, olhe para o mapa.
mapa.html com marcador |
"Tiles" é um parâmetro para alterar o plano de fundo do mapa ou para alterar quais dados são apresentados no mapa, ou seja, ruas, montanhas, mapa em branco, etc.
É isso, seu mapa está pronto com um marcador e um design mínimo. Porque menos é mais.
Passo 3 - Adicionar vários marcadores
Adicionar vários marcadores é fácil. Tudo o que você precisa fazer é executar um loop "for" com todas as coordenadas que deseja mostrar. Como discutido anteriormente, o básico, vamos começar com dois.
#Importa a biblioteca
import folium
#Cria o mapa base
map = folium.Map(location=[-20.807382,-49.360453], zoom_start = 10)
#Multiplos marcadores
for coordinates in [[-20.800385, -49.367797],[-20.800154, -49.368665]]:
folium.Marker(location=coordinates, icon=folium.Icon(color = 'green')).add_to(map)
#Salva o mapa
map.save("mapa.html")
mapa.html com múltiplo marcadores |
Etapa 4 - Adicionando Marcadores de Dados
Um mapa bem legal que criamos. Mas e se você tiver 500 marcadores? Você vai escrever todos eles? - Claro que não. Você deve carregar dados e extrair dados de relevância para plotar seus marcadores. Aqui, nós adicionamos os dados de vulcões nos Estados Unidos. Você encontrará os dados aqui.
Primeiro, nós carregamos dados com a ajuda do Pandas, que é uma biblioteca de manipulação de dados comumente usada. Consulte esta página para aprender o básico dos pandas. O arquivo de dados inclui colunas como o nome do vulcão, onde está, elevação, latitude e longitude.
Precisamos de latitude e longitude para traçar marcadores e para exibir um pop-up, vamos precisar de elevação. Portanto, vamos extraí-lo e armazená-lo em nossas variáveis. Executar um loop for e aí está, todos os marcadores com apenas 2 linhas de código.
#Importa a biblioteca
import folium
import pandas as pd
#carrega os dados
data = pd.read_csv("volcanos_USA.txt")
lat = data['LAT']
lon = data['LON']
elevation = data['ELEV']
#Cria o mapa base
map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = "Mapbox bright")
#Plot Markers
for lat, lon, elevation in zip(lat, lon, elevation):
folium.Marker(location=[lat, lon], popup=str(elevation)+" m", icon=folium.Icon(color = 'gray')).add_to(map)
#Salva o mapa
map.save("map2.html")
Vulcões nos EUA |
Passo 5 - Cores
Você adicionou todos os marcadores, mas todos são da mesma cor, e que não contam uma história. Então, vamos agrupá-los por elevação <1000 1000="" 3000="" e="" entre=""> 3000 e definir a cor para verde, laranja e vermelho, respectivamente.1000>
Você tem que criar uma função usando os loops if-else simples e chamá-la no lugar de definir uma cor.
#Importa a biblioteca
import folium
import pandas as pd
#carrega os dados
data = pd.read_csv("volcanos_USA.txt")
lat = data['LAT']
lon = data['LON']
elevation = data['ELEV']
#Funcão pra mudar as cores
def color_change(elev):
if(elev < 1000):
return('green')
elif(1000 <= elev <3000):
return('orange')
else:
return('red')
#Cria o mapa base
map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = "Mapbox bright")
#Plot Markers
for lat, lon, elevation in zip(lat, lon, elevation):
folium.Marker(location=[lat, lon], popup=str(elevation)+" m", icon=folium.Icon(color = color_change(elevation))).add_to(map)
#Salva o mapa
map.save("map2.html")
Agora o mapa com as cores:
Os vulcões nos Estados Unidos ficaram coloridos |
Etapa 6 - Alterar ícones
Vamos admitir que o ícone atual pode parecer bom, mas não é o melhor. É grande e parece que estamos criando o mapa nos anos 90. Então vamos mudá-los. Espero que isso seja auto-explicativo.
Mude a seguinte linha:
folium.CircleMarker(location=[lat, lon], radius = 9, popup=str(elevation)+" m", fill_color=color_change(elevation), color="gray", fill_opacity = 0.9).add_to(map) #Save the mapmap.save("map1.html")
E teremos:
Agora parece bom. Não é bom, mas bom.
O que faremos para torná-lo ótimo? Alguma ideia? Eu tenho uma.
Apresento a você, o modo escuro. Para transformar o seu em todo preto, use tiles = “dark_matter do CartoDB”:
Modo escuro |
Passo 7 - Agrupe todos os marcadores
Ficou bom, mas e se você tiver 300 marcadores por estado? Então parece tudo bagunçado. Para isso, temos que agrupar todos os marcadores e, à medida que aumentamos o zoom no mapa, o cluster se desdobra.
Para fazer isso, primeiro temos que criar um cluster usando o método MarkerCluster, que você encontrará sob a biblioteca folium.plugins, e em vez de adicionar todos os marcadores ao nosso mapa via .add_to (map), vamos adicioná-los a nosso cluster via .add_to (nome do cluster), que no nosso caso é .add_to (marker_cluster).
A medida que você aumenta e diminui o zoom do mapa, todos os clusters se desdobram e se dobram automaticamente e se parecerão com algo assim.
#Importa a biblioteca
import folium
from folium.plugins import MarkerCluster
import pandas as pd
#carrega os dados
data = pd.read_csv("volcanos_USA.txt")
lat = data['LAT']
lon = data['LON']
elevation = data['ELEV']
#Funcão pra mudar as cores
def color_change(elev):
if(elev < 1000):
return('green')
elif(1000 <= elev <3000):
return('orange')
else:
return('red')
#Cria o mapa base
map = folium.Map(location=[37.296933,-121.9574983], zoom_start = 5, tiles = "CartoDB dark_matter")
#Cria o cluste
marker_cluster = MarkerCluster().add_to(map)
#Plota os marcadores e add em 'marker_cluster'
for lat, lon, elevation in zip(lat, lon, elevation):
folium.CircleMarker(location=[lat, lon], radius = 9, popup=str(elevation)+" m", fill_color=color_change(elevation), color="gray", fill_opacity = 0.9).add_to(marker_cluster)
#Salva o mapa
map.save("map2.html")
Clusters |
Nenhum comentário:
Postar um comentário