Карта мира с произвольным центральным меридианом в MapInfo: различия между версиями
ErnieBoyd (обсуждение | вклад) Нет описания правки |
ErnieBoyd (обсуждение | вклад) Нет описания правки |
||
Строка 15: | Строка 15: | ||
=== Программа PacWorld === | === Программа PacWorld === | ||
[http://www.mapinfotools.com/index.php?option=com_sobi2&sobi2Task=sobi2Details&catid=2&sobi2Id=380&Itemid=72 PacWorld] | Утилита [http://www.mapinfotools.com/index.php?option=com_sobi2&sobi2Task=sobi2Details&catid=2&sobi2Id=380&Itemid=72 PacWorld] от IAA Pty Ltd решает задачу преобразования карты из стандартного диапазона долгот в диапазон 0°–360°. Поскольку она доступна в кодах MapBasic, можно модифицировать её для работы с произвольным центральным меридианом. | ||
Алгоритм работы начинается с создания полигона, одной из сторон которого является начальный меридиан. Объекты слоя разрезается этим полигоном. Затем объекты западного полушария модифицируются: каждый узел перемещается на 360° к востоку. | |||
Недостатки '''PacWorld''', помимо упомянутой жёсткой привязки к меридиану 180° в. д.: | |||
* разрезы материков на краю карты отображаются в проекциях несглаженными прямыми отрезками; — легко исправить, запрограммировав создание промежуточных узлов в стороне полигона, образованной начальным меридианом; | |||
* некорректно трансформируется Антарктида; — можно обойти эту проблему через конвертирование полигона в полилинию и обратно с некоторым редактированием; | |||
* зависание при переносе объектов с большим количеством узлов; с картой GSHHG это происходит уже для слоя континентов со средним (intermediate) разрешением; похоже, дело в принципиальной ограниченности ресурсов, выделяемых программам MapBasic — фатальный недостаток. | |||
Разрезание не вызывает нареканий. Зависание происходит в процессе перемещения узлов. Можно модифицировать '''PacWorld''' так, чтобы он только разрезал объекты, а перемещение осуществить другими средствами. Однако с методической точки зрения полезно поработать руками. | |||
=== Конструирование координатной сетки и «океана» === | === Конструирование координатной сетки и «океана» === | ||
Построим слой параллелей и меридианов '''grid15''' программой '''GridMaker''', входящей в набор стандартных утилит MapInfo. Используем четыре линии по контуру для создания слоя «океана» '''ocean'''. | |||
=== Разрезание слоя === | === Разрезание слоя === |
Версия от 20:21, 23 марта 2013
Введение
Как многие ГИС, 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.
Разрезание слоя
Перемещение половины слоя на 360°
Утилита shiftxy