数据可视化-Python中的folium的图层层级控制

数据可视化-Python中的folium的图层层级控制

Folium是一个基于leaflet.js的python地图库,本文简单介绍下folium的图层的结构设计和多个图层控制的实现:

Folium的元素架构

Folium官方文档中写的比较散,我这里画了个元素的架构示意图。
https://python-visualization.github.io/folium/
在这里插入图片描述

  1. Map属性是Folium的基本属性。
  2. 三类(Vector_Layer、Raster_Layer、EtraFeatures)图层元素可以通过add_to()方法添加在Map中
  3. 同一个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)

实现的效果如下:在map中得到两个可以切换的Layer

在这里插入图片描述