Скрипты расчёта мощности затока атлантических вод как площади фигуры на карте распределения характеристики на океанографическом разрезе.
Работа выполнялась в рамках проекта, поддержанного РНФ, № 17-14-01268 "Биология арктического планктона в зоне полярного фронта".
С постановкой задачи, детальным алгоритмом решения и первой версией стека технологий (на базе Matlab, Java и VBA с API Surfer Scripter) можно познакомиться в тезисах и статье(разрез "Кольский меридиан"). Основная проблема - плохо документированный Scripter, необходимость кастомизированных визуализаций, которую не поддерживал Scripter, желание использовать только свободное ПО и легкомодифицируемые скрипты на одном языке программирования. Обновленная версия на базе Python представлена в статье, в файлах AreaCalculator_fjord.ipynb (разрез в Ис-Фьорде, Шпицберген) и AreaCalculator_KolaMeridian.ipynb (разрез "Кольский меридиан") содержатся фрагменты для случая обработки одного входного файла в соответствии с этой версией.
Площади фигур, ограниченных изолиниями (изохалина 34,8 psu), поверхность воды и дном для пространственного распределения солёности по данным экспедиции 2018 года, разрез в Ис-Фьорде (Шпицберген).
-
Подготовка данных: загрузка полигона дна и распределения значений. Следует задать несколько линий уровня и построить их, пользуясь каким-то методом интерполяции (например, кригингом, как сделано в коде). Эти линии позволят понять направления градиентов, чтобы верно учитывать площади со знаком плюс или минус для формирования итоговой суммы.
-
Отображение фрагментов изолиний по очереди вместе с полигоном водной толщи (прямоугольник разреза, из которого удалён полигон дна): основная мысль - строить их пересечения и считать площади частей для каждого фрагмента. Трудность, которая не позволяет полностью автоматизировать процесс: одна изолиния, прерываемая дном, поверхностью или границами разреза по геогр. координатам, не формирует замкнутую ломаную (в том числе может быть представлена несколькими фрагментами). На рисунке изображён полигон толщи воды и две изолинии 34,8 psu - замкнутая и незамкнутая.
После доопределения множества точек ломаной (для того, чтобы замкнуть) имеем следующие две фигуры для исходной незамкнутой изолинии.
- Нахождение итоговой площади и построение финального рисунка. Используя clabel объекта axis с manual = True можно в интерактивном режиме указать позицию отображения подписи для изолинии. Черным показаны точки измерений.
Площади фигур, ограниченных изолиниями (изохалина 34.97 psu), поверхность воды и дном для пространственного распределения солёности по данным экспедиции весны 2018 года, разрез "Кольский меридиан".
Действуем по аналогии. В этом случае всего одна необходимая изолиния, но разделённая на две.
Придётся склеивать их и доопределять замкнутую линию. Итоговое изображение.
В первом скрипте для доступа к фрагментам изолиний используется от CS = ax.contour вариант CS.allsegs[i][j], а во втором - развёрнутый вариант CS.collections[i].get_paths()[j] (работают аналогично).