Перейти к содержимому

Изменение диапазона долгот в растровом файле

Долгота может быть задана в промежутке от -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 
Опубликовано вGDALGMT