Карта мира с произвольным центральным меридианом в MapInfo

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


MapInfo при отображении карты в проекции не сворачивает слои вокруг меридиана-антипода. Задача подготовки слоёв для отображения ложится на плечи картографа.

Введение

Как многие ГИС, MapInfo при отображении карты в какой-либо проекции не сворачивает отображаемые слои вокруг меридиана-антипода, который отстоит на 180° от центрального. Это позволяет создавать карты мира, разрезанные по произвольной линии, — линии смены дат, например. Однако для пользователя свобода, как обычно, идёт рука об руку с необходимостью. Если имеющаяся в наличии карта должна быть отображена в проекции, центральный меридиан которой отличается от среднего меридиана исходной карты, в форме милой глазу симметричной фигуры, то картографу для этого придётся приложить некоторые усилия.

Данные

В качестве тестового материала используем карту мира GSHHG, которая распространяется под лицензией LGPL. Эта карта развивается как географическая основа открытого проекта GMT. GMT сворачивает изображение вокруг меридиана-антипода, и слои карты в «родном» формате не содержат разрезанных объектов. Однако перед экспортом слоёв в формат ESRI shapefiles полигоны под меридианом 180° разрезаются на восточную и западную часть, что даёт карту в стандартном диапазоне долгот ±180°.

Постановка задачи

Для демонстрации возьмём из GSHHG несколько слоёв грубого (crude) разрешения. Поставим перед собой цель отобразить карту в проекции Робинсона с центральным меридианом 150° з. д. Для достижения этой цели создадим новые слои в диапазоне долгот от 330° з. д. до 30° в. д. Кроме того, дополним карту слоями сетки параллелей и меридианов grid15 и «океана» ocean.

Построение карты

Программа PacWorld

Утилита PacWorld от IAA Pty Ltd решает задачу преобразования карты из стандартного диапазона долгот в диапазон 0°–360°. Поскольку она доступна в кодах MapBasic, можно модифицировать её для работы с произвольным центральным меридианом.

Алгоритм работы начинается с создания полигона, одной из сторон которого является начальный меридиан. Объекты слоя разрезается этим полигоном. Затем объекты западного полушария модифицируются: каждый узел перемещается на 360° к востоку.

Недостатки PacWorld, помимо упомянутой жёсткой привязки к меридиану 180° в. д.:

  • разрезы материков на краю карты отображаются в проекциях несглаженными прямыми отрезками; — легко исправить, запрограммировав создание промежуточных узлов в стороне полигона, образованной начальным меридианом;
  • некорректно трансформируется Антарктида; — можно обойти эту проблему через конвертирование полигона в полилинию и обратно с некоторым редактированием;
  • зависание при переносе объектов с большим количеством узлов; с картой GSHHG это происходит уже для слоя континентов со средним (intermediate) разрешением; похоже, дело в принципиальной ограниченности ресурсов, выделяемых программам MapBasic; — фатальный недостаток.

Проблема с зависанием связана не с процедурой разрезания. Зависание происходит в процессе перемещения узлов. Можно модифицировать PacWorld так, чтобы он только разрезал объекты, а перемещение осуществить другими средствами. Однако с методической точки зрения полезно поработать руками.

Конструирование координатной сетки и «океана»

Построим слой параллелей и меридианов grid15 программой GridMaker, входящей в набор стандартных утилит MapInfo. Используем четыре линии по контуру для создания слоя «океана» ocean.

Разрезание слоя

Разрежем слой континентов и островов GSHHS_c_L1 на две половины полигоном слоя ocean. Часть, попадающую на полигон (и, следовательно, на будущую карту), сохраним как новый слой с прежним именем GSHHS_c_L1 в другую папку. Часть, не попадающую на полигон, экспортируем в файл формата MIF/MID под именем GSHHS_c_L1_1.MIF.

Перемещение половины слоя на 360°

Утилита shiftxy

Воссоединение слоя

Заключение