写在前面
库
如标题所示,绘制地图所需要的核心库便是folium
,官方文档中有对folium
更全面的使用教程,本篇博文仅限于在地图上标记、注释等部分。
使用环境
所有的代码及演示均默认在Jupyter Notebook下运行。
正式开始
folium的安装
要完成这个实例,首先要先将所需的库import
进来,如果没有安装该库,可用conda安装:
conda install folium -c conda-forge
当然,也可以用pip install folium
安装,不过安装Anaconda以后会附带Jupyter Notebook,正好可以用于此次开发:
显示地图
首先,我们展示一张世界地图,直接使用语句folium.Map()
即可:
显然,这一张粗略的世界地图能展示的信息少得可怜,我们需要将地图变得更加细致,精确到某一地区,这样才有足够的价值。
于是,我们可以给folium.Map()
函数传递一个初始坐标,这个坐标用一个长度为2的list
表示,0位为纬度,1位为经度,以广州为例:
m = folium.Map(location=[23.13,113.27])
同时,我们可以调整初始的放大比例,这需要用到zoomstart
参数:
除了zoomstart
参数,folium.Map()
函数还有许多别的参数,可以用来更换图层风格、地图数据来源:
这些操作,可在官方文档做进一步学习,这里采用默认的OpenStreetMap。
为地图做标记
做标记主要用到folium.Marker().add_to()
函数,Marker()
后面的括号可以对标记做一些设置,add_to()
后面的括号自然就是要添加标记的地图名字。
最基础的就是加一个普通的空白标记,只需要在Marker()
中传入经纬度坐标即可,下图就把广州塔所在的位置标注了出来:
import folium
m = folium.Map(location=[23.13,113.27], zoom_start=12)
CantonTower=[23.10900,113.31915]
folium.Marker(CantonTower).add_to(m)
除了位置,这些标记还可以携带一些文字信息,分为popup
和tooltip
。其中,popup
是点击标签后弹出的内容,而tooltip
则是鼠标停在标签上就会显示的内容。
以folium.Marker(CantonTower,popup=parse_zhch('中国第一高塔'),tooltip=parse_zhch('广州塔')).add_to(m)
为例,鼠标悬停时:
点击标签时:
要注意,直接传入中文会导致乱码,需要下面的函数进行一次转换:
def parse_zhch(s):
return str(str(s).encode('ascii' , 'xmlcharrefreplace'))[2:-1]
除了文字信息,标记的图案和颜色也是可以修改的,例如:
folium.Marker(Cailan,popup=parse_zhch('特色点心'),tooltip=parse_zhch('蔡澜港式点心'),icon=folium.Icon(color='green',icon='glyphicon-cutlery')).add_to(m)
更多的图案,可以在这个网站上寻找。
由于是外国网站,所以访问和使用图案的时候,需要“科学上网”。
能够提供图案的不止这一家网站,例如另一个网站,只是调用图案的语句有所不同:
folium.Marker(
location = Cailan,
popup=parse_zhch('233'),
icon=folium.Icon(color='green' , prefix='fa' , icon='adjust')
).add_to(m)
但是这个网站上的一些图案博主即使开“科学上网”也无法正常使用,有些不开就能用,令人摸不着头脑。
人机交互
除了上述打标记并弹出文字的方式外,还有一些其他的与地图交互的方式,比如加上如下语句,就可以在点击地图时显示对应坐标的纬度与经度:
m.add_child(folium.LatLngPopup())
还可以通过这个语句,使得点击过后会在地图上生成新的标记,这个标记同样可以有popup
。不过,上述其他对标记的魔改似乎无法在这种情况下生效:
m.add_child(folium.ClickForMarker(popup='wow'))
失败案例:
成功案例:
保存地图
保存就很简单,使用地图名.save("文件名.html")
即可,生成的文件会保存在.ipynb
同一目录下:
需要注意的是,如果用国外网站的图案魔改了标记,保存时也要打开“科学上网”才行。