Я создаю картографическое приложение с помощью Python и Cartopy и пытаюсь использовать фрагменты карты с открытым исходным кодом для фона, чтобы иметь больше возможностей, чем карта Cartopy по умолчанию.
Он отлично работает для карт, которые достаточно близко увеличены, но когда я пытаюсь получить вид с большей высоты, что-то не получается. Если у меня установлен масштаб на 11, он работает. Если я установлю его на 12, он зависнет на неопределенный срок и не даст трассировки.
Тот же результат с картографическими серверами OSM и Stamen.
Вот короткий, самодостаточный пример (обратите внимание, что одна или две строки могут быть артефактами из разных способов, которые я пробовал)
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
def custom_background(source_point):
source_point = source_point.split(" ")
source_point = (float(source_point[0]), float(source_point[1]))
dx = 1.5
dy = 1.5
lon_min, lon_max = source_point[0]-dx, source_point[0]+dx
lat_min, lat_max = source_point[1]-dy, source_point[1]+dy
zoom = 7
map_url = "https://www.openstreetmap.org/#map={}/{}/{}".format(zoom,source_point[0],source_point[1])
tile = cimgt.OSM(url=map_url)
tile = cimgt.StamenTerrain()
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent([lat_min, lat_max, lon_min, lon_max])
ax.add_image(tile, zoom)
#~ ax.add_image(tile)
return ax
custom_background("45.068466 -66.45477")
plt.savefig("tile.png")
результат, с масштабированием = 7:
но если я изменю масштаб, скажем, на 14, программа не завершится независимо от того, как долго я позволяю ей работать.
Параметр URL, передаваемый в cimgt.OSM(), является необязательным. Я получаю тот же результат с ним или без него. (См.: https://scitools.org.uk/cartopy/docs/v0.16/cartopy/io/img_tiles.html#cartopy.io.img_tiles.OSM)
Я что-то упустил здесь? Любая помощь будет оценена по достоинству, спасибо.