I have used multiple map packages before and after, and finally I still feel that folium is easy to use. It calls third-party map layers in real time to describe, and the operation is relatively smooth.
import folium
#获取地图基底
#0:googleMap, 1: 高德地图,2:腾讯地图
def getMapObject(baseSource=1, centerLoc=[0, 0], baseLayerTitle='baseLayer'):
if baseSource == 0:
m = folium.Map(location=centerLoc,
min_zoom=0,
max_zoom=19,
zoom_start=5,
control=False,
control_scale=True
)
elif baseSource == 1:
#下面的程式将使用高德地图作为绘图的基底
m = folium.Map(location=centerLoc,
zoom_start=5,
control_scale=True,
control=False,
tiles=None
)
folium.TileLayer(tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
attr="© <a href=http://ditu.amap.com/>高德地图</a>",
min_zoom=0,
max_zoom=19,
control=True,
show=True,
overlay=False,
name=baseLayerTitle
).add_to(m)
else:
#下面的程式将使用腾讯地图作为绘图的基底
m = folium.Map(location=centerLoc,
zoom_start=5,
control_scale=True,
control=False,
tiles=None
)
folium.TileLayer(tiles='http://rt{s}.map.gtimg.com/realtimerender?z={z}&x={x}&y={y}&type=vector&style=0',
attr="© <a href=http://map.qq.com/>腾讯地图</a>",
min_zoom=0,
max_zoom=19,
control=True,
show=True,
overlay=False,
name=baseLayerTitle
).add_to(m)
return m
# 用上面大佬写好的方法去调用高德地图或者腾讯地图
b_folium = getMapObject(baseSource=1, centerLoc=[30.174012, 120.214066])
# 下面可以在地图上不同的电放不同的颜色
# df_ss里有四列,'eci', 'latitude', 'longitude', 'target'
# 标识符 纬度 经度 分类
color_ = ['cadetblue', 'lightgreen', 'red', 'white', 'black', 'pink', 'beige', 'darkblue', 'purple', 'darkred', 'darkgreen', 'lightgray', 'blue', 'lightred', 'orange', 'green', 'gray', 'darkpurple', 'lightblue']
for index, j in enumerate(df_ss['target'].value_counts().index):
df_tt = df_ss[df_ss['target']==j]
for i in df_tt.iterrows():
folium.Marker(
location=[i[1]['latitude'], i[1]['longitude']],
popup= f'{
i[0]}',
icon=folium.Icon(color=color_[index], icon='info-sign')
).add_to(b_folium)
The renderings are as follows