Python 在上下文中添加\u basemap使用了错误的范围和缩放级别

Python 在上下文中添加\u basemap使用了错误的范围和缩放级别,python,pandas,geopandas,contextily,Python,Pandas,Geopandas,Contextily,我正在尝试向包含GeoPandas数据帧的Matplotlib图形添加一个上下文底图。当我使用df.plot绘制数据帧时,地图范围计算正确 但是,当我尝试添加一个与上下文相关的底图时,地图范围(和缩放级别)计算错误,并显示以下警告: UserWarning: The inferred zoom level of 27 is not valid for the current tile provider (valid zooms: 0 - 20). 我正在尝试执行以下代码: df = gpd.r

我正在尝试向包含GeoPandas数据帧的Matplotlib图形添加一个上下文底图。当我使用
df.plot
绘制数据帧时,地图范围计算正确

但是,当我尝试添加一个与上下文相关的底图时,地图范围(和缩放级别)计算错误,并显示以下警告:

UserWarning: The inferred zoom level of 27 is not valid for the current tile provider (valid zooms: 0 - 20).
我正在尝试执行以下代码:

df = gpd.read_file('linz/StatBez_Linz_EPSG_4326.gml')
df = df.to_crs(epsg=3857)

fig = plt.figure(figsize=(16,9))
ax = plt.subplot()
ctx.add_basemap(ax = ax, source=ctx.providers.Stamen.Toner, crs=df.crs.to_string())
df.plot(color='none',edgecolor='green', ax = ax)
df.tail()
的输出可以在这里看到:


gml
文件来自林茨的gml文件基于高斯-克鲁格系统M31-5Mio(EPSG:31255)。下面是一段可运行的代码,它演示了使用webmap tiles选择的提供者请求的basemap生成GML绘图的所有步骤

import contextily as ctx
import geopandas
import matplotlib.pyplot as plt

# Read GML
linz_districts = geopandas.read_file('./data/StatBez_Linz.gml')

# The coordinates are in the Gauss-Krüger system M31-5Mio. 
# CRS is EPSG:31255
# Set proper coordinate system to the geoDataFrame
linz_31255 = linz_districts.set_crs(31255)

# Convert CRS to Web-Mercator to match basemap layer
linz_3857 = linz_31255.to_crs('epsg:3857')

# plot Linz
ax = linz_3857.plot(figsize=(9, 16), zorder=10, ec='gray', alpha=0.4)

# plot basemap (it uses 'epsg:3857')
src_basemap = ctx.providers.Stamen.Terrain
ctx.add_basemap( ax, source=src_basemap, alpha=0.6, zorder=8 )

# Also possible with
#ctx.add_basemap( ax, source='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png' )

# manipulate xticks, use format
ax.set_xticklabels(['{:,.0f}'.format(x) for x in ax.get_xticks()]);
ax.set_yticklabels(['{:,.0f}'.format(y) for y in ax.get_yticks()]);
输出曲线图:


您的GML数据文件没有crs=epsg:4326。@是的,尾部输出在转换为EBSG 387之后。非常感谢示例代码(即使是我的数据!)。结果表明,修复它所需的唯一更改是首先在轴上绘制df,然后添加底图。@数据图返回轴
ax
,因此,确定并附加了打印范围。