Python使用folium库绘制交互式地图的完整指南

一只小鹿
一只小鹿
发布时间:2026-10-16 | 4人浏览过
原创

本文详解Python中folium库的使用,从基础安装到Map对象参数解析,涵盖location、zoom_start等核心配置。重点演示如何调用高德、智图GeoQ及腾讯地图等第三方瓦片服务,实现中英文、卫星影像及矢量注记等多种地图样式的本地化部署与交互操作。

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" (免费层级受限)
  • "Mapbox Control Room" (免费层级受限)
  • "Stamen" (包含Terrain, Toner, 和Watercolor)
  • "Cloudmade" (需传递API key)
  • "Mapbox" (需传递API key)
  • "CartoDB" (包含positron和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

以上展示了内建地图底图样式的部分效果,涉及需要key的样式,用户可前往该网站申请:http://openwhatevermap.xyz/。

此外,用户也可在此处查找更多地图底图资源: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&ltype=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进行替换,从而丰富地图绘制的多样性。

另外,在使用经纬度坐标点进行地图绘制时(如标记点、绘制区域、热力图等),务必确认坐标所属的地图系,并选用对应地图系的底图进行绘制,以确保准确性。

以上就是Python结合folium库绘制精美地图的示例详解,更多关于Python folium绘制地图的资料,请持续关注本站其他相关文章。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表