开发者

Python+folium绘制精美地图的示例详解

开发者 https://www.devze.com 2022-12-12 10:50 出处:网络 作者: 可以叫我才哥
目录1.准备工作2.关于folium.Map()3.内建地图底图样式4.多种第三方地图底图样式4.1.高德地图4.2.智图GeoQ4.3.腾讯地图4.4.天地图5.补充1. 准备工作
目录
  • 1.准备工作
  • 2.关于folium.Map()
  • 3.内建地图底图样式
  • 4.多种第三方地图底图样式
    • 4.1.高德地图
    • 4.2.智图GeoQ
    • 4.3.腾讯地图
    • 4.4.天地图
  • 5.补充

    1. 准备工作

    有朋友可能没用过folium,它其实就是python的一个专业绘制地图的第三方库,所以在使用之前需要先安装它。

    pipinstallfolium
    

    在安装完成之后,我们可以在jupyterlab进行演示如下:

    importfolium
    
    m=folium.Map()
    m
    

    Python+folium绘制精美地图的示例详解

    默认

    对于上面的输出,其实是一个可交互的地图,支持放大缩写拖拽等等。

    如果你想将输出存在本地,可以这样来:

    m.save('map.html')
    

    可以看到本地就存了这个一个文件,浏览器打开就可以进行交互式操作了。

    Python+folium绘制精美地图的示例详解

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

    其他常用参数包括:

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

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

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

    -"OpenStreetMap"
    -"MapboxBright"(Limitedlevelsofzoomforfreetiles)
    -"MapboxControlRoom"(Limitedlevelsofzoomforfreetiles)
    -"Stamen"(Terrain,Toner,andWatercolor)
    -"Cloudmade"(MustpassAPIkey)
    -"Mapbox"(MustpassAPIkey)
    -"CartoDB"(positronanddark_matter)
    

    我们简单试下locationzoo_start参数:

    importfolium
    
    m=folium.Map([40.002694,116.322373],
    zoom_start=15,
    control_scale=True
    )
    m
    

    可以看到清华大学校区

    Python+folium绘制精美地图的示例详解

    清华大学校区

    以上对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='StamenTerrain',
    zoom_start=15,
    control_scale=True
    )
    m
    

    Python+folium绘制精美地图的示例详解

    黑白无标记底图

    m=folium.Map([40.002694,116.322373],
    tiles='StamenToner',
    zoom_start=15,
    control_scale=True
    )
    m
    

    Python+folium绘制精美地图的示例详解

    水墨画底图

    m=folium.Map([40.002694,116.322373],
    tiles='StamenWatercolor',
    zoom_start=15,
    control_scale=True
    )
    m
    

    Python+folium绘制精美地图的示例详解

    以上就是内建地图底图样式的一些展示,部分需要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,
    )
    

    Python+folium绘制精美地图的示例详解

    纯英文地图

    folium.Map([40.002694,116.322373],
    tiles='https://webrd02.is.autonIONNsavi.com/appmaptile?lang=en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
    attr='高德-纯英文对照',
    zoom_start=15,
    )
    

    Python+folium绘制精美地图的示例详解

    卫星影像图

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

    Python+folium绘制精美地图的示例详解

    街道图

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

    Python+folium绘制精美地图的示例详解

    常规图

    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,
    )
    www.cppcns.com

    Python+folium绘制精美地图的示例详解

    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
    

    Python+folium绘制精美地图的示例详解

    暖色版

    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
    

    Python+folium绘制精美地图的示例详解

    灰色版

    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
    

    Python+folium绘制精美地图的示例详解

    蓝黑版

    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
    

    Python+folium绘制精美地图的示例详解

    英文版

    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
    

    Python+folium绘制精美地图的示例详解

    中国行政区划边界

    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
    

    Python+folium绘制精美地图的示例详解

    水系专题

    m=folium.Map([40.002694,116.322373],
    tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}',
    attr='水系专题',
    )
    m
    

    Python+folium绘制精美地图的示例详解

    街道网图

    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
    

    Python+folium绘制精美地图的示例详解

    暖色街道网图

    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
    

    Python+folium绘制精美地图的示例详解

    4.3. 腾讯地图

    tiles='https://rt0.map.gtimg.com/tile?z={z}&x={x}&y={-y}'
    folium.Map([39.904989,116.405285],
    tiles=tiles,
    attr='腾讯地图'
    )
    

    Python+folium绘制精美地图的示例详解

    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
    

    Python+folium绘制精美地图的示例详解

    天地图影像注记

    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
    

    Python+folium绘制精美地图的示例详解

    天地图矢量

    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
    

    Python+folium绘制精美地图的示例详解

    天地图矢量注记

    m=folium.Map([40.002694,116.322373],
    tiles='http://t7.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&V编程客栈ERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
    attr='天地图-矢量注记'
    )
    m
    

    Python+folium绘制精美地图的示例详解

    天地图地形

    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
    

    Python+folium绘制精美地图的示例详解

    天地图地形注记

    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}&http://www.cppcns.comTILEROW={y}&TILECOL={x}&tk=',
    attr='天地图-地形标记',
    zoom_start=3,
    )
    m
    

    Python+folium绘制精美地图的示例详解

    百度地图我这边测试失败了,暂时没有找到合适的替换方案。

    5. 补充

    其实,我们还可以找更多的地图底图瓦片URL来进行替换http://www.cppcns.com,多样化我们的地图绘制。

    另外,大家在用经纬度坐标点进行地图绘制的时候,比如标记点、绘制区域、热力图绘制等等,需要考虑经纬度坐标是哪个地图系下面的,然后再用对应地图系的相关底图进行绘制才准确!

    以上就是Python+folium绘制精美地图的示例详解的详细内容,更多关于Python folium绘制地图的资料请关注我们其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号