Python+folium绘制精美地图的示例详解
作者:可以叫我才哥 发布时间:2023-07-26 13:17:06
1. 准备工作
有朋友可能没用过folium
,它其实就是python
的一个专业绘制地图的第三方库,所以在使用之前需要先安装它。
pip install folium
在安装完成之后,我们可以在jupyterlab
进行演示如下:
import folium
m = folium.Map()
m
默认
对于上面的输出,其实是一个可交互的地图,支持放大缩写拖拽等等。
如果你想将输出存在本地,可以这样来:
m.save('map.html')
可以看到本地就存了这个一个文件,浏览器打开就可以进行交互式操作了。
map文件
2. 关于folium.Map()
在上一部分我们可以看到这个map
玩意直接就是一个地图啦,这里我们就介绍一下它常用的几个参数。
folium.Map(
location=None,
width='100%',
height='100%',
left='0%',
top='0%',
position='relative',
tiles='OpenStreetMap',
attr=None,
min_zoom=0,
max_zoom=18,
zoom_start=10,
min_lat=-90,
max_lat=90,
min_lon=-180,
max_lon=180,
max_bounds=False,
crs='EPSG3857',
control_scale=False,
prefer_canvas=False,
no_touch=False,
disable_3d=False,
png_enabled=False,
zoom_control=True,
**kwargs,
)
参数可真多啊!!
没有参数的folium.Map()
将得到一张世界地图。
location:地图中心,[40.002694, 116.322373]是清华大学校区;
zoom_start:比例尺,默认为10级,大约是一个城市的范围;
其他常用参数包括:
width
和height
:地图的长宽,如果是int则表示像素值,如果是str则表示百分比;max_zoom
:地图可以手动调节的最大比例,默认为18级;control_scale
:是否在地图上添加比例尺,默认为False;no_touch
:是否禁止手动操作,默认为False;tiles:地图样式,默认为OpenStreetMap
attr
:如果设置非内建地图样式,则需要传入这个值,可以理解为你选择的地图样式名称
以上是常用的一些参数,而最常用的莫过于 location
、zoom_start
和tiles
等。
内建地图样式还有一下几种:
- "OpenStreetMap"
- "Mapbox Bright" (Limited levels of zoom for free tiles)
- "Mapbox Control Room" (Limited levels of zoom for free tiles)
- "Stamen" (Terrain, Toner, and Watercolor)
- "Cloudmade" (Must pass API key)
- "Mapbox" (Must pass API key)
- "CartoDB" (positron and dark_matter)
我们简单试下location
和zoo_start
参数:
import folium
m = folium.Map([40.002694, 116.322373],
zoom_start=15,
control_scale=True
)
m
可以看到清华大学校区
清华大学校区
以上对Map
的参数进行了简单的介绍,接下来,我们就来看看地图底图样式的选取情况吧~
3. 内建地图底图样式
我们看到folium
其实有好几种内建地图底图样式,其中部分需要去申请key
,由于我这边没有申请成功就不做演示了。
"OpenStreetMap"
"Mapbox Bright" (Limited levels of zoom for free tiles)
"Mapbox Control Room" (Limited levels of zoom for free tiles)
"Stamen" (Terrain, Toner, and Watercolor)
"Cloudmade" (Must pass API key)
"Mapbox" (Must pass API key)
"CartoDB" (positron and dark_matter)
地势地形底图
m = folium.Map([40.002694, 116.322373],
tiles='Stamen Terrain',
zoom_start=15,
control_scale=True
)
m
黑白无标记底图
m = folium.Map([40.002694, 116.322373],
tiles='Stamen Toner',
zoom_start=15,
control_scale=True
)
m
水墨画底图
m = folium.Map([40.002694, 116.322373],
tiles='Stamen Watercolor',
zoom_start=15,
control_scale=True
)
m
另外,在这里也可以找到一些地图底图 http://leaflet-extras.github.io/leaflet-providers/preview/
我后续也会去研究这些地图底图样式,试着分享更多有趣的地图分享给大家。
当然了,国内咱们用的较多的地图是高德、百度和腾讯地图等,接下来我们就来玩玩!
4. 多种第三方地图底图样式
这里我将演示高德地图、智图GeoQ和腾讯地图等
4.1. 高德地图
高德地图的 中英文地图、卫星影像图、街道图与常规图
中英文地图
folium.Map([40.002694, 116.322373],
tiles='https://webrd02.is.autonavi.com/appmaptile?lang=zh_en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
attr='高德-中英文对照',
zoom_start=15,
)
纯英文地图
folium.Map([40.002694, 116.322373],
tiles='https://webrd02.is.autonavi.com/appmaptile?lang=en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
attr='高德-纯英文对照',
zoom_start=15,
)
卫星影像图
tiles = 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
folium.Map([40.002694, 116.322373],
tiles= tiles,
attr='高德-卫星影像图',
zoom_start=15,
)
街道图
folium.Map([40.002694, 116.322373],
tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8<ype=11',
attr='高德-街道路网图',
zoom_start=10,
)
常规图
folium.Map([40.002694, 116.322373],
tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',
attr='高德-常规图',
zoom_start=15,
)
4.2. 智图GeoQ
反正我觉得这个蛮好的,用起来简单
多种风格地图,即拿即用
彩色版
m = folium.Map([40.002694, 116.322373],
tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}',
attr='彩色版',
zoom_start=15,
)
m
暖色版
m = folium.Map([40.002694, 116.322373],
tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}',
attr='暖色版',
zoom_start=15,
)
m
灰色版
m = folium.Map([40.002694, 116.322373],
tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetGray/MapServer/tile/{z}/{y}/{x}',
attr='灰色版',
zoom_start=15,
)
m
蓝黑版
m = folium.Map([40.002694, 116.322373],
tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',
attr='蓝黑版',
zoom_start=15,
)
m
英文版
m = folium.Map([40.002694, 116.322373],
tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunityENG/MapServer/tile/{z}/{y}/{x}',
attr='英文版',
zoom_start=15,
)
m
中国行政区划边界
m = folium.Map([40.002694, 116.322373],
tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/administrative_division_boundaryandlabel/MapServer/tile/{z}/{y}/{x}',
attr='中国行政区划边界',
)
m
水系专题
m = folium.Map([40.002694, 116.322373],
tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}',
attr='水系专题',
)
m
街道网图
m = folium.Map([40.002694, 116.322373],
tiles='http://thematic.geoq.cn/arcgis/rest/services/StreetThematicMaps/Gray_OnlySymbol/MapServer/tile/{z}/{y}/{x}',
attr='街道网图',
)
m
暖色街道网图
m = folium.Map([40.002694, 116.322373],
tiles='http://thematic.geoq.cn/arcgis/rest/services/StreetThematicMaps/Warm_OnlySymbol/MapServer/tile/{z}/{y}/{x}',
attr='暖色-街道网图',
)
m
4.3. 腾讯地图
tiles = 'https://rt0.map.gtimg.com/tile?z={z}&x={x}&y={-y}'
folium.Map([39.904989, 116.405285],
tiles= tiles,
attr='腾讯地图'
)
4.4. 天地图
https://www.tianditu.gov.cn/
需要注册一个key
天地图影像
m = folium.Map([40.002694, 116.322373],
tiles='http://t7.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
attr='天地图-影像'
)
m
天地图影像注记
m = folium.Map([40.002694, 116.322373],
tiles='http://t7.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
attr='天地图-影像标注'
)
m
天地图矢量
m = folium.Map([40.002694, 116.322373],
tiles='http://t7.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
attr='天地图-矢量',
zoom_start=10,
)
m
天地图矢量注记
m = folium.Map([40.002694, 116.322373],
tiles='http://t7.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
attr='天地图-矢量注记'
)
m
天地图地形
m = folium.Map([40.002694, 116.322373],
tiles='http://t7.tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
attr='天地图-地形',
zoom_start=3,
)
m
天地图地形注记
m = folium.Map([40.002694, 116.322373],
tiles='http://t7.tianditu.gov.cn/cta_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cta&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
attr='天地图-地形标记',
zoom_start=3,
)
m
百度地图我这边测试失败了,暂时没有找到合适的替换方案。
5. 补充
其实,我们还可以找更多的地图底图瓦片URL来进行替换,多样化我们的地图绘制。
另外,大家在用经纬度坐标点进行地图绘制的时候,比如标记点、绘制区域、热力图绘制等等,需要考虑经纬度坐标是哪个地图系下面的,然后再用对应地图系的相关底图进行绘制才准确!
来源:https://mp.weixin.qq.com/s/EvmTAbj2v9lYMJ3sx97TLw


猜你喜欢
- 先上一波战果:证明脚本是有用的~好在前两天看到有大佬在 Github 上开源了一个抢茅台的脚本目前已经 1.4k ,我前一天看的时候才 50
- 第一个版本在这个版本中,首先创建了 RouterConfig 对象,其构造方法创建了 tornado.web.Application() 并
- 写在前面今天在公司写了一段代码,判断一个变量是否为空值,由于判断的类型太少,code review的时候同事说还有很多类型没有考虑到,并且提
- 如何对设计进行评判,一定有很多答案,有利有弊。问100位设计师,会得到100种回答。用线上PV、UV等数据说话,更多受产品属性、运营动作影响
- 博主本地环境:VMwareCentos7.6django2.22python3.6出现这个的原因分析:第一:您在VMware中的虚拟主机地址
- python excel文件(.xls文件)如何处理xlrd 用于读取文件,xlwt 用于写入文件,xlutils 是两个工具包的桥梁,也就
- 一. Go 切片和 Go 数组定义Go 切片:又称动态数组,它实际是基于数组类型做的一层封装。Go 数组:数组是内置(build-in)类型
- 如果你只使用一个更新日志,你只须清空日志文件,然后移走旧的更新日志文件到一个备份中,然后启用新的更新日志。用下列方法可以强制服务器启用新的更
- 本文实例为大家分享了python实现大转盘抽奖的具体代码,供大家参考,具体内容如下选择转盘中的某一个方框,来进行抽奖import tkint
- 今天在工作时遇见了某些代码需要延时操作的情况。具体情况为前台grid在执行完增删改操作后需要在增加或者修改弹框点击确定导致弹框消失后,gri
- 这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习
- numpy.amin()和numpy.amax()numpy.amin()用于计算数组中元素沿着指定轴的最小值。numpy.amax()用于
- 这个目前还是有个别无法显示,翻了下msdn貌似没看到更好的解决方案,暂时放弃继续研究,有晓得完全解决的朋友不妨回复说一声。 先附bat创建畸
- 本文实例讲述了Python实现的ftp服务器功能。分享给大家供大家参考,具体如下:python 具备强大的网络编程功能,而且代码简介,用简单
- 目录前言示例文件文件编码空值日期错误函数映射方法1:直接使用labmda表达式方法二:使用自定义函数方法三:使用数值字典映射总结前言本文是给
- 一.安装环境:Linux系统: CentOS 6.3 64位Oracle: Oracl
- 索引 经常要查询的语句,则给它建一个索引 表连接 select T_Oders as o join T_Customers as C on
- 简介此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CSS源文件放到了Content文件夹下的bootstr
- 话不多说,直接上代码import copyimport cv2import numpy as npWIN_NAME = 'draw_
- 用于序列化的两个模块json:用于字符串和Python数据类型间进行转换pickle: 用于python特有的类型和python的数据类型间