GeoViews使用matplotlib后端添加瓦片底图的实现方法咨询
GeoViews matplotlib后端添加瓦片底图说明
核心问题解答
使用matplotlib后端时,完全可以为GeoViews绘图添加OSM这类瓦片底图,无需额外调用contextily实现,和Bokeh后端的调用逻辑一致,直接通过gv.tile_sources获取瓦片资源后添加到叠加层即可。
常见底图显示异常原因
此前无法正常显示底图通常由以下两个操作问题导致:
- 未定义WMTS图层的缩放级别,会渲染出无法识别的像素化内容,无法展示正常地物
- matplotlib后端对图层叠加顺序敏感,需要将瓦片层放在叠加表达式的最前面,如果放在最后会覆盖上层的矢量图层,该层叠顺序问题在Bokeh后端不会出现
多后端适配可复现代码
以下代码支持bokeh、matplotlib双后端切换,适配EPSG:4326坐标系的街道级多边形GeoDataFrame场景:
import geoviews as gv from geoviews import opts from cartopy import crs as ccrs # 同时加载bokeh、matplotlib后端 gv.extension('bokeh', 'matplotlib') # 加载OSM瓦片底图 tiles = gv.tile_sources.OSM() # 图层叠加注意瓦片放在最前面,gdf1、gdf2为EPSG:4326坐标系的多边形GeoDataFrame layout = tiles * gv.Polygons(gdf1, group="group1") * gv.Polygons(gdf2, group="group2") layout.opts( opts.Polygons('group1', cmap=['red'], backend="matplotlib"), opts.Polygons('group2', cmap=['lightgrey'], backend="matplotlib"), opts.Overlay(backend='matplotlib'), # 指定wmts缩放级别避免底图糊 opts.WMTS(zoom=13, backend='matplotlib'), # 瓦片底图默认基于墨卡托投影 projection=ccrs.Mercator() ) # 指定输出参数,切换backend参数即可切换渲染后端 gv.output(layout, size=500, fig='svg', backend='matplotlib')
内容的提问来源于stack exchange,提问作者grg
相关产品推荐
相关产品推荐

