使用Python3.8、GeoPandas和Contextily,我在不同的缩放级别(循环遍历GeoDataFrame中的点列表)绘制了许多不同区域的地图。不同的缩放级别适用于不同的全球区域。
什么是最好的方式将缩放设置为最大允许,捕捉点,我正在策划?在下面的代码中,我不知道如何:
我刚刚在第二个绘图中使用了13,因为这是错误的,message)
。
我认为我正确地设置了EPSG,这是一个类似问题here的答案的要点。
代码:
import pandas as pd
import geopandas as gpd
%matplotlib inline
import matplotlib.pyplot as plt
import contextily as ctx
from shapely.geometry import Point
plt.style.use('seaborn-whitegrid')
long, lat = [(-118.02, -118.051, -118.04), (39.499, 39.512, 39.501)]
df = pd.DataFrame(list(zip(lat, long)), columns =['lat', 'long'])
gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df['long'], df['lat']))
gdf.crs = "EPSG:4326"
fig = plt.figure(figsize=(10,7.5), constrained_layout=True)
gs = fig.add_gridspec(1, 2)
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
gdf.plot(ax = ax1)
ctx.add_basemap(ax1, crs='epsg:4326', source=ctx.providers.Esri.WorldShadedRelief)
ax1.tick_params('x', labelrotation=90)
ax1.set_aspect('equal')
ax1.set_title('Auto-Zoom')
gdf.plot(ax = ax2)
ctx.add_basemap(ax2, crs='epsg:4326', source=ctx.providers.Esri.WorldShadedRelief, zoom = 13)
ax2.tick_params('x', labelrotation=90)
ax2.set_aspect('equal')
ax2.set_title('Defined Zoom')

发布于 2021-01-17 03:57:02
这是被追问者证实的。将选项reset_extent=False添加到ctx.add_basemap(ax2, ... )中将解决在ax2上绘图的问题。
用于在实际使用之前检查可能的缩放值。使用这个
# Test if zoom: 28 is valid or not?
retval = ctx.tile._validate_zoom(28, ctx.providers.Esri.WorldShadedRelief, auto=True)值返回,这里retval表示一个有效的缩放值(小于或等于检查值)。在本例中,28用于检查,但返回13。因此,13表示特定基地图瓷砖图像的最大有效缩放。
https://stackoverflow.com/questions/65753760
复制相似问题