Python Folium 绘制交互式地图

https://github.com/WangZhangyu/Interactive_map

Folium

folium是python非常好用的交互式地图工具包,今天我们用folium来绘制简单精美的地震分布热力图。
我们选择川滇部分地区,蓝色方框圈定的区域进行绘制。橙色圆圈代表的是AETA 观测台站,黑色圆圈代表的是地震(ML3.5以上),黑色圆圈越大,震级越大。绘制地震分布的热力图,我们可以非常清晰的看到地震的集中分布情况。

地震分布热力图
绘制结果以.html的格式保存,我们可以对地图随意的放大缩小,当鼠标停留在黑色圆圈(地震)上时,地图会显示地震的发震时间和震级信息;当鼠标停留在橙色圆圈(台站)上时,会显示对应的台站名称。
交互式地图

  • 安装Folium 库
pip install folium 
  • 导入必要的库
import folium
import pandas as pd
import webbrowser
from folium.plugins import HeatMap
  • 加载AETA台站的信息并显示
cdata = pd.read_csv('StationInfo.csv')
for lat, lon,label  in zip(cdata.Latitude, cdata.Longitude, cdata.Title):
    incidents.add_child(
        folium.CircleMarker(
            [lat, lon],
            radius=7, 
            color='yellow',
            fill=True,
            fill_color='red',
            fill_opacity=0.4,
            tooltip=label
        )
    )
  • 加载并绘制地震目录信息
eq = pd.read_csv('eqlst.csv')
for lat, lon, mag, time  in zip(eq.Latitude, eq.Longitude, eq.Magnitude,eq.Time):
    incidents.add_child([图片上传中...(catalog.jpg-6f9441-1618157345666-0)]

        folium.CircleMarker(
            [lat, lon],
            radius=(mag-3)*4, 
            color='black',
            fill=True,
            fill_color='black',
            fill_opacity=0.5,
            weight = 0.001,
            stroke = False,
            tooltip= '%s ML %.f' % (time,mag)
        )
    )
  • 绘制地震分布热力图
heatdata = eq[['Latitude','Longitude','Magnitude']].values.tolist()
HeatMap(heatdata).add_to(incidents)
  • 完整代码
"""
Created on Sun Apr 11 20:40:32 2021

@author: Zhangyu Wang
"""
import folium
import pandas as pd
import webbrowser
from folium.plugins import HeatMap

# Chuandain latitude and longitude
latitude = 28
longitude = 102.5

# instantiate a feature group for the incidents in the dataframe
incidents = folium.map.FeatureGroup()

# read stations 
cdata = pd.read_csv('StationInfo.csv')
for lat, lon,label  in zip(cdata.Latitude, cdata.Longitude, cdata.Title):
    incidents.add_child(
        folium.CircleMarker(
            [lat, lon],
            radius=7, 
            color='yellow',
            fill=True,
            fill_color='red',
            fill_opacity=0.4,
            tooltip=label
        )
    )
        
# read catalog
eq = pd.read_csv('eqlst.csv')
for lat, lon, mag, time  in zip(eq.Latitude, eq.Longitude, eq.Magnitude,eq.Time):
    incidents.add_child(
        folium.CircleMarker(
            [lat, lon],
            radius=(mag-3)*4, 
            color='black',
            fill=True,
            fill_color='black',
            fill_opacity=0.5,
            weight = 0.001,
            stroke = False,
            tooltip= '%s ML %.f' % (time,mag)
        )
    )
            
# catalog heatmap
heatdata = eq[['Latitude','Longitude','Magnitude']].values.tolist()
HeatMap(heatdata).add_to(incidents)


# add a single earthquake
incidents.add_child(folium.Marker([28.9, 103.3],icon=folium.Icon(color='red'), tooltip='M = 4.0'))

# add area border
ls = folium.PolyLine(locations=[[22,98],[22,107],[34,107],[34,98],[22,98]],color='blue')
ls.add_to(incidents)

# add incidents to map
my_map = folium.Map(location=[latitude, longitude], zoom_start=6)
my_map.add_child(incidents)

# add latitude and longitude in the map when click
my_map.add_child(folium.LatLngPopup())

# save map
my_map.save('Chuandian_aeta.html')
webbrowser.open('Chuandian_aeta.html')
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值