Описание обменного формата MapInfo MIF (MapInfo Interchange Format) ⁄GLab©2007⁄
Вверх

Описание обменного формата MapInfo MIF (MapInfo Interchange Format)


Если некто решит поискать в Интернете описание обменного формата MapInfo (MID/MIF), то столкнётся с парадоксальной ситуацией. Несмотря на широкое распространение самой программы и ещё большее распространение обменного формата, список выдачи поисковика будет весьма невелик. А если отбросить рекламный мусор, то результат сведётся к десятку ссылок, которые, к тому же, приводят один и тот же текст. За разным авторством, в разном оформлении, с меньшими или большими искажениями разные сайты цитируют небрежно вырванный кусок из «Руководства Пользователя MapInfo» то ли 5-й, то ли 6-й версии.

Вряд ли это делается по злому умыслу. Ранние версии документации были оформлены (по объективным причинам) крайне ненаглядно и мало кому удавалось дочитать до «Приложения J» на 500-какой-то странице. Не говоря уже о том, чтобы визуально запомнить этот текст. А, начиная с версии 8.0 данный раздел вообще исчез из «Руководства» и вернулся только в версии 12.0, правда, существенно переработанный и не столь наглядный.

Попробуем исправить положение, скомпилировав нужные главы «Руководства Пользователя» от разных версий.



Введение

В этой статье описан формат обмена данными MapInfo MID/MIF.

Этот универсальный формат позволяет сопоставлять различным графическим элементам настраиваемые данные. MIF-файл является текстовым (ASCII), поэтому файлы в таком формате можно редактировать, достаточно легко генерировать, причем они будут работать в любых системах, где работает MapInfo. Возможно, оптимальным способом изучения MapInfo Interchange Format (MIF) является просмотр примеров, приведенных в этой статье, по ходу чтения описания формата. Вы можете также создать свои примеры, экспортировав какие-нибудь файлы в формат MIF, а затем просматривать их в текстовом редакторе.

Данные MapInfo хранятся в двух файлах: графическая информация содержится в файлах с расширением MIF, а текстовая – в файлах с расширением MID. Каждая строка текстовых данных отделяется от следующей строки либо символом возврата каретки (Carriage Return), либо символом возврата каретки вместе с новой строкой (Line Feed), либо только символом новой строки. MIF-файл состоит из двух частей: заголовка и секции данных. Заголовок файла содержит информацию о том, как создавать таблицы MapInfo, а секция данных содержит определения графических объектов.

Заголовок файла формата MIF

Заголовок файла формата MIF имеет следующий вид (в квадратные скобки взята информация, которая может отсутствовать).

VERSION n
CharSet "char_set"
[ DELIMITER "<с>" ]
[ UNIQUE n,n.. ]
[ INDEX n, n.. ]
[ COORDSYS... ]
[ TRANSFORM... ]
COLUMNS n
<имя> <тип>
<имя> <тип>

Предложение Version (Версия)

Для правильной обработки MIF-файла MapInfo необходимо знать, в какой версии программы он был создан. Номер версии задаётся предложением VERSION:

VERSION 1 или VERSION 2 или VERSION 300 или VERSION 450 и так далее.

  • MIF-файл всегда сохраняется с номером версии 300, если иное не задано в исходной таблице.
  • После того, как таблица однажды была обновлена на более новую версию, MapInfo Professional никогда не понижает номер её версии на меньшее значение, даже когда характеристика, вызвавшая обновление, удалена.
  • Параметры Pen(0,0,0) и Brush(0,0,0), которые можно было использовать в таблицах MapInfo Professional 4.1, запрещены в MapInfo Professional 4.5 и более новых версиях.
  • Толщина линии, заданная предложением Pen, соответствует указанному значению, умноженному на 10, плюс 10 (.2 → 12, 1.0 → 20, и т. п.). При этом в заголовке MIF-файла номер версии меняется на 450.

Все изменения (и их следствия) в TAB- и MIF-файлах, рабочих наборах и других служебных файлах MapInfo Professional перечислены в соответствующей таблице Приложения D «Руководства Пользователя» MapInfo версии 12.5.

Предложение CharSet (Набор символов)

В предложении CharSet указывается, набор символов какой кодовой страницы используется в таблице. Например, «WindowsLatin1» означает, что используется стандартная для США и Западной Европы кодовая страница Windows (так называемая «ANSI кодировка» или «кодовая страница 1251»); «WindowsCyrillic» обозначает стандартный для России набор символов Windows (кодовая страница 1252); «MacRoman» обозначает стандартный набор символов Macintosh US & Western Europe. Если указать слово «Neutral», то MapInfo не будет выполнять преобразование символов в текущую кодовую страницу Windows.

Если Вы не знаете точно, как обозначается используемый Вами набор символов, то выполните экспорт таблицы и изучите MIF–файл с помощью текстового редактора. Название используемого набора символов будет указано в предложении CharSet, например:

Charset "WindowsCyrillic"

Предложение Delimiter (Разделитель)

Здесь в двойных кавычках указывается символ, использующийся в качестве разделителя, например:

DELIMITER ";"

Стандартное значение разделителя – символ табуляции; при использовании стандартного разделителя строка DELIMITER может быть опущена.

Предложение Unique (Уникальная колонка)

Здесь задается число. Это число указывает на столбец в базе данных: 3 указывает на третий столбец, 7 – на седьмой и так далее. Что происходит со столбцами, перечисленными в списке UNIQUE? Представим, например, что имеется база данных о шоссейных дорогах. Каждому шоссе соответствует единственное название, но шоссе может распадаться на несколько участков (которым сопоставлены отдельные записи). Поместите столбец NAME в список UNIQUE, а столбец сегментов не указывайте в этом списке. В результате будут созданы две соединенные таблицы: таблица имен и таблица прочих атрибутов объектов. Именно таким образом разрабатывались различные таблицы улиц для Pitney Bowes Software Inc. (таблицы StreetPro).

Предложение Index (Индекс)

Числа, указанные в этом предложении, представляют собой номера тех колонок таблицы, для которых определены индексы. При этом колонки нумеруются, начиная с единицы так, что число 3 означает, что индекс определен для третьей колонки, число 7 – для седьмой и т.д. Колонки в списке INDEX будут пронумерованы в соответствии с этими числами.

Предложение CoordSys (Координатная система)

Предложение COORDSYS задается для того, чтобы указать, что данные хранятся НЕ в проекции Широты/Долготы. Если предложение COORDSYS отсутствует, то предполагается, что данные приведены в проекции Широта/Долгота.

Все координаты приводятся относительно северо-восточного квадранта. Координаты объектов на территории США имеют отрицательную координату X, а координаты объектов в России и Европе (к востоку от Гринвича) имеют положительные координаты по оси X. Объектам в северном полушарии соответствуют положительные координаты Y, а объектам в южном полушарии – отрицательные координаты Y.

Синтаксис записи предложения CoordSys:

CoordSys Earth
[ Projection type, datum, unitname
[ , origin_longitude]
[ , origin_latitude ]
[ , standard_parallel_1 [ , standard_parallel_2 ] ]
[ , azimuth ]
[ , scale_factor ]
[ , false_easting ]
[ , false_northing]
[ , range ] ]
[ Affine Units unitname, A, B C, D, E, F ]
[ Bounds ( minx, miny) ( maxx, maxy) ]

или

CoordSys Nonearth
[ Affine Units unitname, A, B C, D, E, F ]
Units unitname
Bounds ( minx, miny) ( maxx, maxy)

или

CoordSys Layout Units paperunitname

или

CoordSys Table tablename

или

CoordSys Window window_id

где:

  • type – положительное целое число , показывающее, какая координатная система используется;
  • datum – положительное целое число , указывающее какой регион используется;
  • unitname – строковая величина, показывающая, какие единицы измерения используются (например, "m" для метров);
  • origin_longitude – вещественное число, в градусах, показывающее долготу;
  • origin_latitude – вещественное число, в градусах, показывающее широту;
  • standard_parallel_1 и standard_parallel_2 – вещественные значения широты, в градусах;
  • azimuth – вещественная величина, угол измерения в градусах;
  • scale_factor – вещественная величина, масштабный множитель;
  • range – вещественная величина, от 1 до 180, предписывающая, какая часть земной поверхности будет показана;
  • minx – вещественная величина, определяющая минимальное значение x;
  • miny – вещественная величина, определяющая минимальное значение y;
  • maxx – вещественная величина, определяющая максимальное значение x;
  • maxy – вещественная величина, определяющая максимальное значение y;
  • paperunitname – строковая величина, представляющая "бумажные" единицы измерения (например , "in" для дюймов );
  • tablename – имя открытой таблицы;
  • window_id – целая величина, идентификатор окна, соотнесенного с окном Карты или Отчета;
  • A представляет масштабирование или растяжение вдоль оси X.
  • B представляет поворот или отклонение вдоль оси X.
  • C представляет сдвиг вдоль оси X.
  • D представляет масштабирование или растяжение вдоль оси Y.
  • E представляет поворот или отклонение вдоль оси Y.
  • F представляет сдвиг вдоль оси Y.

Предложение Transform (Преобразование)

Если в файле MIF записаны координаты относительно северо-западного квадранта (квадрант 2), то Вы можете задать преобразование этих координат к северо-восточному квадранту (квадрант 1) в предложении Transform.

Квадрант 2:
Северо-западный квадрант
Квадрант 1:
Северо-восточный квадрант
Квадрант 3:
Юго-западный квадрант
Квадрант 4:
Юго-восточный квадрант

Данное предложение имеет следующую форму:

TRANSFORM множитель_Х, множитель_Y, смещение_Х, смещение_Y

Чтобы задать преобразование из данных по квадранту 2 в данные по квадранту 1, задайте следующее предложение Transform:

TRANSFORM -1, 0, 0, 0

Нули означают, что MapInfo игнорирует данные параметры.

Если Вы работаете с программой, создающей файлы формата MIF с координатами для квадранта 2, Вы можете:

  • добавлять предложения TRANSFORM в файлы MIF;
  • внести изменение в программу, чтобы она вырабатывала координаты для квадранта 1;
  • внести изменение в программу, чтобы она добавляла предложение TRANSFORM в каждый MIF-файл.

Предложение Columns (Колонки)

Здесь задается число столбцов. Затем, для каждого столбца в отдельной строке указывается название столбца, тип данных в нем, а также размер поля (для столбцов, содержащих строки и десятичные числа). Возможны следующие типы столбцов:

  • char (длина поля)
  • integer (4 байта)
  • smallint (2 байта, так что допустимы числа в диапазоне от -32767 до +32767)
  • decimal (длина поля, число цифр после запятой)
  • float
  • data
  • logical

Вот пример раздела столбцов в заголовке:

COLUMNS 3
STATE char (15)
POPULATION Integer
AREA decimal (8,4)

Файл MID должен содержать следующие три столбца данных, указанные в заголовке:

  • столбец STATE: 15-символьное поле;
  • столбец POPULATION: поле целых чисел;
  • столбец AREA: поле десятичных чисел, состоящих из не более чем 8 цифр, в том числе из 4 цифр после запятой.

Секция данных в файлах формата MIF

Секция данных в файлах формата MIF следует после заголовка и должна начинаться со слова DATA на отдельной строке:

DATA

Секция данных MIF-файла может содержать любое число графических примитивов, по одному для каждого графического объекта. MapInfo сравнивает разделы файлов формата MIF и MID, сопоставляя первому объекту в MIF-файле первую строку MID-файла, второму объекту MIF-файла вторую строку MID-файла и так далее.

Если для строки MID-файла не найдено соответствующего графического объекта, то создается «пустой» объект (NONE) в соответствующей позиции MIF-файла.

NONE

Могут использоваться следующие графические объекты:

  • точка
  • линия
  • полилиния
  • область
  • дуга
  • текст
  • прямоугольник
  • скругленный прямоугольник
  • эллипс
  • группа точек
  • коллекция

Точка

Объект типа точка имеет два параметра: координату Х и координату Y. Может также быть указан вид символа, которым обозначается данная точка. Для символа указывается номер. Если не задан символ, для обозначения точки используется текущий символ.

POINT x у [ Symbol (shape, color, size) ]

Каждая версия MapInfo поддерживает разные символы предложения SYMBOL.

Линия

Объект типа линия должен иметь четыре обязательных параметра: координаты X и Y для двух концевых точек. Может также быть указан тип линии. Если тип линии не задан, то используется текущий тип линий.

LINE x1 y1 x2 y2 [ PEN (width, pattern, color) ]

Полилиния

Объект типа полилиния может состоять как из одной, так и из нескольких секций. Если полилиния состоит из нескольких секций, то в ее описание следует включить ключевое слово MULTIPLE, за которым должно быть указано количество секций numsections. При этом, для каждой секции обязательно должно быть задано число точек, из которых она состоит (аргумент numpts) и, следом за ним, координаты x/y каждой точки. Для выбора стиля линии используется предложение PEN (см. ниже). Если использовать слово SMOOTH, то полилиния будет сглажена.

PLINE [ MULTIPLE numsections ]
numpts1
x1 y1
x2 y2
(…)
[ numpts2
x1 y1
x2 y2 ]
[ PEN (width, pattern, color) ]
[ SMOOTH ]

Область

Объект типа область может состоять из одного или нескольких полигонов. Число полигонов, из которых состоит область, задается сразу после ключевого слова REGION (аргумент numpolygons). Для каждого полигона следует указать число его вершин (параметр numpts) и их координаты x/y. Дополнительно, с помощью ключевых слов PEN и BRUSH, можно задать стиль области (см. ниже). Ключевое слово CENTER позволяет явно задать координаты центроида области. Указание центроида сокращает время импорта и экспорта.

REGION numpolygons
numpts1
x1 y1
x2 y2
(…)
[ numpts2
x1 y1
x2 y2 ]
[ PEN (width, pattern, color) ]
[ BRUSH (pattern, fgcolor, bgcolor) ]
[ CENTER x y ]

Дуга

Для объекта типа дуга должны быть указаны противоположные по диагонали углы описанного прямоугольника, а также начальный (a) и конечный (b) углы дуги в градусах, считая против хода часовой стрелки (нуль в положении стрелки в 15.00). Может также быть указан тип линии.

ARC x1 y1 x2 y2
a b
[ PEN (width, pattern, color) ]

Текст

Содержание Текстового объекта задается строкой текста, длина которой не должна превышать 255 символов. Для того чтобы расположить текст на экране в несколько строк, вставьте символы «\n» в места переноса строки (например, «Первая строка\n Вторая строка \n Третья строка»). Параметры x1, y1, x2, и y2 задают положение текста на карте (определяют противоположные углы описанного прямоугольника). Интервал между строчками может быть равен 1.0 (один интервал), 1.5 или 2.0 (двойной интервал). С помощью ключевого слова FONT (см. ниже) можно задать начертание шрифта и многие другие атрибуты текста.

TEXT "textstring"
x1 y1 x2 y2
[ FONT... ]
[ Spacing {1.0 | 1.5 | 2.0} ]
[ Justify {Left | Center | Right} ]
[ Angle text_angle ]
[ Label Line {simple | arrow} x y ]

Прямоугольник

Для прямоугольника задаются координаты его противоположных углов. Может также быть указан тип линий и штриховки.

RECT x1 y1 x2 y2
[ PEN (width, pattern, color) ]
[ BRUSH (pattern, forecolor, backcolor) ]

Скруглённый прямоугольник

Для скруглённого прямоугольника задаются координаты его противоположных углов, а также степень сглаживания (a). Может также быть указан тип линий и штриховки. Степень сглаживания выражается в координатных единицах.

ROUNDRECT x1 y1 x2 y2
a
[ PEN (width, pattern, color) ]
[ BRUSH (pattern, forecolor, backcolor) ]

Скруглённый прямоугольник

Для эллипса задаются координаты противоположных углов описанного прямоугольника. Может также быть указан тип линий и штриховки.

ELLIPSE x1 y1 x2 y2
[ PEN (width, pattern, color) ]
[ BRUSH (pattern, forecolor, backcolor) ]

Группа точек

Объект Группа точек использует несколько параметров, состоящих из пар координат xy. Число точек задается параметром num_points. Символы задаются дополнительным параметром Symbol. Если параметр SYMBOL пропущен, то используется текущий символ.

MULTIPOINT num_points
x1 y1 x2 y2 x3 y3 (...)
[ Symbol (shape, color, size) ]

Коллекция

Объект Коллекция использует несколько групп параметров, состоящих из параметров тех объектов, которые включены в коллекцию. Индивидуальные параметры для Region, Pline и Multipoint, входящих в коллекцию, такие же, как и в соответствующих одиночных типах объектов. Параметр num_parts требуется, если число частей коллекции менее трех. Если это число пропущено, то оформление будет таким, как если бы коллекция содержала все три части. При экспорте MapInfo всегда записывает это число в MIF файл. Например:

Collection 3
Region 1
4
14.850832 20.077456
15.850832 21.077456
16.850832 23.077456
14.850832 20.077456
Pen (1,2,0)
Brush (2,16777215,16777215)
Center 8.850832 14.577456
Pline 3
-7.149168 0.077456
-3.149168 -2.922544
-2.149168 2.077456
Pen (1,2,0)
Multipoint 2
-6.149168 -0.922544
-5.149168 0.077456
Symbol (35,0,12)

Коды типов линий, штриховки, символов и шрифтов в файлах формата MIF

Предложение Pen (стиль линии)

Предложение PEN задает ширину, тип и цвет линейных объектов, таких как линия, полилиния и дуга. Предложение PEN имеет следующий синтаксис:

PEN (width, pattern, color)

где

  • width – толщина (ширина) линии;
  • pattern – тип линии;
  • color – цвет линии в системе RGB.

Ширина задается числом от 0 до 7, при этом линия нулевой ширины невидима на экране. 11-2047 это значения, которые могут быть преобразованы в пункты:

ширина линии = (число пунктов * 10) + 10

Цвет задается в виде целого числа, задающего 24-битовое RGB-значение цвета.

Типы линий обозначаются кодами от 1 до 118; тип 1 представляет собой невидимую линию. Номер типа линии соответствует номеру типа линии в файле, определяющем линии. Этот файл может редактироваться в редакторе стиля линий. Номера в файле линий не могут превышать 127. Если линии перекрещивающиеся, то 128 будет добавлено к номеру линии.

Стили перекрещивающихся линий имеют номера 129-255. Поскольку файл с линиями может редактироваться, и могут определяться пересекающиеся типы линий, то номера линий в совокупности могут быть от 1 до 255.

Ниже приводится таблица, содержащая пример типов линий и их кодов:

Рис. 1

Предложение Brush (штриховка)

Brush задает шаблон, основной цвет и цвет фона объектов, имеющих площадь, таких, как окружность или область.

Brush (pattern, forecolor [, backcolor ])

где

  • pattern – тип штриха;
  • forecolor – цвет штриха в системе RGB;
  • backcolor – цвет фона в системе RGB.

Основной цвет и цвет фона задаются в виде 24- битового RGB значения.

Шаблон задается числом от 1 до 71, при этом в шаблоне с номером 1 оба цвета отсутствуют, а в шаблоне 2 отсутствует цвет фона. Шаблоны с кодами 9-11 зарезервированы для внутренних целей.

Внимание: Получить прозрачный цвет фона (для стилей с номерами 3 и выше) можно, опустив параметр backcolor в предложении Brush. Например: Brush (5,255).

Ниже приводится таблица кодов и соответствующих им рисунков штриховок. Заметим ещё раз, что для штриха номер 1 (прозрачный) или 2 (ровная заливка), параметр backcolor не влияет на заливку.

Рис. 2

Предложение Symbol (стиль символа)

Предложение Symbol определяет то, в каком виде появится точечный объект. Есть три различные формы предложения Symbol:

  • Синтаксис для MapInfo 3.0
  • Синтаксис для шрифта TrueType
  • Синтаксис для растровых символов

Brush (pattern, forecolor [, backcolor ])

где

  • pattern – тип штриха;
  • forecolor – цвет штриха в системе RGB;
  • backcolor – цвет фона в системе RGB.

Предложение Symbol. Синтаксис для MapInfo 3.0

Для версии MapInfo 3.0 используется следующий символ:

SYMBOL (shape, color, size)

Величина shape это целое, принимающее значения от 31 и выше ; 31 это пустой символ (объект невидим). Стандартный набор символов включает символы с номерами от 32 до 67.

Аргумент color это целое, представляет значение цвета, 24-битного RGB.

Аргумент size это размер символа, целое от 1 до 48, размер символа в пунктах.

В этой таблице показаны эти символы, поставляющиеся с MapInfo:

Рис. 3

Предложение Symbol. Синтаксис для шрифта TrueType

Для того чтобы оформить символы, созданные из шрифта TrueType, следует использовать следующую форму предложения Symbol:

SYMBOL (shape, color, size, fontname, fontstyle, rotation)

Аргумент fontname – это текстовая строка, задающая название шрифта (например, «Wingdings»).

Аргумент fontstyle – это целое число, управляющее оформительским эффектом, может принимать следующие значения.

Fontstyle Эффект
0 Обычный текст
1 Жирный текст
16 Черная кайма вокруг символа
32 Тень
256 Белая кайма вокруг символа

Чтобы скомбинировать два и более эффекта, числа нужно сложить. Чтобы, например, задать жирный шрифт с тенью, следует задать число 33.

Аргумент rotation – это число с плавающей точкой, угол поворота в градусах.

Предложение Symbol. Синтаксис для растровых символов

Для того, чтобы оформить растровые символы, следует использовать следующую форму предложения Symbol:

SYMBOL (filename, color, size, customstyle)

Аргумент filename определяет название растрового файла (например, «Arrow.BMP») в каталоге CUSTSYMB.

Аргумент customstyle – это целое число, управляющее цветом символа и его фона:

Customstyle Эффект
0 Флажки «Фон» и «Покрасить одним цветом» не установлены. Символ показывается стандартно. Все белые точки изображения становятся прозрачными и под ними видны объекты Карты.
1 Установлен флажок «Фон». Все белые точки изображения становятся непрозрачными.
2 Установлен флажок «Покрасить одним цветом». Все не белые точки изображения красятся в цвет символа.
3 Установлены флажки «Фон» и «Покрасить одним цветом».

Предложение Font (шрифт)

Предложение Font определяет режимы представления текстовых объектов (шрифт, цвет и т.д.). Синтаксис:

FONT (fontname, style, size , forecolor [ , backcolor])

где

  • fontname – имя шрифта, строковая величина (например , "Arial");
  • style – численное выражение, в результате которого получается положительное целое число;
  • size – размер шрифта, целое число;
  • forecolor – цвет символов шрифта в системе RGB;
  • backcolor – цвет фона или каймы в системе RGB.

Название шрифта заключается в двойные кавычки. Прописные и строчные буквы для этого параметра различаются. Стиль – это один из атрибутов шрифта, приведенных в таблице ниже. Размер в файле MIF должен быть равен 0 для подписей в окне Карты, так как они являются атрибутами Карты и их размер определяется динамически. Основной цвет задается 24- битовым RGB-значением. Цвет фона задавать необязательно. Чтобы сделать фон прозрачным, задайте значение, равное -1.

Style Эффект
0 Обычный
1 Жирный
2 Курсив
4 Подчеркнутый
16 Контур (только для Macintosh)
32 С тенью
256 С каймой
512 Капитель
1024 Разрядка

Чтобы скомбинировать два и более эффекта, числа нужно сложить. Чтобы, например, задать тексту жирный и капителизированный шрифт, следует задать число 513.

Предложение Color (цвет)

Color задает цвет объекта:

Color: число

Цвета чаще всего задаются в долях красного, зеленого и синего оттенков RGB. Каждому оттенку соответствуют номера от 0 до 255; RGB-значение для цвета вычисляется по формуле:

(красный * 65536) + (зеленый * 256) + синий

Вот несколько наиболее часто используемых значений:

  • Красный: 16711680
  • Зеленый: 65280
  • Синий: 255
  • Голубой: 65535
  • Фиолетовый: 16711935
  • Желтый: 16776960
  • Черный: 0

Файл формата MID

Файл формата MID содержит записи, между которыми стоят разделители, заданные в предложении Delimiter. Стандартный разделитель – символ табуляции. Каждая строка в MID-файле соответствует объекту в MIF-файле: первая строка соответствует первому объекту, вторая строка – второму объекту и так далее.

Если символ-разделитель является частью записи, заключите такую запись в двойные кавычки.

Файл формата MID может отсутствовать. В этом случае создаются пустые поля.

Список литературы

  1. «Руководство пользователя MapInfo Professional» версии 12.5
  2. «Руководство пользователя MapInfo Professional» версии 7.5
  3. «Руководство пользователя MapInfo Professional» версии 6.0
  4. «Справочник MapBasic» версии 11.0