PFM (Polski Format Mapy -- Польский формат
описания картографических данных), так же
известный как просто "Польский формат",
являющийся исходным языком для компилятора
cGPSmapper. Создание карт для загрузки в
навигаторы GPS можно сравнить с
программированием: Вы пишете программу (то есть
карту) на языке программирования (то есть в
"Польском формате") и затем
компилируете её для получения конечного
файла с помощью cGPSmapper. Как вариант,
вместо ручного программирования можно
использовать специальные программы для
автоматического или полуавтоматического
создания исходного кода в "Польском
формате". Одной из таких программ
является GPSMapEdit, подробное
описание которого Вы можете найти на этом
сайте.
Исходный файл (файл карты) в "Польском
формате" это обычный текстовый файл с
расширением .mp. Соответственно
он может быть быть открыт и изменён с
помощью любого текстового редактора (в
предыдущих версиях использовалось
расширение .txt, которое иногда
ещё встречается в ранних публикациях по
этой теме). В данной статье описываются
основы синтаксиса и семантики "Польского
формата", это значит что некоторые
дополнительные и устаревшие возможности
будут пропущены. Полный синтаксис описан в
справочном файле Test_img.mp (находится
в директории Test_Map).
Компилятор cGPSmapper доступен в следующих
вариантах: Freeware, Shareware, Standard, Pro и Routing. Все
версии кроме Freeware считаются обладающими
дополнительными возможностями.
Строки, напечатанные Mоноширинным
шрифтом должны быть вставлены
буквально, исключая переменные данные.
Переменные данные в нижнем регистре
указанны после знака равенства (=) во многих
случаях: они должны быть заменены
соответствующими значениями, как описано в
описании (или являются очевидными).Обычный
формат текста, как в данном случае, является
описанием и не должен вставляться в
исходных код.
Специальный символ для переменных данных #
заменяет числовое значение, например Data#
будет выглядеть как Data0, Data1 и
т.п.
Специальная последовательность символов ...
обозначенная в отдельной строке, имеет
интуитивное значение. Этот оператор в новой
строке означает что данные, приведённые
выше могут быть повторены 0 или больше раз
различными (обычно последовательными)
значениями переменных данных #. Если данной
последовательности символов предшествует
пара имён с символом для переменных данных #,
вся пара должна быть повторена (смотри
подобные варианты в примерах).
Имена, написанные в оранжевом цвете (например
Name=) являются обязательными в
данном разделе. Имена, написанные в
оливковом цвете (например Label=)
являются дополнительными.
Общий синтаксис файла "Польского
формата"
Файл в "Польском формате" содержит
строки комментариев и разделы. Строки
комментариев начинаются с символа ;
. Строка комментария может быть создана в
любом месте файла и игнорируется
компилятором. (Однако GPSMapEdit использует
специальный синтаксис комментариев для
описания присоединённых файлов и такие
комментарии будут приняты GPSMapEdit).
Существуют следующие разделы:
Раздел [IMG ID]-- относится к разделу
заголовка карты
Разделы объявлений:
разделы [COUNTRIES], [REGIONS]и [CITIES]
-- используются для индексации городов
Разделы объектов:
Разделы [RGN10], [RGN20], [RGN40]и
[RGN80] -- определяют
соответственно такие объекты, как
точки POI (точки особого интереса), точки
пользователя, линии и полигоны вместе с
данными описания объекта, если они
присутствуют в теле раздела.
Раздел [PLT] и [WPT] -- они
также описывают объекты, но эти данные
являются импортируемыми из файлов
программы OziExplorer типов .plt и .wpt.
Раздел заголовка карты является
обязательным и должен ставиться первым в
исходном файле карты. Все прочие разделы
являются необязательными (за исключением
того, что GPSMapEdit выдаёт сообщение об ошибке
при открытии файла не содержащего объектов).
Разделы объявлений (если они есть) должны
стоять после раздела заголовка карты в
порядке, описанном в данной статье. Разделы
объектов (если они есть) должны стоять посте
раздела объявлений. Они могут
располагаться в любом порядке и могут быть
повторены столько раз, сколько требуется
для описания всех объектов.
Каждый раздел начинается с обозначения
типа (например тип [RGN10]) и
заканчивается командой [END]. (В
предыдущих версиях применялись различные
команды окончания в зависимости от типов,
например [END-RGN10]. Этот синтаксис всё
ещё поддерживается и может быть
использован в старых версиях программ или
исходных файлов карт.) Порядок расположения
данных в теле раздела (то есть между началом
раздела и командой [END]) является
произвольным.
[IMG ID] ID=nnnnnnnn
-- должен содержать 8 цифр (десятичный
формат) и быть уникальным для каждой карты. Name=map_name
-- имя карты для просмотра в навигаторе
GPS в меню информации о картах "Map Info". LBLcoding=x
-- (по умолчанию: LBLcoding=6)
LBLcoding=6 -- компрессия для имён (небольшой
размер карты)
LBLcoding=9 -- восьмибитовое
кодирование (поддерживает
национальные символы, зависит от
прошивки навигатора GPS)
LBLcoding=10 -- Unicode (зависит от прошивки
навигатора GPS)
Codepage=xx
-- (default: Codepage=0)
Если xx<>0, восьмибитовое кодирование с
определением кодовой страницы (зависит
от прошивки навигатора GPS)
Внимание: Если кодовая страница
задействована, все имена должны быть
написаны ЗАГЛАВНЫМИ буквами.
Внимание: Разделители для номеров шоссе
(смотри ниже) отличаются если
используется восьмибитовое кодирование.
Datum=xxx
-- (по умолчанию: Datum=W84) определяет
датум данных описания объектов.
Datum=W84 -- Датум WGS-84
смотри файл Datum_List.txt file (в
директории GPSMapper) для ознакомления с
полным списком поддерживаемых датумов.
Elevation=x
-- (по умолчанию: Elevation=f)
Elevation=m -- высота в метрах
Elevation=f -- высота в футах
TreSize=n
-- максимально допустимый размер
региона; высокое значение может уменьшить
скорость отображения карты; низкое
значение увеличивает размер файла карты;
предпочтительные значения для n:
Топографические карты: 1000-2000
Город (много улиц): 2000-5000
Государство: 6000-10000
RgnLimit=n
-- максимальное число элементов в одном
регионе
предпочтительное значение: 1024
Levels=n --
количество слоёв в карте (не менее 1, не
более 10)
Внимание: Последний слой всегда должен
быть пустым, например значение Levels=3
означает, что для объектов карты можно
использовать только два слоя.
Level#=g --
размер сетки для отображения слоёв # (слой 0
должен быть подробнее чем 1)
Внимание: значение каждого слоя (Level0, Level1,
Level2 и т.д.) должно быть определено.
Для выбора оптимального размера сетки
используйте данные таблицы, которая
определяет видимость каждого слоя в
навигаторе в зависимости от значения
масштаба когда детализация для карты
выставлена в положении Норма (Normal):
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 км
Zoom#=# ...
Внимание: команда Zoom# является
дополнительной и требуется только для
программы MapSource, GPSMapEdit некорректно
выставляет его значение в заголовке
карты, возможно что это будет исправлено,
пока предлагается использовать эту
команду как показано в файле Template.mp.
Указанные здесь команды
поддерживаются только в версиях с
дополнительными возможностями. POIIndex=x
-- (по умолчанию: POIIndex=N)
POIIndex=Y -- объекты типа RGN10 будут
автоматически индексированы (это
позволит использовать функцию Поиск (Find)
в навигаторе GPS).
POIIndex=N -- объекты будут
индексироваться только если точки POI
содержат информацию для индексации.
Эти две команды должны использоваться
совместно -- они определяют название
страны и области для автоматического
индексирования городов; если они не
определены, то города будут
индексироваться только если эти объекты
содержат информацию для индексирования.
Все, указанные ниже, команды для
раздела назначений поддерживаются только
версиями с дополнительными возможностями.
[COUNTRIES]
-- этот раздел назначает все страны
используемые для индексации городов Country#=название_страны~[0x1d]абревиатура ... --
данная команда может повторяться для Country2, Country3
и т.д. (смотри Соглашения выше) [END][REGIONS]
-- этот раздел назначает все области
используемые для индексации городов Region#=название_области~[0x1d]абревиатура CountryIdx#=название_страны~--
число, соответствующее команде Country# ... --
указанная выше пара комманд может быть
повторена (смотри Соглашения выше) [END][CITIES] --
этот раздел назначает все города
используемые для индексации городов City#=название_города RegionIdx#=индекс_области
-- номер, соответствующий команде Region# ... [END]
Внимание! Обязательно ознакомьтесь с изменениями
в последних версиях. С версии 0074 эти
разделы описываются другими параметрами.
[RGN10] --
этот раздел определяет объекты типа точки POI (Point
Of Interest) Type=тип_объекта
перечень доступных объектов находится в
файле RGNtype.txt (в директории GPSMapper)
Label=имя_объекта Levels=n --
объект должен присутствовать на всех слоях,
начиная с нижнего и заканчивая n
включительно. Data#=(lat1,lon1)
-- данные о координатах объекта для слоя # ...
например: Data0=(52.12345,21.98765)
координаты указываются в градусах и в
датуме, указанном в заголовке карты (или
по умолчанию)
Origin#=(lat1,lon1)
-- это старая команда, полностью
совпадающая с Data#.
However, GPSMapEdit обрабатывает Origin# быстрее
чем Data#. ... [END][RGN20] --
этот раздел определяет объекты типа точки,
не соответствующие точкам POI. Команды такие же,
как для [RGN10]. Type=тип_объекта Label=имя_объекта Levels=n Data#=(lat1,lon1) ... Origin#=(lat1,lon1) ... [END][RGN40] --
этот раздел определяет объекты типа линия (линейные
объекты, например улица, ручей и т.п.) Type=тип_объекта Label=имя_объекта Levels=n Data#=(lat1,lon1),(lat2,lon2),...
-- множество координатных пар
составляет узлы из которых составлен
объект. ... [END][RGN80] --
этот раздел определяет объекты типа
полигон (площадные объекты, например озеро,
лес и т.п.) Type=тип_объекта Label=имя_объекта Levels=n Data#=(lat1,lon1),(lat2,lon2),... ... [END][PLT] --
этот раздел определяет объекты типа линия
или полигон, которые были импортированы из
файлов .plt программы OziExplorer. RgnType=категория_объекта
RgnType=0x40 -- линия
RgnType=0x80 -- полигон
Type=тип_объекта Label=имя_объекта Levels=n File#=имя_файла
-- определяет файл .plt, содержащий данные
для импорта в слой # ... [END][WPT] --
этот раздел определяет объекты типа точки POI
или точки, которые были импортированы из
файлов .wpt программы OziExplorer. RgnType=категория_объекта
RgnType=0x10 -- точки POI
RgnType=0x20 -- точки
Type=тип_объекта Levels=n File#=имя_файла
-- определяет файл .wpt , содержащий данные
для импорта в слой #
Внимание: имена объектов берутся из
полей описания точек, а не из полей имён
точек.
Если трек, импортированный разделом [PLT]
состоит из нескольких частей (то есть
объектов), всем сегментам будет присвоено имя,
указанное командой Label. Однако существует
возможность присвоения отдельного имени
каждой из этих частей. Для этого
исключите команду Label и опишите все имена в
дополнительном файле, который должен
называться так же как файл .plt (включая
расширение) и иметь собственное расширение .txt
(например Highways.plt.txt). Этот файл должен
быть в той же директории, что и файл .plt.
Каждая линия в этом файле присваивает имя
для каждой части трека.
Вы можете назначать значения высот для
таких объектов как вершины (RgnType=0x10, Type=0x6616),
точки высот и глубин (RgnType=0x20, Type=0x62...0x63),
изобаты и горизонтали (RgnType=0x40,
Type=0x20...0x25).
По умолчанию единицами
измерения высоты являются футы. Для
указания высот в метрах необходимо
воспользоваться командой Elevation=m в
разделе заголовка карты.
Высота не
является видимым параметром, она
добавляется к имени объекта после
разделителя ~[0x1f]. В показанном
ниже примере объекту вершины присвоена
высота 2499 метров (подразумевается что в
разделе заголовка карты присутствует
команда Elevation=m): [RGN10] Type=0x6616 Label=Mt. Rysy~[0x1f]2499 Levels=2 Data0=(49.17958,20.08800) [END]
Высота также может быть присвоена объекту
не имеющему имени. В примере показано
присвоение высоты 115 метров для объекта
типа изобата, который не имеет имени: [PLT] RgnType=0x40 Type=0x20 Label=~[0x1f]115 Levels=1 File0=Contour115.plt [END]
Возможно присвоение типа объекту не только
специальным номером, но и соответствующим
этому номеру описательным именем. Например: Type=Dining(Asian)
Описательное имя должно быть введено точно
так, как это указано в файле RGNtype.txt
(в директории GPSMapper).
Многи команды поддерживаются только
версиями с дополнительными возможностями компилятора.
Они описаны с файле Test_img.txt (в
директории GPSMapper) в котором так же приведены
примеры их использования. Приведённый ниже
перечень даёт общее представление о
дополнительных возможностях,
поддерживаемых в версиях с дополнительными
возможностями.
В
приведённом выше переводе дано описание
только для компилятора версии 0071. Но с
каждой версией происходят различные
изменения. Иногда они являются довольно
кардинальными. Для того, что бы Вы могли
быть в курсе этого, я привожу перевод всех
этих изменений от версии к версии.
GPSmapper Версия 0076
Исправлено: Улучшена индексация
перекрёстков на шоссе.
Исправлено: Несколько ошибок с
определением направлений (только для
версии Routable).
Исправлено: Улучшена оптимизация
для ускорения отображения карт в
навигаторах GPS.
Исправлено: Вывод справки при
запуске cgpsmapper без каких либо параметров.
Исправлено: Ошибка при создании
больших карт (файлов IMG размером свыше 3Mb)
Новое: Экспорт из "Польского
формата" в формат ESRI с помощью команды 'shp'
cgpsmapper shp data_file.mp
Новое: Создание файлов
предварительного просмотра (TDB,IMG) из
ПРОЗРАЧНЫХ карт формата IMG.
Новое: Улучшена индексация объектов -
теперь можно индексировать объекты,
содержащие специальные команды.
Новое: Новый формат для нумерации
домов (в версии Pro).
Новое: Новый формат для определения
направлений (в версии Routing).
Новое: Увеличено количество
проверок на ошибки.
Новое: (версия Shareware и выше) Новый
улучшенный формат для точек POI и
индексируемых городов, разделы [CITIES],[REGIONS]
и [COUNTRIES] больше не требуют ключей для
объектов [RGN10]/[RGN20]/[RGN40] и [SHP] - для имён
городов, областей, и стран (подробности в
файле test_img.mp).
Новое: Новый формат почтового
индекса и названий шоссе, разделы [ZIPCODES] и [HIGHWAYS]
больше не требуют данных
[RGN10]
Label=..
Data0=..
CityName=название города
RegionName=название области
CountryName=название страны
Zip=почтовый индекс
Highway=название шоссе
[END]
[RGN20]
Label=..
Data0=..
;RGN20 является определителем города - поэтому поле 'label' уже определяет 'CityName'
RegionName=название области
CountryName=название страны
[END]
[SHP]
....
CityName=имя файла dbf, где сохранено название города
RegionName=..
CountryName=..
[END]
GPSmapper Версия 0074
Исправлено: Скорость (спасибо
Константину)
Новое: Messages with exact place in input file
Новое: Нерегулярные границы для карт
доступны во всех версиях программы (через
объекты типа [RGN80])
Новое: Импорт файлов формата MapDekode (Раздел
[DBX])
Новое: Прозрачность карты
Новое: Названия для разделов [RGNxx] :
[POI] новое название для типов [RGN10] и [RGN20]
[POLYLINE] новое название для типов [RGN40]
[POLYGON] новое название для типов [RGN80]
Для разделения между типами [RGN10] и [RGN20] используется новый ключ:
[POI]
...
City=Y
...
[END]
например :
[POI]
Type=0x01
City=Y
Data0=(11.11,12.11)
[END]
тоже самое:
[RGN20]
Type=0x01
Data0=(11.11,12.11)
[END]
когда:
[POI]
Type=0x01
Data0=(11.11,12.11)
[END]
тоже самое:
[RGN10]
Type=0x01
Data0=(11.11,12.11)
[END]
Старые названия разделов ( [RGNxx] ) остаются действительными.
!!!ЗАМЕЧАНИЕ ДЛЯ ПОЛНЫХ ВЕРСИЙ!!!: ВАЖНО
ПОМНИТЬ, ЧТО РАЗДЕЛ [POI] ИЗМЕНИЛ СВОЁ
ЗНАЧЕНИЕ! РАЗДЕЛ [POI] БОЛЬШЕ НЕ
ИСПОЛЬЗУЕТСЯ ДЛЯ ИМПОРТА ДАННЫХ О
ГОРОДАХ/ОБЛАСТЯХ/СТРАНАХ ИЗ ФАЙЛОВ DBF -
ДЛЯ ЭТОГО ТЕПЕРЬ ДОЛЖЕН ИСПОЛЬЗОВАТСЯ
РАЗДЕЛ [DEFINITIONS].
Исправлено: Ключ 'LevelsNumber' и 'Levels' ( в
разделах [SHP],[RGNxx],[PLT] и [WPT] ) изменены на
ключ 'EndLevel' ( старые варианты остаются
действительными ).
GPSmapper Версия 0071
Новое: Введено новое
официальное расширение для "Польского
формата" - *.mp
Новое: Введено
автоматическое определение расширения:
Новое: введена
команда 'axx' для экспорта в файл, для
нестандартного вывода.
Новое: в файлах типа PLT
теперь можно определять пустоты.
Исправлено:
Сокращено время компиляции.
Исправлено: Намного
увеличена точность при создании карт.
Исправлено: Ошибки в
процессе обнаружения пустот.
Исправлено: Процесс
обнаружения пустот значительно ускорен.
Исправлено:
Устранены ошибки при определении
направлений
GPSmapper Версия 0065
Новое: MBCS (Multi-byte character set) -
национальные символы на вашей карте (зависит
от версии прошивки и модели навигатора GPS).
[IMG ID]
...
Codepage=[кодовая страница Windows]
LBLcoding=[
6 - кодирование имён с компрессией - небольшие карты
9 - восьмибитовое кодирование
10 - MBCS - используется совместно с ключом CODEPAGE
...
[END]
например:
[IMG ID]
...
Codepage=1251
LBLcoding=9
...
[END]
Исправлено: создание
файла предварительного просмотра, что
вызывало ошибки при запуске
MapSource.
GPSmapper Версия 0063
Новое: Введено
восьмибитовое кодирование для символов
шрифтов - национальные символы на вашей
карте.
GPSmapper Версия 0062
Новое: Версия Shareware:
производится индексирование точек POI и
городов (цена: 20 EUR)
Новое: Переключатель -i
для создания карт, содержащих только
точки POI и города (только для версии Shareware) cgpsmapper ac -i source_data
Это
позволит компилировать карту только с
объектами типа RGN10 и RGN20, даже если в
исходном коде присутствуют типы RGN40 и
RGN80. В версии Shareware возможно одновременно
индексировать до 100 объектов типа точки POI
и города или неограниченное количество
этих объектов поотдельности (только с ключом
-i ). Версия Shareware содержит информацию о
пользователе, карта, созданная в такой
версии, показывает эту информацию.
Исправлено: параметр BLOCKSIZE
больше не используется.
Исправлено: Не
работала индексация более чем 255 городов (сейчас 65000) -
действует в полной версии Shareware.
Исправлено: Опять
работоспособен DirIndicator.
Исправлено: Новый
алгоритм определения пересечений.
GPSmapper Версия 0060
Новое: Обработка для
выездов (подробности в файле test_img.txt).
Новое: В разделе [IMG ID]
можно указывать используемый датум.
Новое: Команда '-o
output_filename' позволяет задать произвольное
имя для карты, создаваемой по ключу 'ac'.
Исправлено: Максимальное
количество слоёв ограничено 9 (10 слоёв
может вывести из строя Ваш навигатор GPS!).
Исправлено:
Обнаружение пересечений не работало для
первой вершины.
Исправлено: В разделе [IMG ID]
некоторые команды для корректного
выполнения должны были быть написаны
прописными буквами (например Elevation=m не
работало)
Исправлено:
Устранено чтение параметров в разделе [RGNxx]
- теперь допустимо произвольное их
расположение.
Исправлено: Обновлено описание в
файлах test_img.txt/test_shp.txt.