数据可视化-Python中的folium的图层层级控制
Folium是一个基于leaflet.js的python地图库,本文简单介绍下folium的图层的结构设计和多个图层控制的实现:
Folium的元素架构
Folium官方文档中写的比较散,我这里画了个元素的架构示意图。
https://python-visualization.github.io/folium/
- Map属性是Folium的基本属性。
- 三类(Vector_Layer、Raster_Layer、EtraFeatures)图层元素可以通过add_to()方法添加在Map中
- 同一个Map下,实现多个图层,通过定义多个FeatureGroup()方法,并通过add_to()到Map中实现,再使用LayerControl()方法在web中实现图层的切换控制。
举例说明:
在一个Map中呈现一个由Marker组成的散点图层和一个由Polygon组成的多边形图层,并通过LayerControl()方法切换,代码仅作为示意。
#创建map
Grid_map = folium.Map(location=[30,120], zoom_start=10)
#创建一个Polygon的FeatureGroup
gridgroup = folium.FeatureGroup(name='Grid_Layer', control=True)
##创建一个Marker的FeatureGroup
pointsgroup = folium.FeatureGroup(name='Points_Layer', control=True)
#创建marker_cluster对象并作为pointsgroup的child:
marker_cluster = plugins.MarkerCluster().add_to(pointsgroup)
#创建Marker并加到marker_cluster中
for name,row in full.iterrows():
folium.Marker([row["纬度"], row["经度"]], popup="{0}:{1}".format(row["地市"], row["关联小区名称"])).add_to(marker_cluster)
#将pointsgroup作为Map的child
Grid_map.add_child(pointsgroup)
#创建polygon并作为gridgroup的child:
folium.Polygon(points_latlon,color='darkred',opacity = 0,fill_color='darkred',fill_opacity = 0.5).add_to(gridgroup)
#将gridgroup作为Map的child
Grid_map.add_child(gridgroup)
#打开map的LayerControl
folium.LayerControl().add_to(Grid_map)
#将Map保存到本地
Grid_map.save(Output_html)