Долгота может быть задана в промежутке от -180° до +180° (от 180° з. д. до 180° в. д.) или от 0° до 360°, причем начальный меридиан с долготой 0° будет одинаковым для обоих вариантов.С теоретической точки зрения здесь нет больших проблем, поскольку всегда можно следовать какой-то одной принятой системе, а переход к другой не составляет труда. Однако легкость перехода очевидна только для точечных данных, в этом случае достаточно прибавить или вычесть 360° для долгот к западу от начального меридиана. Как поступить с растровыми данными в бинарных форматах? Решим задачу с помощью GMT и GDAL.
В геодезических теоретических приложениях чаще бывает удобнее использовать диапазон от 0° до 360° (то есть от 0 до 2π). В картографических приложениях всё зависит от задачи. Например, как мне кажется, Россию целиком крайне неудобно изображать в диапазоне долгот от -180° до +180°, потому что меридиан 180° делит её территорию на две части. Из-за этого восточные части Чукотки и о. Врангеля, а многие другие острова – полностью, будут оторваны от большей части территории страны и будут отображены в ГИС-программах где-то слева (на “западе”). Обратная ситуация, например, для Африки. Здесь по точно такой же причине неудобно представление в диапазоне долгот от 0° до 360°. Безусловно, всё это можно менять настройками самих ГИС-программ, однако это постоянно требует дополнительных действий.
Другой случай – это комбинирование данных из разных источников, каждый из которых следует своим стандартам по всем аспектам представления данных (формат файла, единицы величин, название переменных, система координат и т. д.), в том числе и в диапазоне долгот. Обычно перед всякой комбинацией приходится приводить данные к единому виду.
С этой задачей я сталкивался много раз (и продолжаю сталкиваться) и каждый такой раз у меня вылетало из головы, как её решать, поэтому настала пора застолбить решение себе же на будущее. Для этого воспользуемся GDAL – очень мощной свободной библиотекой для работы с геопространственными растровыми и векторными данными, а также не менее мощным набором команд для работы с геопространственной информацией GMT (Generic Mapping Tools).
Изменение диапазона долгот с GMT
GMT имеет смысл использовать тогда, когда в качестве исходного имеется файл формата NetCDF. Переход от диапазона -180°…+180° к 0°…360° осуществляется предельно просто всего одной командой grdedit
:
grdedit g-180-180.nc -Gg0-360.nc -R0/360/-90/90 -S -fg
Здесь -R
задает требуемый диапазон долгот и широт, -S
указывает на то, что мы просто хотим сместить долготы в соответствии с заданным диапазоном, -fg
означает, что мы работаем с географическими данными, имя входного NetCDF файла g-180-180.nc
(с долготами в диапазоне -180°…+180°) задается сразу после команды grdedit
, имя выходного NetCDF файла g0-360.nc
(с долготами 0°…360°) задается параметром -G
.
Обратный переход выполняется той же командой, но с немного иными параметрами
grdedit g0-360.nc -Gg-180-180.nc -R-180/180/-90/90 -S -fg
Изменение диапазона долгот с GDAL
Если в качестве исходного формата данных задан GeoTIFF, то лучше сразу применить библиотеку GDAL. В частности, можно воспользоваться двумя утилитами (скриптами) для командной строки gdal_translate
и gdal_merge.py
. Идея здесь лежит такая. Мы сначала разрезаем файл на две части, одна из которых содержит всегда положительные долготы 0°…+180°, а вторая, в зависимости от случая, содержит либо отрицательные долготы -180°…0°, либо долготы больше 180°. Затем вторую часть мы переводим в новую систему. Наконец, соединяем файлы с долготами 0°…+180° с оставшейся частью.
Переход от диапазона -180°…+180° к 0°…360° тогда осуществляется так:
gdal_translate -projwin 0 90 180 -90 g-180-180.tif g0-180.tif gdal_translate -projwin -180 90 0 -90 -a_ullr 180 90 360 -90 g-180-180.nc g180-360.tif gdal_merge.py -o g0-360.tif g0-180.tif g180-360.tif
Обратный переход выполняется аналогично:
gdal_translate -projwin 0 90 180 -90 g0-360.tif g0-180.tif gdal_translate -projwin 180 90 360 -90 -a_ullr -180 90 0 -90 g0-360.tif g-180-0.tif gdal_merge.py -o g-180-180.tif g0-180.tif g-180-0.tif