Побудова ізоліній на карті світу за допомогою python basemap - офіційний сайт easycoding team

Як відомо, Python - один з найбільш популярних і потужних мов програмування з практично необмеженим функціоналом. В даному HOWTO ми розглянемо як з його допомогою побудувати ізолінії на карті світу з точковим даними.

В ході роботи мені треба було просте і масштабується, для побудови карт метеополей по точковим даними (даних метеостанцій). Існує програма OpenGrADS, яка дозволяє працювати з безліччю форматів даних, однак рішення для відображення станційних даних мені здалося не дуже елегантним. Мій вибір припав на python через простоту його використання, а також потужної бібліотеки Basemap, що володіє необхідними методами відображення даних.

В результаті мною була написана програма, вирішальна це завдання коректно і без значних витрат часу.

Підготовка до роботи

Для роботи буде потрібно встановлені пакети numpy. scipy. matplotlib і basemap. Для установки перших трьох досить послідовно ввести в терміналі:

Пакет Basemap можна скачати з офіційної сторінки на SourceForge. Для установки даного пакета потрібно послідовно виконати наступний набір команд:

Тут / usr / local / geos - директорія, в яку ви хочете встановити систему геофізичних даних.

Якщо в ході установки не виникло помилок, ви можете перевірити працездатність даної бібліотеки, запустивши тестовий скрипт з папки examples:

Якщо все працює коректно, на екрані ви повинні побачити наступну картину:

Побудова ізоліній на карті світу за допомогою python basemap - офіційний сайт easycoding team

побудова ізоліній

Можна помітити, що на зображенні вище побудована карта висот земної поверхні, що представляє собою ізолінії геопотенциала, проте в даному прикладі набір широт і довгот - одновимірний масив, а масив з даними - двовимірний, а переді мною стояло завдання побудувати карту по даними в точках (з одновимірного масиву).

Отже, припустимо у нас є файл з даними в наступному форматі:

Розбирати механізм зчитування й обробки даних я не буду, залишаючи це в якості самостійного вправи для Новомосковсктеля. Скажу лише, що зробити це можна, наприклад, за допомогою numpy.genfromtxt.

Коли дані лічені, прийшов час приступити до їх обробки. Ідея методу полягає в тому, що ми спочатку створюємо регулярну координатну сітку, на яку накладаємо вихідні значення, а потім інтерполіруя їх в кожен вузол створеної стеки.

Тут numcols, numrows - це кількість вузлів сітки за широтою та довготою. Чим вище дозвіл, тим вище точність даних, що відображаються, але тим нижче швидкість роботи програми.

Якщо дані були успішно лічені і збережені в масиви lats, lons і data, то можна створити допоміжну двовимірну сітку значень, на яку будуть накладені вихідні дані, а значення в кожному вузлі будуть результатом інтерполяції.

Як параметр method можна вказати значення nearest, linear або cubic. що відповідає інтерполяції методом найближчого сусіда, лінійної або кубічної. Порівняти результат роботи методів можна тут.

Все що залишається - це передати отримані масиви методу Basemap.contourf. вказавши прапор latlon = True. щоб не проводити перерахунок широти і довготи в координати відображаються пікселів.

В результаті ви повинні отримати приблизно таку картину:

Побудова ізоліній на карті світу за допомогою python basemap - офіційний сайт easycoding team

висновок

В ході даного HOWTO був розібраний простий спосіб побудови ізоліній по точкових даними і показаний кінцевий результат. Була створена функція, що приймає на вхід два аргументи: перший це масив з даними формату

другий - максимальне значення, яке буде відображено, все значення вище нього буде обрізано до цього значення. Файл з функцією і прикладом її виклику доступний на сторінці проекту на GitHub.