Почта
Чат
Диск
     

Построение карт с помощью Basemap

Установка модуля BaseMap для создания карт (с примерами и документацией) осуществляется с помощью команды:
sudo apt-get install python-mpltoolkits.basemap python-mpltoolkits.basemap-data python-mpltoolkits.basemap-doc
Файл base001.py
#!/usr/bin/python
# coding: utf8

from __future__ import unicode_literals
from mpl_toolkits.basemap import Basemap
from matplotlib.pyplot import *

# Создаем карту в ортографической проекции
m = Basemap(projection="ortho", lat_0=20, lon_0=70, resolution="l")
# Задаем в качестве фона рельеф земной поверхности из проекта ETOPO
m.etopo()
# Записываем рисунок в файл
savefig("base001.png", dpi=75)
# Отображаем карту
show()
Файл base002.py
#!/usr/bin/python
# coding: utf8

from __future__ import unicode_literals
from mpl_toolkits.basemap import Basemap
from matplotlib.pyplot import *

# Создаем карту в ортографической проекции
m = Basemap(projection="ortho", lat_0=20, lon_0=70, resolution="l")
# Задаем в качестве фона рельеф с тенями
m.shadedrelief()
# Записываем рисунок в файл
savefig("base002.png", dpi=75)
# Отображаем карту
show()
Файл base003.py
#!/usr/bin/python
# coding: utf8

from __future__ import unicode_literals
from mpl_toolkits.basemap import Basemap
from matplotlib.pyplot import *

# Создаем карту в ортографической проекции
m = Basemap(projection="ortho", lat_0=20, lon_0=70, resolution="l")
# Задаем фон цвета голубого мрамора
m.bluemarble()
# Записываем рисунок в файл
savefig("base003.png", dpi=75)
# Отображаем карту
show()
Файл base004.py
#!/usr/bin/python
# coding: utf8

from __future__ import unicode_literals
from mpl_toolkits.basemap import Basemap
from matplotlib.pyplot import *

# Создаем карту в ортографической проекции
m = Basemap(projection="ortho", lat_0=20, lon_0=70, resolution="l")
# Задаем фона голубого цвета
m.drawmapboundary(fill_color="aqua")
# Рисуем континенты
m.fillcontinents(color="coral", lake_color="aqua")
# Рисуем береговые линии
m.drawcoastlines(linewidth=0.25)
# Рисуем реки
m.drawrivers(linewidth=0.1)
# Рисуем сетку широт
m.drawmeridians(np.arange(0,360,30))
# Рисуем сетку долгот
m.drawparallels(np.arange(-90,90,30))
# Переводим значения долготы и широты в координаты на карте
x, y = m(30,60)
# Рисуем точку на карте
m.plot(x, y, "b*", markersize=10)
# Добавляем рядом подпись
text(x+5.5, y-5.5, "Санкт-Петербург", fontsize=14)
# Записываем рисунок в файл
savefig("base004.png", dpi=75)
# Отображаем карту
show()
Файл base005.py
#!/usr/bin/python
# coding: utf8

from __future__ import unicode_literals
from mpl_toolkits.basemap import Basemap, cm
from Scientific.IO.NetCDF import NetCDFFile as Dataset
import numpy
import matplotlib.pyplot as plt


# Создаем карту в ортографической проекции
m = Basemap(projection="ortho", lat_0=20, lon_0=70, resolution="l")
# Открываем netCDF файл с данными
cdf = Dataset("isccp_ts.nc")
# Читаем данные о температуре поверхности
data = cdf.variables["ts"][:]
# Читаем значения широт
lat = cdf.variables["lat"][:]
# Читаем значения долгот
lon = cdf.variables["lon"][:]
# Создаем двумерные массивы широт и долгот
lons, lats = numpy.meshgrid(lon, lat)
# Пересчитываем географические координаты в систему координат карты
x, y = m(lons, lats)

# Создаем рисунок
fig = plt.figure(figsize=(16,8))

# Рисуем береговые линии
m.drawcoastlines(linewidth=0.5)
# Рисуем границы государств
m.drawcountries()
# Рисуем фон карты
m.drawmapboundary(fill_color="grey")
# Рисуем сетку широт (labels = [слева,справа,сверху,снизу])
m.drawparallels(numpy.arange(-90.0,90.0,30.0), labels=[1,1,0,0], color="black", labelstyle="+/-", linewidth=0.2)
# Рисуем сетку долгот
m.drawmeridians(numpy.arange(-180.0,180.0,30.0), labels=[0,0,0,1], color="black", labelstyle="+/-", linewidth=0.2)
# Рисуем заполненные контуры
cs = m.contourf(x, y, data[0,:,:], 100, cmap=cm.s3pcpn)
# Добавляем палитру
cbar = m.colorbar(cs, location="right", size="5%", pad="10%")
# Добавляем подпись под палитрой
cbar.set_label("K")
# Добавляем название рисунка
plt.title("Температура земной поверхности", fontsize=18)
# Записываем рисунок в файл
plt.savefig("base005.png", dpi=75)
# Отображаем карту
plt.show()
Файл base006.py
#!/usr/bin/env python
# coding: utf8

from __future__ import unicode_literals
from mpl_toolkits.basemap import Basemap, cm
from Scientific.IO.NetCDF import NetCDFFile as Dataset
import numpy
import matplotlib.pyplot as plt

# wget http://meteolab.ru/downloads/isccp/isccp_ts.nc


# Создаем карту в цилиндрической проекции
m = Basemap(llcrnrlon=0, urcrnrlon=360, llcrnrlat=-90, urcrnrlat=90, projection="cyl", resolution="l")
# Открываем netCDF файл с данными
cdf = Dataset("isccp_ts.nc")
# Читаем данные о температуре поверхности
data = cdf.variables["ts"][:]
# Читаем значения широт
lat = cdf.variables["lat"][:]
# Читаем значения долгот
lon = cdf.variables["lon"][:]
# Создаем двумерные массивы широт и долгот
lons, lats = numpy.meshgrid(lon, lat)
# Пересчитываем географические координаты в систему координат карты
x, y = m(lons, lats)

# Создаем рисунок
fig = plt.figure(figsize=(16,8))

# Рисуем береговые линии
m.drawcoastlines(linewidth=0.5)
# Рисуем границы государств
m.drawcountries()
# Рисуем фон карты
m.drawmapboundary(fill_color="grey")
# Рисуем сетку широт (labels = [слева,справа,сверху,снизу])
m.drawparallels(numpy.arange(-90.0,90.0,30.0), labels=[1,1,0,0], color="black", labelstyle="+/-", linewidth=0.2)
# Рисуем сетку долгот
m.drawmeridians(numpy.arange(-180.0,180.0,30.0), labels=[0,0,0,1], color="black", labelstyle="+/-", linewidth=0.2)
# Рисуем заполненные контуры
cs = m.contourf(x, y, data[0,:,:], 100, cmap=cm.s3pcpn)
# Добавляем палитру
cbar = m.colorbar(cs, location="right", size="5%", pad="10%")
# Добавляем подпись под палитрой
cbar.set_label("K")
# Добавляем название рисунка
plt.title("Температура земной поверхности", fontsize=18)
# Записываем рисунок в файл с разрешением 75 dpi
plt.savefig("base006.png", dpi=75)
# Отображаем на экране
plt.show()



Контрольные вопросы

  1. Возможно ли отобразить пространственные данные из файлов netCDF с помощью BaseMap?
  2. Для какой цели предназначена функция meshgrid() из модуля NumPy?
  3. С помощью какой функции осуществляется перевод географических координат в координаты на карте?
  4. Что обозначает аббревиатура DPI?
  5. Какая функция предназначена для отображения рек на картах?

Полезная информация

Официальный сайт BaseMap