Конвертация проектов MapInfo в проекты ArcGIS

Владимир Соколов, Николай Добрецов, Борис Берхин, Юрий Бернштейн
ООО “Дата Ист”, Новосибирск, тел. (383-2) 32-03-20, факс 32-57-85, e-mail: bberkhin@dataeast.ru

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

Пользователям различных ГИС нередко требуется создавать информационные продукты, которые можно было бы переносить из одной программной среды в другую, сохраняя при этом не только данные, но и всю сопровождающую их служебную и вспомогательную информацию. Стандартные решения, предлагаемые разработчиками ГИС, как правило, сводятся к экспорту/импорту данных, а задача переноса служебной информации ими не решается. Проблема совместимости информации, изначально создаваемой и поддерживаемой в разных инструментальных системах, актуальна, в том числе и в России. В частности, существует определенная потребность перевода проектов MapInfo в проекты ArcGIS с сохранением максимально возможной информации о характеристиках обычных и тематических слоев, символов и т.д. Решению этой задачи и посвящена настоящая статья.

Под проектом MapInfo понимается в первую очередь:

  • файл проекта (расширение WOR), в котором описаны слои данных, на которых строится карта, перечень слоев, их характеристики и т.д.
  • сами данные — набор таблиц MapInfo (расширение TAB)

Под проектом ArcGIS (точнее ArcMAP) понимается:

  • файл проекта ArcMAP (расширение MXD)
  • данные в шейп-файлах (расширение SHP)

Проблемы решения технологической задачи

MapInfo и ArcGIS — развитые ГИС системы, позволяющие решать широкий круг задач. Однако между ними существует целый ряд идеологических различий.

В первую очередь, они реализуют разную объектную модель и модель данных. Первая имеет встроенный язык программирования (MapBasic) – диалект обычного Basic. Вторая — встроенный язык Visual Basic и развитую объектную модель, основанную на COM интерфейсах. Следует отметить, что объектная модель MapInfo сильно уступает в плане проработанности, к тому же в полном объеме она доступна только из приложений на MapBasic. Но даже в этом случае не все параметры и свойства объектов могут быть извлечены программно (например, параметры тематических слоев). Поэтому на этапе извлечения информации мы используем комбинированный подход: часть параметров будет извлекаться приложением, написанным на MapBasic, часть — путем анализа файла проекта (WOR-файла).

Другое отличие – разные подходы к хранению и отображению данных:

  • MapInfo допускает смешивание объектов разных типов (например, текста, полигонов и полилиний) в одной таблице. ArcGIS предполагает, что в одном слое содержатся данные только одного типа (например, линии).
  • MapInfo может хранить информацию о символах (объектах, которые определяют, как будет отображаться тот или иной графический объект) прямо в таблицах данных. ArcGIS хранит подобную информацию только в файле проекта, выбирая соответствующий символ в зависимости от информации из атрибутивной таблицы.
  • MapInfo жестко кодирует тип символа целым числом (например, для полигона – вид штриховки). Таких кодов для каждого пространственного типа объектов (полигона, линии, точки) около ста. ArcGIS имеет другие, более гибкие кодировки символов, в частности, можно создать свой собственный тип линии.

Эти и другие отличия накладывают свой отпечаток на процесс переноса информации.

Предлагаемое решение

Нами разработана программа, использующая следующую технологическую последовательность преобразования информации:

  1. Извлечение необходимой информации из файла проекта MapInfo и его объектной модели и сохранение ее в XML файле.
  2. Экспорт таблиц MapInfo в данные ArcGIS, т.е. таблицы TAB в SHP.
  3. Преобразование извлеченных данных в проект ArcMAP и сохранение этого проекта после всех установок.
  4. Формирование списка не преобразованной информации.

Экспорт метаинформации о проекте MapInfo осуществляется с помощью модуля, написанного на MapBasic и представляющего собой откомпилированный файл приложения MapBasic (расширение MBX). Запуск этого модуля производится автоматически из управляющей программы. Затем MapInfo закрывается и производится обработка файла проекта (WOR) для извлечения параметров, специфичных для тематических слоев MapInfo. Так как нами использовалась русская версия MapInfo, проводится перевод кодировки XML файла (из 866 в UTF-8).

Фактически, результатом работы программы на перечисленных выше шагах является создание промежуточного файла в формате XML, который содержит всю необходимую для преобразования информацию о проекте MapInfo. Фрагмент этого файла показан на рис 1.


Рис. 1. Фрагмент промежуточного файла в формате XML.

Ключевая информация, которая извлекается из проекта MapInfo, относится к следующим категориям:

  • количество слоев
  • количество тематических слоев
  • масштаб карты
  • базовые единицы измерения
  • проекция
  • информация для слоев: минимальный и максимальный масштаб отображения слоя, то же для подписей, символы по умолчанию для слоя, полный перечень символов для каждого объекта из таблицы MapInfo (TAB), тип слоя (видимый, невидимый) и т.д.
  • параметры тематических слоев: типы (ranges, density, graduated и др.), поле в таблице, по которому построен тематический слой, символы, диапазоны значений и т.д.
  • другие параметры.

На втором эхтапе проводится экспорт таблиц MapInfo в данные ArcGIS, т.е. перевод таблиц TAB в SHP. При этом сохраняется необходимая информация о проекциях.

Далее запускается приложение ArcMap, в котором с помощью специально разработанного расширения формируются необходимые объекты, подключаются слои данных, устанавливаются соответствующие параметры изображения для слоев и т.д.

Результатом работы является файл проекта ArcMap, набор шейп-файлов и лог-файл, содержащий информацию о работе программы, в том числе и список не преобразованных характеристик исходного проекта.

На рис 2. показана карта, построенная на данных США, — так, как она выглядит в окне MapInfo. Фрагменты легенды из окна MapInfo показывают, как должны отображаться слои карты (рис. 3).


Рис. 2. Карта в окне MapInfo.


Рис. 3. Фрагменты легенды из окна MapInfo.

Результат автоматического преобразования карты в ArcMap показан на рис. 4.


Рис. 4. Преобразованная карта в ArcMap.

Нерешенные вопросы

Из-за различий в подходах в каждой конкретной системе к хранению данных, их отображению и т.д. полностью автоматизировать процесс конвертации, видимо, невозможно. Кроме того, существуют проблемы, связанные с переводом программ и модулей MapBasic на Visual Basic и COM-технологию.

В целом, по нашему мнению, возможности ArcGIS выше аналогичных возможностей MapInfo. И в том случае, когда автоматизированным способом не удается получить абсолютно полную идентичность проектов, ArcGIS, как правило, позволяет добиться этого другим способом. Поэтому для сложных проектов исключить участие оператора полностью не удается.

Такие расхождения между двумя рассматриваемыми ГИС предполагается решать посредством формирования специального списка не переносимой информации, который в дальнейшем может служить основой для более точной адаптации информации к модели данных ArcGIS. Функция оператора в этом случае должна сводиться к окончательной настройке проекта, большая часть которого уже выполнена программой преобразования. Существенным преимуществом предлагаемой нами технологии является создание XML-файла, который можно будет использовать при дальнейшей настройке проекта.