数据可视化-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()方法切换,代码仅作为示意。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #创建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) |