Карта мира с произвольным центральным меридианом в MapInfo: различия между версиями
ErnieBoyd (обсуждение | вклад) |
ErnieBoyd (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
{{Статья|Черновик}} | |||
{{Аннотация|??}} | |||
== Введение == | == Введение == | ||
Строка 29: | Строка 33: | ||
Построим слой параллелей и меридианов '''grid15''' программой '''GridMaker''', входящей в набор стандартных утилит MapInfo. Используем четыре линии по контуру для создания слоя «океана» '''ocean'''. | Построим слой параллелей и меридианов '''grid15''' программой '''GridMaker''', входящей в набор стандартных утилит MapInfo. Используем четыре линии по контуру для создания слоя «океана» '''ocean'''. | ||
<gallery widths="96px" heights="60px" perrow="6"> | |||
File:Non-std_map_02.png | |||
</gallery> | |||
=== Разрезание слоя === | === Разрезание слоя === |
Версия от 21:03, 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