Документация GeoPandas содержит пример того, как добавить фон на карту (https://geopandas.readthedocs.io/en/latest/gallery/plotting_basemap_background.html),, что более подробно объясняется ниже.
Вам придется иметь дело с плитками , то есть (png) изображениями, подаваемыми через веб-сервер, с URL-адресом типа
http://.../Z/X/Y.png
, где Z - уровень масштабирования, а X и Y идентифицируют плитку
И документ Геопандаса показывает, как установить плитки в качестве фона для ваших графиков, выбрать правильные и выполнить всю сложную работу по пространственной синхронизации и т. Д. *
установка
Предполагается, что GeoPandas уже установлен, вам необходим пакет contextily
. Если вы находитесь под Windows, вы можете выбрать Как установить Contextily?
Вариант использования
Создайте скрипт на Python и определите вспомогательную функцию
import contextily as ctx
def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
xmin, xmax, ymin, ymax = ax.axis()
basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
ax.imshow(basemap, extent=extent, interpolation='bilinear')
# restore original x/y limits
ax.axis((xmin, xmax, ymin, ymax))
и играйте
import matplotlib.pyplot as plt
from shapely.geometry import Point
import geopandas as gpd
import pandas as pd
# Let's define our raw data, whose epsg is 4326
df = pd.DataFrame({
'LAT' :[-22.266415, -20.684157],
'LONG' :[166.452764, 164.956089],
})
df['coords'] = list(zip(df.LONG, df.LAT))
# ... turn them into geodataframe, and convert our
# epsg into 3857, since web map tiles are typically
# provided as such.
geo_df = gpd.GeoDataFrame(
df, crs ={'init': 'epsg:4326'},
geometry = df['coords'].apply(Point)
).to_crs(epsg=3857)
# ... and make the plot
ax = geo_df.plot(
figsize= (5, 5),
alpha = 1
)
add_basemap(ax, zoom=10)
ax.set_axis_off()
plt.title('Kaledonia : From Hienghène to Nouméa')
plt.show()
![enter image description here](https://i.stack.imgur.com/PBBrr.png)
Примечание: вы можете поиграть с zoom
, чтобы найти хорошее разрешение для карты. Например. / I.e. :
![enter image description here](https://i.stack.imgur.com/nMRMD.png)
... и такие резолюции неявно требуют изменения пределов x / y.