使用 Python 地图绘制工具 -- folium 全攻略
原创![作者头像](https://ask.qcloudimg.com/random-avatar/9279988/knn11ceevk.png)
1. 准备工作
有朋友可能没用过
folium
,它其实就是
python
的一个
专业绘制地图
的第三方库,所以在使用之前需要先安装它。
pip install folium
在安装完成之后,我们可以在
jupyterlab
进行演示如下:
import folium
m = folium.Map()
m
![](https://ask.qcloudimg.com/http-save/yehe-9279988/bc4bb98e4c2342c4b4941056f72e5ef9.png)
对于上面的输出,其实是一个
可交互
的地图,支持放大缩写拖拽等等。
如果你想将输出存在本地,可以这样来:
m.save('map.html')
可以看到本地就存了这个一个文件,浏览器打开就可以进行交互式操作了。
![](https://ask.qcloudimg.com/http-save/yehe-9279988/ccb5e14f56a4f2fa8ab9b0b0d0440ee9.png)
以上就是一个平平淡淡的过程......
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
可以看到 清华大学校区
![](https://ask.qcloudimg.com/http-save/yehe-9279988/d92dde4e652555c000a7a1abff7db5ee.png)
以上对
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/94e1abae8ff6002558e1ec9d283ab83d.png)
黑白无标记底图
m = folium.Map([40.002694, 116.322373],
tiles='Stamen Toner',
zoom_start=15,
control_scale=True
m
![](https://ask.qcloudimg.com/http-save/yehe-9279988/c36f6a3d69b3f544da8482866475e090.png)
水墨画底图
m = folium.Map([40.002694, 116.322373],
tiles='Stamen Watercolor',
zoom_start=15,
control_scale=True
m
![](https://ask.qcloudimg.com/http-save/yehe-9279988/9110fc89c39530aea6038804b93f5234.png)
以上就是内建地图底图样式的一些展示,部分需要key的大家可以去这个网站申请:
http://openwhatevermap.xyz/ (可惜我上不去)
另外,在这里也可以找到一些地图底图
我后续也会去研究这些地图底图样式,试着分享更多有趣的地图分享给大家。
当然了,国内咱们用的较多的地图是高德、百度和腾讯地图等,接下来我们就来玩玩!
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,
)
![](https://ask.qcloudimg.com/http-save/yehe-9279988/2a31af26fadf746d8429cfbaca0c37c0.png)
纯英文地图
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,
)
![](https://ask.qcloudimg.com/http-save/yehe-9279988/6ba1a8be4417c8e0aafb5c24149f1eb4.png)
卫星影像图
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,
)
![](https://ask.qcloudimg.com/http-save/yehe-9279988/57d7418a6cb32004ec247491ffcc7209.png)
街道图
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,
)
![](https://ask.qcloudimg.com/http-save/yehe-9279988/110daa1018dd31a92260736ff295c238.png)
常规图
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,
)
![](https://ask.qcloudimg.com/http-save/yehe-9279988/978eaa0dea72a54d8034bfbcccbe28a3.png)
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/a38ea46128d3dcea7cabbc6dd3253de2.png)
暖色版
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/b327f62fd2c6022f7394ad1a137d6a6d.png)
灰色版
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/edc018dcd77be5cab4c00caed04344b0.png)
蓝黑版
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/b44c33b5c30cee9202116d74876e7a50.png)
英文版
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/6470cc60b9486cf0b18dae41a554c966.png)
中国行政区划边界
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/f25c97a34cad51c8b5c3e0dd1f5b9fa8.png)
水系专题
m = folium.Map([40.002694, 116.322373],
tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}',
attr='水系专题',
m
![](https://ask.qcloudimg.com/http-save/yehe-9279988/5a50c58bd7595dcabc24102315b224c0.png)
街道网图
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/a82a7086d7120ad62979ac49e8c38581.png)
暖色街道网图
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/8dcb5b59b2d1919558b4f32a21d34dd7.png)
4.3. 腾讯地图
tiles = 'https://rt0.map.gtimg.com/tile?z={z}&x={x}&y={-y}'
folium.Map([39.904989, 116.405285],
tiles= tiles,
attr='腾讯地图'
)
![](https://ask.qcloudimg.com/http-save/yehe-9279988/5dedf65969673f4843a90b3ee3897a06.png)
4.4. 天地图
需要注册一个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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/221a4c9d9e091268525fb1535c19af80.png)
天地图影像注记
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/e2822bf967380fa06f4ded070a2fc76b.png)
天地图矢量
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/01591cbecb766478fc373cc0207af1dc.png)
天地图矢量注记
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/30f7ba52c228aaedacc06c450c941511.png)
天地图地形
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
![](https://ask.qcloudimg.com/http-save/yehe-9279988/6e60ac25aa04fa56fad788a39f1467f5.png)
天地图地形注记
m = folium.Map([40.002694, 116.322373],