Создание и редактирование векторных карт

         

Польский формат.



Польский формат.

Мы уже немного касались истории и причинах появления Польского формата в предыдущей лекции. Сейчас нам предстоит поближе познакомиться с внутренним устройством этого формата, содержащего всё необходимое для описания картографических данных. Программа GPSMapEdit хоть и использует собственный компилятор для преобразования данных в формат RUS, но сохраняет всю исходную информацию именно в этом формате. До сих пор не существует точных данных о всех, используемых программой GPSMapEdit, командах. Поэтому примем аксиомой что всё, что будет сказано по поводу синтаксиса и состава команд для cGPSMapper, будет действительно и для GPSMapEdit. Все данные о командах получены из файла справки для компилятора cGPSMapper. ВНИМАНИЕ! Приведён сокращённый вариант описания для общего понимания структуры формата.

PFM (Polski Format Mapy -- Польский формат описания картографических данных), так же известный как просто "Польский формат", являющийся исходным языком для компилятора cGPSMapper. Создание карт для загрузки в навигаторы GPS и КПК с установленной программой ГИСРусса можно сравнить с программированием - Вы пишете программу (то есть карту) на языке программирования (то есть в "Польском формате") и затем компилируете её для получения конечного файла с помощью cGPSmapper или GPSMapEdit. Вместо ручного программирования можно использовать специальную программу для полуавтоматического создания исходного кода в "Польском формате" - GPSMapEdit.

Исходный файл (файл карты) в "Польском формате" это обычный текстовый файл с расширением .mp. Соответственно он может быть быть открыт и изменён с помощью любого текстового редактора (в предыдущих версиях использовалось расширение .txt, которое иногда ещё встречается в ранних публикациях по этой теме).

Соглашения.

Строки, напечатанные Mоноширинным шрифтом должны быть вставлены буквально, исключая переменные данные. Переменные данные в нижнем регистре указанны после знака равенства (=) во многих случаях: они должны быть заменены соответствующими значениями, как описано в описании (или являются очевидными).Обычный формат текста, как в данном случае, является описанием и не должен вставляться в исходных код.

Специальный символ для переменных данных # заменяет числовое значение, например Data# будет выглядеть как Data0, Data1 и т.п.

Специальная последовательность символов ... обозначенная в отдельной строке, имеет интуитивное значение. Этот оператор в новой строке означает что данные, приведённые выше могут быть повторены 0 или больше раз различными (обычно последовательными) значениями переменных данных #. Если данной последовательности символов предшествует пара имён с символом для переменных данных #, вся пара должна быть повторена.

Имена, написанные в оранжевом цвете (например Name=) являются обязательными в данном разделе. Имена, написанные в оливковом цвете (например Label=) являются дополнительными.

Общий синтаксис файла "Польского формата".

Существуют следующие разделы:

- Раздел [IMG ID]-  относится к разделу заголовка карты.

- Разделы объектов:

            - Разделы [POI], [POLYLINE] и [POLYGON] - определяют соответственно такие объекты, как точки POI (точки особого интереса), точки пользователя, линии и полигоны вместе с данными описания объекта, если они присутствуют в теле раздела.

Раздел заголовка карты является обязательным и должен ставиться первым в исходном файле карты. Все прочие разделы являются необязательными. Разделы объектов должны стоять после раздела заголовка карты. Они могут располагаться в любом порядке и могут быть повторены столько раз, сколько требуется для описания всех объектов.

Каждый раздел начинается с обозначения типа, например тип [POI], и заканчивается командой [END]. Порядок расположения данных в теле раздела, то есть между началом раздела и командой [END], является произвольным.

Раздел заголовка карты.

[IMG ID]

ID=nnnnnnnn -- должен содержать 8 цифр (десятичный формат) и быть уникальным для каждой карты.

Name=map_name -- имя карты для просмотра информации о карте.

LBLcoding=x -- (по умолчанию: LBLcoding=6)

- LBLcoding=6 -- компрессия для имён.

- LBLcoding=9 -- восьмибитовое кодирование.

- LBLcoding=10 -- Unicode.

    Сodepage=xx -- (default: Codepage=0)

    • Если xx<>0, восьмибитовое кодирование с определением кодовой страницы.

    Datum=xxx -- (по умолчанию: Datum=W84) определяет датум данных описания объектов.



    • Datum=W84 -- Датум WGS-84

    Elevation=x -- (по умолчанию: Elevation=f)

    • Elevation=m -- высота в метрах

    • Elevation=f -- высота в футах

    TreSize=n -- максимально допустимый размер региона. Высокое значение может уменьшить скорость отображения карты, низкое значение увеличивает размер файла карты. Предпочтительные значения для n:

    • Топографические карты: 1000-2000

    • Город (много улиц): 2000-5000

    • Государство: 6000-10000

    RgnLimit=n -- максимальное число элементов в одном регионе

    • предпочтительное значение: 1024

    Levels=n -- количество слоёв в карте (не менее 1, не более 10)

    • Внимание: Последний слой всегда должен быть пустым.

    Level#=g -- размер сетки для отображения слоёв # (слой 0 должен быть подробнее чем 1)

    • Внимание: значение каждого слоя (Level0, Level1, Level2 и т.д.) должно быть определено.

    • Для выбора оптимального размера сетки используйте данные таблицы, которая определяет видимость каждого слоя в зависимости от значения масштаба:

      • g=24 -- 120 м и ближе

      • g=23 -- 200 м - 300 м

      • g=22 -- 500 м

      • g=21 -- 800 м - 1.2 км

      • g=20 -- 2 км

      • g=19 -- 3 км

      • g=18 -- 5 км - 8 км

      • g=17 -- 12 км

      • g=16 -- 20 км - 30 км

    [END] -- конец раздела заголовка карты

    Раздел объектов

    [POI] - этот раздел определяет объекты типа точки POI (Point Of Interest)
    Type=тип_объекта

    • перечень доступных объектов можно посмотреть в меню свойств при создании объекта.

    Label=имя_объекта
    Levels=n - объект должен присутствовать на всех слоях, начиная с нижнего и заканчивая n включительно.
    Data#=(lat1,lon1) -- данные о координатах объекта для слоя #
    ...

    • например: Data0=(52.12345,21.98765)

    • координаты указываются в градусах и в датуме, указанном в заголовке карты (или по умолчанию)

    Origin#=(lat1,lon1) -- это старая команда, полностью совпадающая с Data#.
    ...
    [END]

     

    [POLYLINE] - этот раздел определяет объекты типа линия (линейные объекты, например улица, ручей и т.п.)
    Type=тип_объекта
    Label=имя_объекта
    Levels=n
    Data#=(lat1,lon1),(lat2,lon2),... -- множество координатных пар составляет узлы из которых составлен объект.
    ...
    [END]

     

    [POLYGON] -- этот раздел определяет объекты типа полигон (площадные объекты, например озеро, лес и т.п.)
    Type=тип_объекта
    Label=имя_объекта
    Levels=n
    Data#=(lat1,lon1),(lat2,lon2),...
    ...
    [END]

    Вот как вкратце выглядит структура файла Польского формата. Теперь давайте посмотрим всё это на конкретном примере. Допустим у нас на карте присутствуют по одному объекту каждого типа. На карте к КПК и в программе GPSMapEdit это будет выглядеть следующим образом:


    Как можно видеть на нашей карте присутствуют три объекта - полигон "Кустарник", линия "Ручей" и точка "Мост". Описание этой информации в Польском формате будет выглядеть следующим образом (комментарии в исходном коде отсутствуют):

    [IMG ID] - начало описания раздела заголовка карты.

    ID=10011001 - уникальный номер карты (10011001).

    Name=Пример - имя карты (Пример).

    TypeSet=Russa - указатель целевого формата карты (RUS).

    Preprocess=F - предварительная обработка (Full -максимальная).

    CodePage=1251 - кодовая станица (кириллица).

    LblCoding=9 - кодирование символов (восьмибитовое).

    Datum=W84 - Датум (WGS-84)

    Elevation=m - единицы высоты (метры)

    TreSize=511 - размер блока (511).

    TreMargin=0.00000 - выход границы за область карты (нет).

    RgnLimit=127 - ограничение по количеству элементов в объекте (127).

    POIIndex=N - индексация (выключено). В GPSMapEdit не доступно.

    Levels=2 - число слоёв (2).

    Level0=21 - масштаб первого слоя (800м - 1.2км).

    Level1=20 - масштаб второго слоя (2км). Пустой.

    Zoom0=0 - Масштаб первого слоя для MapSource.

    Zoom1=1 - Масштаб второго слоя для MapSource.

    [END-IMG ID] - конец раздела заголовка карты.

    [POI] - начало раздела описания объекта типа "Точка".

    Type=0x6401 - определение типа точки.

    Label=Мост - имя точки.

    Data0=(64.31912,39.73051) - координаты точки.

    [END] - конец раздела точки.

    [POLYLINE] - начало раздела описания объекта типа "Линия".

    Type=0x18 - определение типа линии.

    Label=Ручей - имя линии.

    Data0=(64.33148,39.73154),(64.32667,39.72845),(64.31912,39.73051),(64.31671,39.72793) - координаты линии. Каждая пара определяет положение узла линии. Всего 4 узла.

    [END] - конец раздела линии.

    [POLYGON] - начало раздела описания объекта типа "Полигон".

    Type=0x4f - определение типа полигона.

    Label=Кустарник - имя полигона.

    Data0=(64.31774,39.72141), (64.31861,39.72536), (64.32083,39.72776), (64.32273,39.72828), (64.32530,39.72776), (64.32718,39.72759), (64.32891,39.72793), (64.33045,39.72896), (64.33234,39.72879), (64.33371,39.72656), (64.33388,39.72158), (64.33285,39.71695), (64.32839,39.71403), (64.32358,39.71386), (64.31929,39.71386), (64.31774,39.71626), (64.31740,39.71935) - координаты полигона. Каждая пара определяет положение узла полигона. Всего 17 узлов.

    [END] - конец раздела полигона.

    Таким образом для трёх объектов нам нужно создать 36 строк кода. Чтобы этого избежать мы и будем использовать программу GPSMapEdit.

    Итак, будем считать, что мы имеем представление о структуре описания объектов в Польском формате. И пришла пора переходить к практике.



    Содержание раздела