В этой статье мы создадим визуализацию города Москва на глобусе с помощью Python и библиотеки Basemap. Мы будем использовать ортографическую проекцию, чтобы показать город в глобальном контексте.
Библиотеки и Настройка Окружения
Для начала нам потребуются следующие библиотеки Python:
Basemap
: библиотека для создания картографических проекций и визуализации географических данных.Matplotlib
: библиотека для визуализации данных, которая будет использоваться для создания глобуса.Numpy
: библиотека для работы с массивами и математическими функциями.
Убедитесь, что эти библиотеки установлены в вашей среде Python.
Определение Координат Москвы
Москва, столица России, имеет следующие географические координаты:
- Широта (latitude): 55.7558°
- Долгота (longitude): 37.6173°
Мы будем использовать эти координаты для размещения маркера на глобусе.
Создание Глобуса
Давайте приступим к созданию глобуса с помощью Basemap:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(7, 6))
# Установка угла обзора
lat_viewing_angle = 55.7558
lon_viewing_angle = 37.6173
# Определение цветовых схем для воды и суши
ocean_map = (plt.get_cmap('ocean'))(210)
cmap = plt.get_cmap('gist_earth')
# Создание карты с ортографической проекцией
m = Basemap(projection='ortho', lat_0=lat_viewing_angle, lon_0=lon_viewing_angle, resolution='l')
Здесь мы устанавливаем размер фигуры для глобуса и определяем угол обзора, соответствующий координатам Москвы. Затем мы выбираем цветовые схемы для воды и суши.
Рисование Карты
Теперь мы можем приступить к рисованию элементов карты:
# Рисование границы карты, заполнение континентов и воды
m.drawmapboundary(fill_color=ocean_map)
m.fillcontinents(color=cmap(200), lake_color=ocean_map)
# Рисование береговой линии и границ стран
m.drawcoastlines()
m.drawcountries()
Мы рисуем границу карты, заполняем континенты и воду соответствующими цветами, а также добавляем береговую линию и границы стран.
Добавление Линей Широты и Долготы
Чтобы сделать карту более информативной, добавим линии широты и долготы:
# Определение диапазона и количества линий широты и долготы
lat_line_range = [-90, 90]
lat_lines = 8
lat_line_count = (lat_line_range[1] - lat_line_range[0]) / lat_lines
merid_range = [-180, 180]
merid_lines = 8
merid_count = (merid_range[1] - merid_range[0]) / merid_lines
# Рисование линий широты и долготы
m.drawparallels(np.arange(lat_line_range[0], lat_line_range[1], lat_line_count))
m.drawmeridians(np.arange(merid_range[0], merid_range[1], merid_count))
Мы определяем диапазон и количество линий широты и долготы, а затем рисуем их на карте.
Отображение Москвы на Глобусе
Теперь добавим маркер, чтобы показать расположение Москвы:
# Отображение маркера в координатах Москвы
x, y = m(lon_viewing_angle, lat_viewing_angle)
m.scatter(x, y, marker='o', color='red', s=100, zorder=10, alpha=0.7, edgecolor='black')
# Добавление аннотации с названием города
plt.annotate('Москва', xy=(x, y), xycoords='data', xytext=(-10, -10), textcoords='offset points',
color='black', fontsize=12, bbox=dict(facecolor='white', alpha=0.5),
arrowprops=dict(arrowstyle="->", color='black'), zorder=20)
Мы используем функцию scatter
для размещения красного маркера в координатах Москвы. Затем добавляем аннотацию с названием города рядом с маркером.
Отображение и Сохранение Глобуса
Наконец, мы можем отобразить наш глобус и сохранить его в файл:
# Отображение и сохранение глобуса
plt.savefig('moscow_on_globe.png', dpi=150, transparent=True)
plt.show()
Здесь мы сохраняем глобус в файл с именем moscow_on_globe.png
с разрешением 150 dpi и прозрачным фоном. Затем мы отображаем глобус с помощью plt.show()
.
В этой статье мы создали визуализацию города Москва на глобусе с помощью Python и Basemap. Мы использовали ортографическую проекцию, чтобы показать город в глобальном контексте, добавили линии широты и долготы, а также отметили расположение Москвы на карте. Такая визуализация может быть полезна для географических исследований, образования или просто для эстетического удовольствия.
Полный код программы
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
# Настройка размера фигуры для глобуса
fig = plt.figure(figsize=(7, 6))
# Определение угла обзора для Москвы
lat_viewing_angle = 55.7558 # Широта Москвы
lon_viewing_angle = 37.6173 # Долгота Москвы
# Определение цветовых схем для воды и суши
ocean_map = (plt.get_cmap('ocean'))(210)
cmap = plt.get_cmap('gist_earth')
# Создание карты с ортографической проекцией
m = Basemap(projection='ortho', lat_0=lat_viewing_angle, lon_0=lon_viewing_angle, resolution='l')
# Рисование границы карты, заполнение континентов и воды
m.drawmapboundary(fill_color=ocean_map)
m.fillcontinents(color=cmap(200), lake_color=ocean_map)
# Рисование береговой линии и границ стран
m.drawcoastlines()
m.drawcountries()
# Определение диапазона и количества линий широты и долготы
lat_line_range = [-90, 90]
lat_lines = 8
lat_line_count = (lat_line_range[1] - lat_line_range[0]) / lat_lines
merid_range = [-180, 180]
merid_lines = 8
merid_count = (merid_range[1] - merid_range[0]) / merid_lines
# Рисование линий широты и долготы
m.drawparallels(np.arange(lat_line_range[0], lat_line_range[1], lat_line_count))
m.drawmeridians(np.arange(merid_range[0], merid_range[1], merid_count))
# Отображение маркера в координатах Москвы
x, y = m(lon_viewing_angle, lat_viewing_angle)
m.scatter(x, y, marker='o', color='red', s=100, zorder=10, alpha=0.7, edgecolor='black')
# Добавление аннотации с названием города
plt.annotate('Москва', xy=(x, y), xycoords='data', xytext=(-10, -10), textcoords='offset points',
color='black', fontsize=12, bbox=dict(facecolor='white', alpha=0.5),
arrowprops=dict(arrowstyle="->", color='black'), zorder=20)
# Отображение и сохранение глобуса
plt.savefig('moscow_on_globe.png', dpi=150, transparent=True)
plt.show()
Чтобы отразить город Новосибирск на глобусе, вам нужно изменить координаты широты и долготы в коде. Новосибирск имеет следующие географические координаты:
- Широта (latitude): 55.0281°
- Долгота (longitude): 82.9236°
В этой статье мы создали визуализацию города Москва и Новосибирск на глобусе с помощью Python и Basemap. Мы использовали ортографическую проекцию, чтобы показать город в глобальном контексте, добавили линии широты и долготы, а также отметили расположение Москвы и Новосибирска на карте. Такая визуализация может быть полезна для географических исследований, образования или просто для эстетического удовольствия.