|
|||||||
Выбор и использование персональных навигаторов GPS |
|||||||
| Главная | | Описания | | Статьи | | Программы | | Загрузка | | Ссылки | | Разное |
Использование TYP-файлов при создании карт для навигаторов Garmin. Как вам уже наверняка известно, в современных навигаторах фирмы
Garmin при создании карт можно самостоятельно определять как будут отображаться те или иные объекты в устройствах, поддерживающих эту возможность. При использовании этой технологии возможно в определённой степени расширять перечень доступных типов, путём переопределения их внешнего вида. Это позволяет получать не только более детальные, но и значительно более читаемые карты, нежели как это выглядит сейчас по умолчанию. Для реализации этого механизма, совместно с компилятором
cGPSmapper, применяются так называемые TYP-файлы, где и происходит описание всех требуемых характеристик отображения и внешнего вида всех видов объектов - точек POI, линий и полигонов. Примеры использования TYP-файлов вы можете посмотреть на страницах
Из поддерживаемых устройств можно перечислить все Nuvi, а так же всю серию навигаторов с буквой "x" в конце названия - eTrex Legend Cx, GPSMap 60CSx и т.п. Хотя данная возможность официально не анонсирована, TYP-файлы так же поддерживают такие навигаторы, как GPSMap 60C(S) с последними версиями прошивок. Вполне возможно, что поддержка TYP-файлов появится и у навигаторов более ранних выпусков по мере появления новых прошивок. Так же с данными TYP-файлов могут работать программы MapSource и Sendmap последних версий. Редактор GPSMapEdit и навигаторы ранних серий TYP-файлы использовать не умеют и просто игнорируют. Исходник TYP-файла представляет собой обычный текстовый файл с расширением
*.txt. После компиляции, как это происходит и с Польским форматом, этот текстовый файл преобразуется в формат с расширением
*.typ. Именно этот файл и загружается совместно с картами в навигатор.
[_ID]
Секция заголовка. В этой небольшой секции описываются следующие параметры: 1. Идентификатор семейства карт - FID. Он позволяет установить взаимосвязь между TYP-файлом и конкретной картой. При этом FID TYP-файла и FID в PV-файле должны совпадать. Данная возможность актуальна только если планируется подключать и загружать карту в MapSource, а не с помощью Sendmap. В последнем случае параметр FID можно не использовать. Замечу, что все эти программы должны быть последних версий. 2. Признак кода карты - ProductCode. Этот параметр может иметь произвольные цифровые значения.
В качестве признака завершения каждой секции выступает команда [End].
Общий вид секции заголовка: [_ID] ; Начало секции заголовка ProductCode=211 ; Признак кода карты FID=238 ; Идентификатор семейства карт. В примере - 238. [End] ; Конец секции заголовка
[_drawOrder] Секция приоритета отображения полигонов. Эта секция позволяет указать какие именно полигоны будут присутствовать на карте и как они будут располагаться относительно друг друга. То есть, если указать, что озеро располагается выше леса, то именно так эти полигоны и будут показываться на карте, независимо от их площади и всего остального. Если в данной секции отсутствует какой-то из типов полигонов, то объектов такого типа не будет и на карте. Поэтому в этом заголовке на всякий случай лучше всего прописать сразу все типы полигонов. Диапазон приоритета вполне достаточен - от 1 до 8 уровней. Причём чем выше приоритет, тем выше значение уровня. Поэтому объект, типу которого присвоено значение приоритета 6, будет всегда располагаться поверх всех остальных объектов с уровнями приоритета 1, 2, 3, 4, 5, и ниже, относительно объектов с приоритетом 7 и 8.
Параметры секции выглядят следующим образом: [_drawOrder] ; Начало секции приоритета отображения полигонов Type=0x48,5 ; Тип - Река малая, Приоритет - 5. Type=0x50,4 ; Тип - Лес, Приоритет - 4. [End] ; Конец секции приоритета отображения полигонов
В данном примере полигоны малых рек будут всегда видны поверх полигонов леса.
[_point]
Секция описания точек позволяет заменять стандартные рисунки точек POI на другие, описанные в этой секции TYP-файла. Сам рисунок описывается в формате XPM. Рассмотрим по порядку все параметры, которые применяются при создании нового рисунка для точки POI. Для наглядности, этот и все дальнейшие примеры будут основаны на реальных случаях. Перед примером будет дано описание задачи.
Задача. Присвоить неиспользуемой в карте точке типа 0x2110 "Красный светящийся маяк" новый рисунок в виде стандартного знака ограничения скорости и присвоить ей надпись "40км/ч" для русского языка и "40KPH" для английского и всех остальных. Желательный вид -
Начинаем создавать новый рисунок и свойства точки.
[_point] ; Начало секции описания точек Type=0x21 ; Первичный тип точки типа 0x2110 SubType=0x10 ; Вторичный тип точки типа 0x2110 Srting1=0x19, 40км/ч ; Код русского языка, Надпись Srting2=0x04, 40KPH ; Код английского языка, Надпись Srting3=0x00, 40KPH ; Код неопределённого языка, Надпись XPM="16 16 4 1" ; Ширина рисунка, Высота рисунка, Кол-во цветов, Соотношение "Символ/Пиксель".
Далее следует описание рисунка в формате XPM. Однако, стоит для начала разобраться с назначением и возможностями указанных выше параметров. Первая строка объявляет о начале секции описания точек. Далее следуют две строки, описывающие тип точки, для которой изменяется рисунок. А вот в четвёртой и пятой строке определяется какое название будет выводиться при наведении курсором на этот тип точки. Название будет зависеть от используемого языка. Сам язык определяется в виде кода. В данном случае код 0x19 означает русский язык, 0x04 - английский, а 0x00 - это любой другой. Сразу за кодом языка следует само название, которое будет показано при наведении курсором. Полный перечень кодов языков приведён ниже. Следует отметить, что на практике указание кода русского языка не всегда приводит к желаемому результату. Как я понял, это зависит от русификации навигатора. Например у меня на GPSMap60CS v4.10 русские названия появлялись только при указании кода языка 0x00, т.е. неопределённого. Надпись объекта, указанная в TYP-файле, будет выведена только в том случае, если у данного объекта не будет собственного названия, определяемого в Польском формате параметром "Label". В противном случае при наведении курсора будет отображаться название объекта.
Следует особо подчеркнуть, что параметр XPM= имеет несколько вариантов. Они различаются тем, что позволяют указать в каком из вариантов цветовых схем навигаторов используется рисунок. Всего есть три варианта:
DayXPM= рисунок точки применяется только в дневной цветовой схеме. NightXPM= рисунок точки применяется только в ночной цветовой схеме. XPM= рисунок точки применяется в обеих схемах.
В шестой строке примера содержится информация о самой картинке. Первые два значения говорят о том, что ширина и высота рисунка будут составлять по 16 пиксел. Размер рисунка может быть произвольным, но не более чем 24х24 пикселя. Здесь следует выбирать размер из того, что слишком большой рисунок точки будет закрывать довольно дефицитное пространство дисплея, а слишком маленький может быть непонятен. После указания размера будущего рисунка следует указатель количества цветов, которые будут присутствовать на рисунке. В нашем случае будет 4 цвета. Всего может быть 254 цвета. Лучше всего применять цвета из стандартной WEB палитры состоящей из 256 стандартных цветов. Это будет гарантировать правильное отображение цветов во всех навигаторах. Прозрачность указывается командой - None. Последним идёт указатель соотношения "символ/пиксель". В нашем случае один символ в формате XPM будет равен одному пикселю рисунка. Символами могут быть любые буквы алфавита, цифры и прочие доступные знаки.
Как видно из данного примера, сначала указываются символы, используемые для отображения цветов рисунка, затем этим символам присваивается шестнадцатеричное значение цвета. Сам рисунок выполняется в виде матрицы соответствующего размера, в которой каждый из определённых выше символов будет указывать цвет каждой из ячеек. В нашем случае каждая ячейка матрицы будет соответствовать одному пикселю рисунка. Обратите внимание на оформление границ и окончания матрицы. Варианты технологии создания рисунков смотрите в заключительной части данной статьи. Всё, что получилось в результате написания этой статьи, вы сможете увидеть в её конце.
[_line]
Как нетрудно догадаться, секция описания линий позволяет заменять стандартные изображения линий на заданные пользователем. Учитывая особенности линий как специфического объекта карты, существует два метода определения параметров её отображения. Оба метода, после понимания процесса создания рисунка точки, не покажутся вам сложными.
Метод 1. Первый метод применяется тогда, когда линия имеет всего два рабочих параметра - общую ширину линии и её окантовку.
Задача: Присвоить типу дороги 0x03 "Прочие дороги", вид линии общей толщиной 3 пикселя и окантовкой в 1 пиксель с каждой стороны линии. Сама дорога в дневном цветовом режиме должна иметь сплошной светло-коричневый цвет, окантовка - сплошной тёмно-коричневый цвет. Вид в ночном цветовом режиме: дорога - сплошной серый цвет, окантовка - сплошной светло-серый цвет. Надпись при наведении курсора для русского языка - "дорога", для английского и прочих языков - "road". Желательный вид (увеличено) -
[_line] ; Начало секции описания линии Type=0x03 ; Тип линии LineWidth=1 ; Ширина внутренней линии BorderWidth=1 ; Ширина окантовки линии XPM="0 0 4 0" ; Ширина рисунка, Высота рисунка, Количество цветов, Соотношение "Символ/Пиксель" "1 с #ff6600" ; Цвет линии для дневной цветовой схемы "2 c #993300" ; Цвет окантовки для дневной цветовой схемы "3 c #999999" ; Цвет линии для ночной цветовой схемы "4 c #cccccc" ; Цвет окантовки для ночной цветовой схемы String1=0x19,дорога ; Надпись для русского языка String2=0x04,road ; Надпись для английского языка String3=0x00,road ; Надпись для прочих языков [end] ; Конец секции описания линии
Как видно из приведённого примера, основные элементы описания остались прежними. Из новых параметров выделяются только описатели общей ширины линии и её окантовки - LineWidth= и BorderWidth=. Но c ними, я думаю, никаких вопросов не возникает. Хочется немного заострить внимание на данных параметра XPM=. Совершенно понятно, что в данном случае никакого рисунка для линии не задаётся. По сути, первый метод задаёт характеристики сплошной заливки векторной линии и окантовки. Поэтому такие параметры как ширина, высота рисунка и соотношение "Символ/Пиксель" не используются и должны быть равны нулю. Далее следует описание цветов заливки и окантовки линии. Первые два параметра действуют для дневной цветовой схемы, вторые два - для ночной. Можно задать только два цвета. В этом случае действие TYP-файла для объекта указанного типа будет распространяться только на дневную цветовую схему навигатора. Это же правило распространяется и на все остальные случаи создания своего отображения линий и полигонов. Если требуется сделать линию без окантовки, то в этом случае необходимо указать её нулевую толщину в параметре BorderWidth=, а второй цвет в обоих цветовых режимах лучше установить идентичным первому. С первым методом описания линий всё.
Метод 2. Второй метод описания линий подразумевает использование не сплошной заливки определённым цветом, а, как и при описании точек POI, использование при отображении линии заданный пользователем рисунок. Поэтому общий вид описания параметров по второму методу практически полностью повторяет описание создания рисунка для точек POI. Ставим задачу.
Задача. Для лучшей передачи плохого покрытия дорожного полотна дороги, задать для линии типа 0x0a "Просёлочная дорога" отображение в виде линии, толщиной 2 пиксела, и состоящей из последовательности точек, расположенных в шахматном порядке. Для дневной цветовой схемы цвет точек должен быть тёмно-коричневый, для ночной цветовой схемы - светло-коричневый. Название для русского языка при наведении курсора должно выводиться в виде "грунтовка", для английского языка - "unpaved". Желательный вид (увеличено) -
В результате описание получится примерно следующее:
[_line] ; Начало секции описания линии Type=0x0a ; Тип линии XPM="32 2 4 1" ; Ширина рисунка, Высота рисунка, Количество цветов, Соотношение "Символ/Пиксель" "# c #993300" ; Символ и первый цвет пикселя для дневной цветовой схемы "- c None" ; Символ и второй цвет пикселя для дневной цветовой схемы (Прозрачный) "3 c #ffcc99" ; Первый цвет пикселя для ночной цветовой схемы "4 c None"
; Второй цвет пикселя для ночной цветовой схемы (Прозрачный) "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" "#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-"}; String1=0x19,грунтовка ; Надпись для русского языка String2=0x04,unpaved ; Надпись для английского языка [end] ; Конец секции описания линии
Скорее всего, в данном случае всё понятно и без особых разъяснений. Почти все атрибуты описания рисунка линии совпадают c описанием рисунка точки POI. Исключение составляют только описание цветов для ночного режима. В данном случае оно, по сути, полностью соответствует ситуации, описанной в первом методе создания пользовательского отображения линии. Нерассмотренными здесь остались два параметра, описание на которые нет в официальной инструкции. Это параметры UseOrientation=Y и Antialias=Y. Первый из них служит для более корректного отображения рисунков линий при их различном угле наклона. Второй должен делать рисунки более сглаженными за счёт добавления в рисунок промежуточных цветов. Как показала практика, реализация коррекции ориентировки растра в зависимости от угла линии реализована довольно посредственно (см. ниже). В результате этого часто линия c этим параметром смотрится хуже, чем без него. Однако, каждый может попробовать применить его в своём TYP-файле. Так же как и параметр сглаживания, который скорее всего работает только на самых последних навигаторах Garmin c дисплеями, позволяющими отображать 65000 цветов. У обычных персональных навигаторов Garmin количество отображаемых цветов ограничено 256 цветами. Так же можно предположить, что параметр Antialias=Y будет работать для всех случаев использования рисунка в качестве описателя внешнего вида любого из видов объектов - точки, линии или полигона.
[_polygon]
Последней в данной статье у нас идёт секция описания полигонов. Здесь применяются точно такие же параметры, которые уже описывались выше в описаниях предыдущих секций. Особыми условиями создания собственного вида полигонов является только то, что если вы решили использовать в качестве внешнего вида не заливку, а рисунок, то следует соблюдать одно правило - размер рисунка обязательно не должен быть более 32х32 пикселя. Меньше - можно. В отличие от возможностей создания рисунков для точек POI, для линий и полигонов есть ограничение на количество цветов. Всего может быть только 2 активных цвета. Если вы укажете 4 цвета, то вторая пара будет использована для ночной цветовой схемы. Так же стоит помнить, что при отображении полигонов размером более чем 32 пикселя (да, и линий это тоже касается), их рисунки складываются так, что правый край первого рисунка соединяется c правым краем другого, а верхний, соответственно, с нижним краем третьего и т.д. Поэтому нужно делать так, чтобы в таких местах соединения один рисунок переходил бы в другой без заметных на глаз искажений. Как и в случае с линиями, существует два метода создания своего вида полигонов. Поэтому выполним две практические работы.
Метод 1. С помощью этого метода полигоны могут быть залиты одним цветом и окантовкой по краям полигона. Причём окантовка будет идти не по линиям нарезки, что применяется для ускорения отображения больших полигонов, а именно по краю исходного полигона, что очень удобно.
Задача. Задать, прозрачному по умолчанию, полигону типа 0x01 "Город крупный" светло-розовый цвет с тёмной окантовкой в дневном режиме и тёмно-розовый цвет c более светлой окантовкой в ночном режиме. Выводить при наведении на полигон курсора надпись "город" для русского языка и "city" для английского. Желательный вид -
[_polygon] Type=0x01 XPM="0 0 4 0" "1 с #FFCCCC" ; Цвет полигона для дневной цветовой схемы "2 c #996666" ; Цвет окантовки для дневной цветовой схемы "3 c #CC9999" ; Цвет полигона для ночной цветовой схемы "4 c #FFCCCC" ; Цвет окантовки для ночной цветовой схемы String1=0x19,город ; Надпись для русского языка String2=0x04,city ; Надпись для английского языка [end] Метод 2. Второй метод подразумевает создание двухцветного рисунка. В данном случае размером 32x32 пикселя.
Задача. Использовать полигон типа 0x15 "Городской парк" для обозначения хвойного леса. Необходим вариант как для дневной, так и для ночной цветовой схемы. Надписи при наведении курсора: "лес" для русского языка и "wood" для английского.
[_polygon] Type=0x15 string1=0x04,Wood string2=0x19,Лес XPM="32 32 4 1", "! c #66FF00", "# c #339900", "! c #339900", "# c #66СС33", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!#!#!#!!!!!!!!!!!!!!!!!!!!", "!!!!!!#!!#!!#!!!!!!!!!!!!!!!!!!!", "!!!!!!!!###!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!#!#!#!!!!!!!!!!!!!!!!!!!!", "!!!!!!#!!#!!#!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!###!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!#!#!#!!!!!!!!", "!!!!!!!!!!!!!!!!!!#!!#!!#!!!!!!!", "!!!!!!!!!!!!!!!!!!!!###!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!#!#!#!!!!!!!!", "!!!!!!!!!!!!!!!!!!#!!#!!#!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!###!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"}; [end] Компиляция и использование TYP-файлов
В процессе создания TYP-файла и, конечно, перед его использованием в
MapSource и навигаторе, текстовый исходник необходимо преобразовать в конечный формат c расширением *.typ. Для этого необходимо с помощью одной из последних версий
cGPSmapper его компилировать. Делается это c помощью команды: cGPSmapper typ
Имя_TYP-файла В результате получится конечный TYP-файл c расширением *.typ и именем, состоящим из шестнадцатеричного значения ProductCode и FID, указанных в исходном TYP-файле. Например, при ProductCode равном 11 и FID равном 354, имя конечного файла будет - B0162.typ. Далее следует загрузить карту и получившийся TYP-файл в навигатор c помощью SendMap или произвести подключение этих файлов в MapSource. Версия cGPSmapper Standard не прописывает FID в конечный tdb-файл, таково ограничение этой версии. Если нет желания подключать вашу карту с TYP-файлом к MapSource, то эту секцию [_ID] можно закомментировать. Тогда вашу карту можно залить в прибор, используя только SendMap.
Работа с TYP-файлами c помощью SendMap.
Загрузите на свой компьютер последнюю версию программы SendMap. Перед описанием, хочу сказать, что последние серии навигаторов (например, GPSMap60CSx) Garmin работают c внешними картами памяти и c единым файлом карт c названием GMAPSUPP.IMG, в то время, как, например навигаторы серии GPSMap60CS позволяют загружать карты только во встроенную память. Соответственно, есть особенности работы c SendMap - для старых и новых устройств. Постараюсь описать оба варианта.
Запустив программу, мы увидим окно программы. Перед загрузкой карты или TYP-файла в окно выбранных для загрузки файлов, поставьте любое значение в поле Region name. Затем последовательно загрузите одну или несколько карт (*.img) и нужный TYP-файл (*.typ). В результате должен получиться перечень файлов c одинаковым значением в поле region. Установите связь c навигатором и нажмите кнопку "Upload maps to GPS". После процедуры загрузки карт в навигатор, проверьте как выглядит ваша карта.
Второй метод заключается в предварительной подготовке общего файла GMAPSUPP.IMG. В данном случае следует проделать все те же операции, но в конце нажать не "Upload maps to GPS", а "Create GMAPSUPP.IMG". При этом по указанному пути должен появиться общий файл, который можно загрузить на флешку навигатора через любой кард-ридер.
Как вы уже поняли, главное в этом процессе то, чтобы у всех файлов стояло одинаковое значение в поле "region". Это связывает конкретный TYP-файл с картами. При этом возможна загрузка в навигатор одновременно нескольких TYP-файлов и организация их связи только с теми картами, с которыми необходимо. Нужно просто указать следующему набору файлов (*.img+*.typ) другое значение поля "region". В этом случае TYP-файл будет задействоваться в приборе только для тех карт, которые имеют одинаковое с ним поле "region".
Подключение TYP-файлов к MapSource. Информация взята
1. Версия установленного MapSource должна быть не менее, чем 6.7. 2. Файл типов необходимо отредактировать для соответствия FID и Product code. 3. Подключить TYP-файл к MapSource через реестр данный файл. Для этого в ветке подключения карты, например:
HKEY_LOCAL_MACHINE\SOFTWARE\Garmin\MapSource\Families\Map_11
нужно прописать строковый параметр TYP, например:
"TYP"="C:\\My maps\\TYPs\\ B0162.TYP"
Внимание! Это только пример. Имена семейств карт и пути к TYP-файлу могут быть любыми.
5. Проверить наличие TYP-файла в каталоге, который указан в параметре "TYP"=. 6. Запустить MapSource и просмотреть результат. Остальная работа в программе MapSource ничем не отличается от обычной.
Заключение. Как показала практика, умело используя возможности TYP-файлов, можно значительно улучшить качество восприятия карт в навигаторах. Немаловажным может оказаться то, что в данном случае пользователь может в определённых пределах расширять количество нужных типов объектов. Ведь практически всегда есть такие объекты, которые в силу различных обстоятельств никогда в картах не используются. И в тоже время очень часто хочется, чтобы были ещё несколько очень нужных для данной карты типов с конкретным цветом или рисунком. При использовании TYP-файлов процесс получения таких типов достаточно прост. Особенно в этом отношении богат перечень точек POI. Для многих основным моментом может стать переопределение цветов и рисунков. Ведь многие полигоны и линии в оригинальных цветовых схемах от Garmin неудобны или просто не читаемы - см. статью. К тому же есть реальная возможность наконец-то воспользоваться любым из 256 цветов, а не всего 4, как это сделано по умолчанию, например для 60-ой серии навигаторов и последних eTrex-ах.
Чуть не забыл... Вам наверное хочется, помимо теории, всё таки увидеть скриншоты тех примеров, что были приведены выше? Пожалуйста. :)
Изначальный вид в навигаторе
Вид после применения TYP-файла
Вид линии без параметра UseOrientation=Y
Вид линии с параметром UseOrientation=Y
Так же в заключение хочу привести ряд примеров отдельных, применяемых мной, изменённых типов. Конечно, это не всё, чем я сейчас пользуюсь для оформления своих карт.
Точка POI "Ограничение скорости 60км/ч"
Точка POI "Неровная дорога"
Точка POI "АЗС бензиновая"
Точка POI "АЗС газовая"
Полигон "Море"
Полигон "Заболоченный лес" (Зелёный цвет - результат прозрачности)
Полигон "Лес лиственный"
Полигон "Лес смешанный"
Полигон "Кустарник"
Дополнительно - "Дорожные знаки"
Как
уже отмечалось выше, другие примеры использования TYP-файлов вы можете посмотреть на страницах
|