Построение точек на карте по заданным координатам при помощи Basemap в Python.

Видео аватар

Если внимательно посмотреть на последние заметки нашего блога, то можно подумать, что он превратился в чисто фотографический. Однако недавно мы хорошенько обдумали перспективы развитя наших сайтов, не побоялись и поставили всё с ног на голову. Поскольку фотографическая тематика постов отныне будет жить только на koldunov.com, этот сайт вновь станет выглядеть так, как он выглядел в самом начале. Да-да, начиналось всё не с фотографических обзоров, а с заметок, типа:
Вязание крючком игрушки Бендера (Футурама)
Взрослая загадка на смекалку — расшифровать послание инопланетянам
Работа с GMT
Изготовление трафарета
и т.д.

Сегодня мы вернёмся к теме картирования. Задача стоит следующая.
В отдельных точках акватории проводились измерения океанологических хараткеристик. Для каждой точки нам известны географические координаты (широта и долгота). Необходимо нанести в виде кружков положение точек на карте. Делать всё мы будем в Python (я обычно при этом использую ipython notebook, так удобнее).

Для начала импортируем всё, что нам понадобится:

%pylab inline
import matplotlib.pylab as plt
from mpl_toolkits.basemap import Basemap

затем: создадим две переменные с широтами и долготами. В данном случае проще и быстрее было создать их вручную:

lat = [66.297,66.299,66.298,66.295,66.301,66.304,66.288,66.289,66.286,66.289]
lon = [33.640,33.660,33.690,33.747,33.829,33.908,33.891,33.839,33.781,33.740]

Ну и теперь само построение карты:

m = Basemap(projection='merc',llcrnrlat=66.22,urcrnrlat=66.37,\
            llcrnrlon=33.60,urcrnrlon=34,resolution='f')
figsize(10,15)

x, y = m(lon,lat)

m.drawcoastlines()
m.fillcontinents(color='gray',lake_color='white')
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(66.22,66.37,.04),labels=[1,0,0,0], fontsize =14)
m.drawmeridians(np.arange(33.60,34.,.1),labels=[0,0,0,1], fontsize =14)

m.scatter(x,y,20,marker='o',color='k')
plt.title("Location of the measurement points", fontsize =14)
plt.show()

plot_points
Некоторые пояснения к тому, что мы сделали (я не стал это делать в коде, чтобы не перегружать его):
- вначале создаём карту и называем её m, чтобы можно было к ней как-то обращаться. При этом сразу определяем проекцию карты (merc - проекция Меркатора) и границы (северная, южная, западная восточная) карты, а также разрешение (resolution), с которым будет нарисована береговая черта: c (crude), l (low), i (intermediate), h (high), f (full) или None

- figsize - определяет размер итоговой картинки. Можно не писать эту функцию, но тогда карта получится слишком маленькой.

- x, y = m(lon,lat) - в этой строке мы переводим географические координаты в координаты нашего рисунка. Это типичная процедура при построении карт.

- далее идут интуитивнопонятные функции, которые прорисовывают береговую линию (drawcoastlines), заполняют цветом берега(fillcontinents) и море (drawmapboundary).

- прорисовка сетки координат (drawparallels,drawmeridians) требует некоторых пояснений. Первый аргумент определяет (с какого градуса начинать рисовать, до какого градуса, с каким шагом). Второй аргумент говорит программе, где нужно рисовать обозначения широт и долгот, при этом последовательность такая: left, right, top, bottom. Иными словами, если labels=[1,1,0,0], то обозначения широт будут и справа и слева. В нашем случае обозначения только слева (labels=[1,0,0,0]). Ну а fontsize - это, конечно, размер шрифта.

- самая главная часть нашей работы - прорисовка точек при помощи scatter. Перывыми двумя аргументами будут x и y, о которых шла речь чуть выше (это координаты точек). Третий аргумент (20) - размер точки. Далее marker='o' - форма точки (маркера), у нас простая круглая форма. Цвет чёрный (color='k').

- с названием (title), думаю, всё ясно.

 

Leave a Reply