乐趣区

关于python:使用-Python-地图绘制工具-folium-全攻略

1. 筹备工作

有敌人可能没用过 folium,它其实就是python 的一个 业余绘制地图 的第三方库,所以在应用之前须要先装置它。

pip install folium

在装置实现之后,咱们能够在 jupyterlab 进行演示如下:

import folium

m = folium.Map()
m

对于下面的输入,其实是一个 可交互 的地图,反对放大缩写拖拽等等。

如果你想将输入存在本地,能够这样来:

m.save('map.html')

能够看到本地就存了这个一个文件,浏览器关上就能够进行交互式操作了。

以上就是一个平平淡淡的过程 ……

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 级,大概是一个城市的范畴;

其余罕用参数包含:

  • widthheight:地图的长宽,如果是 int 则示意像素值,如果是 str 则示意百分比;
  • max_zoom:地图能够手动调节的最大比例,默认为 18 级;
  • control_scale:是否在地图上增加比例尺,默认为 False;
  • no_touch:是否禁止手动操作,默认为 False;
  • tiles:地图款式,默认为 OpenStreetMap
  • attr:如果设置非内建地图款式,则须要传入这个值,能够了解为你抉择的地图款式名称

以上是罕用的一些参数,而最罕用的莫过于 locationzoom_starttiles 等。

内建地图款式 还有一下几种:

- "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)

咱们简略试下 locationzoo_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

以上就是内建地图底图款式的一些展现,局部须要 key 的大家能够去这个网站申请:

http://openwhatevermap.xyz/(惋惜我上不去)

另外,在这里也能够找到一些地图底图

http://leaflet-extras.github….

我后续也会去钻研这些地图底图款式,试着分享更多乏味的地图分享给大家。

当然了,国内咱们用的较多的地图是高德、百度和腾讯地图等,接下来咱们就来玩玩!

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 干货,交换 Python 技术。
对文章有何见解,或者有何技术问题,欢送在评论区一起留言探讨!

退出移动版