使用Python 3.8,GeoPandas和Contexti,我在不同区域以不同的缩放级别(在GeoDataFrame中的点列表中循环)绘制了大量地图。不同的缩放级别适用于不同的全局区域。
将缩放比例设置为最大允许值(捕获我正在绘制的点)的最佳方法是什么?在下面的代码中,我不知道如何:
我想我已经正确设置了EPSG,这是这里回答类似问题的要点。
码:
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')
正如询问者所证实的那样。新增选项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表示该特定底图图块图像的最大有效缩放。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句