folium的一些定制化操作

folium是一个非常好的画图包,可以在地图上标点、画线、标区域等。但有时候我们需要定制化的操作,本文将详细介绍一些常用的一些定制化方法。

地图本地化

现在folium画图生成的html打开有时候很慢,而且有某些地方有不方便展示的界面,都需要做调整。

比如上图,细心的朋友会发现左下角有个乌克兰的国旗,这是因为folium包的作者是强烈的乌克兰支持者。这里也要提醒大家,大家在使用开源包的时候,一定要多关注这些细节。

具体要解决这个问题其实很简单,把html后台连接的包都下载下来放在本地,然后把渲染国旗的文件底层代码改动一下就行了。具体操作请参照我前面一篇文章。 

文章:

folium底图本地化处理

换地图底图

这个很常用,直接给代码大家就熟悉了。

import folium
from updatemymap import update_mymap
m = folium.Map(location=[23.58340833,116.3399418],
                        zoom_start=9, zoom_control='False', control_scale=True,
                        tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
                        attr='© Python学习杂记' )

# 将自定义图标添加为标记到地图上
folium.Marker(location=[23, 122], popup="中心",icon=folium.Icon(icon='cloud', icon_size=(100, 100))).add_to(m)

# 保存地图对象为HTML文件
m.save("output.html")
update_mymap("output.html")#更新本地化
的地图

update_mymap是我自己写的一个替换底图的程序,把链接外部的文件都下载到本地,读取本地文件就好。

标记个性化

标记可以改成自己想要的类型,可以自己上传一张图片,把它作为标记画入图中,


# 创建自定义图标对象(这里我图方便,三个图标都用一张图,大家可以换不同的图测试)
my_icon = folium.features.CustomIcon('tp.jpg', icon_size=(24, 24))
my_icon1 = folium.features.CustomIcon('tp.jpg', icon_size=(24, 24))
my_icon2 = folium.features.CustomIcon('tp.jpg', icon_size=(24, 24))
# 将自定义图标添加为标记到地图上
folium.Marker(location=[23, 122], popup="中心1",icon=my_icon).add_to(m)

folium.Marker(location=[23, 123], popup="中心2",icon=my_icon1).add_to(m)

folium.Marker(location=[23, 124], popup="中心3",icon=my_icon2).add_to(m)

# 保存地图对象为HTML文件
m.save("output.html")
update_mymap("output.html")

tp.jpg是我在本地放的一张图,

数据分组展示

这里主要使用folium.FeatureGroup函数实现,把每组数据给到相应的组别中。

import folium
from updatemymap import update_mymap
m = folium.Map(location=[23.58340833,116.3399418],
                        zoom_start=9, zoom_control='False', control_scale=True,
                        tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
                        attr='© Python学习杂记' )

# 创建多个FeatureGroup,用于存放不同的点集
group1 = folium.FeatureGroup(name='分组1')
group2 = folium.FeatureGroup(name='分组2')
group3 = folium.FeatureGroup(name='分组3')
# 创建自定义图标对象
my_icon = folium.features.CustomIcon('tp.jpg', icon_size=(24, 24))
my_icon1 = folium.features.CustomIcon('tp.jpg', icon_size=(24, 24))
my_icon2 = folium.features.CustomIcon('tp.jpg', icon_size=(24, 24))
# 将自定义图标添加为标记到地图上
folium.Marker(location=[23, 122], popup="中心1",icon=my_icon).add_to(group1)

folium.Marker(location=[23, 123], popup="中心2",icon=my_icon1).add_to(group2)

folium.Marker(location=[23, 124], popup="中心3",icon=my_icon2).add_to(group3)

# 将FeatureGroup添加到地图上
group1.add_to(m)
group2.add_to(m)
group3.add_to(m)

# 添加图层控制,实现交互选择显示不同的点集
folium.LayerControl().add_to(m)
# 保存地图对象为HTML文件
m.save("output.html")
update_mymap("output.html")

这里还要提示一个技巧,本来分组默认是出现组别是folium.Map里面的titles,

可以通过修改底图文件,改成自定义的组别名字,我已经把这些封装在update_mymap函数里。

folium画图功能非常强大,还有很多定制化做图大家都可以继续研究。

请使用浏览器的分享功能分享到微信等