一、简介

  folium是js上著名的地理信息可视化库leaflet.js为Python提供的接口,通过它,我们可以通过在Python端编写代码操纵数据,来调用leaflet的相关功能,基于内建的osm或自行获取的osm资源和地图原件进行地理信息内容的可视化,以及制作优美的可交互地图。其语法格式类似ggplot2,是通过不断添加图层元素来定义一个Map对象,最后以几种方式将Map对象展现出来。

  而在Map对象的生成形式上,可以在定义所有的图层内容之后,将其保存为html文件在浏览器中独立显示,也可以基于jupyter notebook在一个ipynb文件内部嵌入对应的交互地图,本文即采用后者对应的方法。

二、创建地图

  首先,创建一张指定中心坐标的地图,这里指定中心坐标为上海市(注意,location的格式为[纬度,经度],zoom_start表示初始地图的缩放尺寸,数值越大放大程度越大):

import folium

# 上海地图
m = folium.Map(location=[31.22, 121.48])
m.save('index.html') #显示黑白的街道
b = folium.Map(
location=[31.22, 121.48],
tiles='Stamen Toner',
zoom_start=10
)
b.save('index_test1.html')

mar = folium.Map(
location=[33.41, 115.06],
tiles='Stamen Terrain',
zoom_start=13
)
folium.Marker(
[33.41, 115.06],
popup='Camp Muir'
).add_to(mar) mar.add_child(folium.ClickForMarker(popup='Waypoint'))
mar.save('mar.html')


可以看出,m的类型为folium中的Map,类似ggplot2中显示图形的方式,接下来直接在jupyter notebook调用m即可显示地图(默认的osm资源地址在国外,需要稍许等待):

'''显示m'''
m

通过这样一个简单的例子,可以了解到,folium.Map()即为folium中绘制地图图层的基本函数,其主要参数如下:

  location:tuple或list类型输入,用于控制初始地图中心点的坐标,格式为(纬度,经度)或[纬度,经度],默认为None

  width:int型或str型,int型时,传入的是地图宽度的像素值;str型时,传入的是地图宽度的百分比,形式为'xx%'。默认为'100%'

  height:控制地图的高度,格式同width

  tiles:str型,用于控制绘图调用的地图样式,默认为'OpenStreetMap',也有一些其他的内建地图样式,如'Stamen  Terrain'、'Stamen Toner'、'Mapbox Bright'、'Mapbox Control Room'等;也可以传入'None'来绘制一个没有风格的朴素地图,或传入一个URL来使用其它的自选osm

  max_zoom:int型,控制地图可以放大程度的上限,默认为18

  attr:str型,当在tiles中使用自选URL内的osm时使用,用于给自选osm命名

  control_scale:bool型,控制是否在地图上添加比例尺,默认为False即不添加

  no_touch:bool型,控制地图是否禁止接受来自设备的触控事件譬如拖拽等,默认为False,即不禁止

下面针对上述各参数进行调整演示:

  下面是一个width调整为50%,并施加比例尺的地图:

'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=16,
control_scale=True,
width='50%') '''显示m'''
m

如我们设置的一样,视图只有左半边被地图填充,且在地图的左下角施加了比例尺,标记出了公里和英里的比例尺。

  下面是一个tiles设置为'Stamen Terrain'的地图:

'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15,
tiles='Stamen Terrain') '''显示m'''
m

  tiles为'Stamen Toner'的地图:

'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15,
tiles='Stamen Toner') '''显示m'''
m

三、在图层上添加各种内建的部件

3.1 为地图添加标记部件

  有了最底层的地图,接下来我们就可以利用手里掌握的地理信息数据,根据需要将其展现在地图图层之上,下面是一个简单的示范:

import folium
import os '''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15) '''为m添加标记部件'''
folium.Marker([29.488869,106.571034], popup='<i>Mt. Hood Meadows</i>').add_to(m) '''显示m'''
m

  我们通过folium.Marker()方法,创建了一个简单的标记小部件,并通过add_to()将定义好的部件施加于先前创建的Map对象m之上,下面我们对folium.Marker()的常用参数进行介绍:

  location:同folium.Map()中的同名参数,用于确定标记部件的经纬位置

  popup:str型或folium.Popup()对象输入,用于控制标记部件的具体样式(folium内部自建了许多样式),默认为None,即不显示部件

  icon:folium.Icon()对象,用于设置popup定义的部件的具体颜色、图标内容等

下面是几个简单的例子:

'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15) '''为m添加标记部件,并将部件上的图形设置为云朵'''
folium.Marker([29.488869,106.571034],
popup='Mt. Hood Meadows',
icon=folium.Icon(icon='cloud')).add_to(m) '''显示m'''
m
'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15) '''为m添加标记部件'''
folium.Marker([29.488869,106.571034],
popup='Timberline Lodge',
icon=folium.Icon(color='green')).add_to(m) '''显示m'''
m
'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15) '''为m添加标记部件'''
folium.Marker(
location=[29.488869,106.571034],
popup='Some Other Location',
icon=folium.Icon(color='red', icon='info-sign')
).add_to(m) '''显示m'''
m

3.2 在地图上添加圆圈

  除了单点类型的图形部件,我们还可以在地图上施加指定范围的几何图像,例如圆圈:

'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15,
control_scale=True) '''为m添加标记部件'''
folium.Circle(
radius=100,
location=[29.488869,106.571034],
popup='The Waterfront',
color='crimson',
fill=False,
).add_to(m) '''显示m'''
m

  在folium中我们使用folium.Circle()来绘制指定圆心和半径的圆圈,其主要参数如下:

  location:同folium.Map()中的location,用于控制圆圈的圆心坐标

  radius:int型,用于控制圆圈的半径,单位米,注意,在folium.Circle()中,radius因为半径的单位是米,所以其大小随着我们对地图的缩放程度而进行相应的变化,但在与folium.CircleMarker()方法中的radius参数单位为像素,即其为屏幕上大小固定的一个圆圈,随着地图的缩放,其大小也不会发生变化

  color:str型,用于控制圆圈的颜色,默认为十六进制颜色'#3388ff',即一种蓝色

  fill:bool型,当为True时,圆圈内部将被填充上色彩,默认不填充

  fill_color:str型,控制圆圈内部填充的色彩,默认与color参数一致

  fill_opacity:float型,用于控制圆圈内部填充颜色的透明度,从0.到1.之间,默认为0.2

  popup:str型或folium.Popup()对象,用于控制圆圈的样式,默认为None,即无样式

下面针对上述的主要参数进行演示:

将fill参数设置为True:

'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15,
control_scale=True) '''为m添加标记部件'''
folium.Circle(
radius=100,
location=[29.488869,106.571034],
color='#3388ff',
fill=True,
).add_to(m) '''显示m'''
m

将圆圈内部填充颜色设置为粉色:

'''创建Map对象'''
m = folium.Map(location=[29.488869,106.571034],
zoom_start=15,
control_scale=True) '''为m添加标记部件'''
folium.Circle(
radius=100,
location=[29.488869,106.571034],
color='#3388ff',
fill=True,
fill_color='#FF66CC'
).add_to(m) '''显示m'''
m

3.3 在地图上绘制任意几何图形

  很多时候我们希望在地图上呈现不规则的几何区域,folium.PolyLine()就可以实现这个功能,下面是一个简单的演示:

import folium

m = folium.Map(location=[29.488869,106.571034],
zoom_start=7,
control_scale=True) ls = folium.PolyLine(locations=[[30.588869,105.671034],[29.488869,106.571034],[31.888869,104.971034],[30.588869,105.671034]],
color='blue') ls.add_to(m) m

  folium.PolyLine()的常用参数如下:

  locations:二级嵌套的list,用于指定需要按顺序连接的坐标点,若要绘制闭合的几何图像,需要在传入列表的首尾传入同样的坐标

  color:str型,传入十六进制的颜色,用于控制线条的颜色,默认为'#03f'

  weight:float型,用于控制线条的宽度,默认为5

  opacity:float型,用于控制线条的透明度,默认为0.5

  popup:str型或folium.Popup()对象,用于控制线条样式

3.4 在地图上添加点击触发事件

  有些时候我们希望我们的地图不光是死板的展示信息,还能根据鼠标的点击事件,来唤起更多的信息展示内容,即为地图添加更多的子内容,我们使用add_child()来完成各种子内容的添加,例如:

  1、实现点击地图任意位置获取经纬度信息提示

'''创建Map对象'''
m = folium.Map(
location=[29.488869,106.571034],
tiles='Stamen Terrain',
zoom_start=13
) '''为地图对象添加点击显示经纬度的子功能'''
m.add_child(folium.LatLngPopup())

 

转自:https://cloud.tencent.com/developer/article/1157955

文档:https://python-visualization.github.io/folium/quickstart.html#Getting-Started

https://pypi.org/project/folium/

https://nbviewer.jupyter.org/github/gaonanlee/Visualization-Practice/blob/master/Folium%20Visualization%20Examples.ipynb

python folium 库学习的更多相关文章

  1. python requests库学习笔记(上)

    尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...

  2. python标准库学习-SimpleHTTPServer

    这是一个专题 记录学习python标准库的笔记及心得 简单http服务 SimpleHTTPServer 使用 python -m SimpleHTTPServer 默认启动8000端口 源码: &q ...

  3. python requests库学习

    Python 第三方 http 库-Requests 学习 安装 Requests 1.通过pip安装 $ pip install requests 2.或者,下载代码后安装: $ git clone ...

  4. Python turtle库学习笔记

    1.简介 Python的turtle库的易操作,对初学者十分友好.对于初学者来说,刚学编程没多久可以写出许多有趣的可视化东西,这是对学习编程极大的鼓舞,可以树立对编程学习的信心.当然turtle本身也 ...

  5. python requests库学习笔记(下)

    1.请求异常处理 请求异常类型: 请求超时处理(timeout): 实现代码: import requestsfrom requests import exceptions        #引入exc ...

  6. python中库学习

    一.numpy NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字).在NumPy中维度(dimensions)叫做轴(axe ...

  7. Python标准库学习之zipfile模块

    ZipFile模块里有两个非常重要的class, 分别是 ZipFile和ZipInfo. ZipFile是主要的类,用来创建和读取zip文件,而ZipInfo是存储的zip文件的每个文件的信息的. ...

  8. Python PIL库学习笔记

    1.PIL简介 Python Imaging Library(缩写为PIL)(在新的版本中被称为Pillow)是Python编程语言的开源库,它增加了对打开,操作和保存许多不同图像文件格式的支持.它适 ...

  9. python标准库学习-ftplib

    源码: """An FTP client class and some helper functions. Based on RFC 959: File Transfer ...

随机推荐

  1. element message多次点击出现多个提示框,如何显示一个或者在同一位置显示

    /* message在同一位置弹出 */ /* reset elementUI message */ .el-message { top: 20px !important; } .el-message ...

  2. [OpenCV]基于特征匹配的实时平面目标检测算法

    一直想基于传统图像匹配方式做一个融合Demo,也算是对上个阶段学习的一个总结. 由此,便采购了一个摄像头,在此基础上做了实时检测平面目标的特征匹配算法. 代码如下: # coding: utf-8 ' ...

  3. Java实习生常规技术面试题每日十题Java基础(七)

    目录 1. Java设计模式有哪些? 2.GC是什么?为什么要有GC? 3. Java中是如何支持正则表达式. 4.比较一下Java和JavaSciprt. 5.Math.round(11.5) 等于 ...

  4. 【HTML基础习题】HTML5+CSS3做问卷星登录页面

    源代码下载地址:https://download.csdn.net/download/weixin_44893902/12839539 码云仓库地址: https://gitee.com/ynavc/ ...

  5. Elasticsearch单机安装Version7.10.1

    1.说明 Elasticsearch单机安装, 基于Elasticsearch的7.10.1版本, 在Linux上安装Elasticsearch单机, 使用安装包elasticsearch-7.10. ...

  6. VoIP语音处理流程和知识点梳理

    做音频软件开发10+年,包括语音通信.语音识别.音乐播放等,大部分时间在做语音通信.做语音通信中又大部分时间在做VoIP语音处理.语音通信是全双工的,既要把自己的语音发送出去让对方听到,又要接收对方的 ...

  7. python 使用@property 操作属性时,报“RecursionError:maximun recursion depth exceeded”

    使用@property获取和修改属性,出现报错"RecursionError:maximun recursion depth exceeded",超过了最大的递归深度 原因: 方法 ...

  8. Pytest_常用执行参数详解(3)

    前面讲了测试用例的执行方式,也认识了 -v  -s 这些参数,那么还有没有其它参数呢?答案肯定是有的,我们可以通过 pytest -h来查看所有可用参数. 从图中可以看出,pytest的参数有很多,但 ...

  9. nginxWebUI

    nginx网页配置工具 github: https://github.com/cym1102/nginxWebUI 功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, ...

  10. 小程序canvas绘制纯色圆角区域 setdata数组某一项

    小程序canvas绘制纯色圆角区域: //方法: roundRectPath:function(ctx, x, y, w, h, r) { ctx.beginPath(); ctx.moveTo(x ...