Mkgmap

А эта штука бесплатная? А то я на этом сайте тоже одну штуку брал (сканирует файл gmapsupp.img или любой *.img и создает TYPфайл со всеми объектами встречающимися в карте) один пробный раз запустилась и больше ни разу, говорит плати.
IMG2TYP называется.

Да, уж. Не сразу заметил “unregistered” :expressionless: Но не исключено, что можно использовать именно проверку стиля (оплату просит при попытке конвертации).

В общем, получилась у меня та же петрушка, что и 2 года назад.
Eugeny_B, у вас стиль stranger нормально подписи показывает? Взять, например, озёра и реки — они с названиями получаются?
Если бы разобраться, что с чем сверять (на предмет наличия отсутствия :smiley: ), а то не знал, да ещё и забыл)) Было бы чудно.
Файл lines содержит такое по рекам:

waterway=river [0x1151a resolution 18-18 continue]
waterway=river [0x1f resolution 19-24 continue]

TYP содержит:

[_line]
Type=0x1f
;GRMN_TYPE: Water Features/RIVER/Large stream or river/Non NT
UseOrientation=Y
LineWidth=2
Xpm="0 0 1 0"
"1 c #2D76D0"
String1=0x19,река
ExtendedLabels=Y
FontStyle=Default
CustomColor=Day
DaycustomColor:#0000B4
[end]

и ещё:

[_line]
Type=0x1151a
;GRMN_TYPE: Customizable Line Types/CUSTOMIZABLE_LINE_251/Non-routable customizable line/Non NT, NT
UseOrientation=N
LineWidth=1
Xpm="0 0 1 0"
"1 c #2D76D0"
String1=0x19,река
ExtendedLabels=Y
FontStyle=SmallFont
CustomColor=Day
DaycustomColor:#0000B4
[end]

«String1=0x19,река» — очевидно, что имеется в виду тип объекта (который мне и показывается при наведении курсора). Но совсем не очевидно, откуда должно браться название этого объекта. Иными словами, откуда берутся названия объектов вообще?
Ясно, что изначально они есть в pbf, но потом куда они прописываются и в каком виде хранятся?

shop=convenience {set name='${name}, продукты' | 'продукты' } [0x2e02 resolution 22]
amenity=pub { name '${name}, паб (${phone})' |  '${name}, паб' | 'паб' } [0x2d02 resolution 22]

Выяснил, что продуктовые не получали названия (отображаемого при наведении курсора на точку) из-за наличия «set» и «=». А этих set понаставлено почти везде.
Теперь бы узнать, как заставить присваивать названия (те же реки/озёра), выводимые всегда (независимо от курсора).

Тип объекта это Type=0x1f или Type=0x1151a. А String1=0x19,река - это имя по умолчанию в TYP файле, 0х19 - русский язык, может встретиться 0х04 - тогда надпись на английском. Если в OSM данная река не имеет имени, то она подписывается из TYP файла “река”. Для редактирования TYP я пользуюсь TYPViewer, программа с русским интерфейсом бесплатная. Запускаешь ее, открываешь свой TYP, с лева в окошке “список полилиний” выбираешь 0x01f, двойной клик мышкой или нажатие “изменить” откроет окно редактирования, где можно менять параметры (все подписано по русски). Объясняю почему в стиле две :slight_smile: реки. 0x1f показывается при масштабе от 5м до примерно 3км (сейчас идет обработка данных для карты, и я не могу посмотреть точно) вторая 0x1151a примерно от 5км и на пол страны на экране (образно).
Теперь про Паб

amenity=pub { name '${name}, паб (${phone})' |  '${name}, паб' | 'паб' } [0x2d02 resolution 22]

Эта строчка говорит - Паб отобразить на экране значком 0x2d02 при масштабе от 5м до 700-800м (resolution 22 - масштаб) и если в OSM пабу присвоены имя (например, Моряк) и телефон, отобразится “Моряк, паб 8-921-ххх-хх-хх”. Если присвоено только имя - “Моряк, паб”, а если и имя не присвоено - “паб”.
Про продукты - в строке говорится, присвоить (set) имя которое состоит из имени OSM + слово “продукты” (‘${name}, продукты’) про отображение имени ничего нет.
Я думаю строка должна быть примерно такая:
shop=convenience {name ‘set name=${name}, продукты’ | ‘продукты’ } [0x2e02 resolution 22]
или что-то похожее со скобками (сейчас не посмотреть) сравни с похожими строками из этого и других стилей.
Или без set и =, как и вторая.
Я по началу так и изучал чем отличается стиль velo100 от MapTourist в отображении и строках, находил разницу и сравнивал, менял на одном и опять сравнивал.
Все это можно прочитать на ангельском языке в файле style-manual.pdf который находится в папке mkgmap\doc
На остальное позже когда посмотрю карты.

Гремучая это смесь — стили под гармин. В целом понял, что за подписи, которые должны браться именно из тега name, отвечают строки в файлах стиля (lines, points, polygons и т. д., можно и самому придумывать и добавлять в обработку через include). Как подпись будет отображаться — зависит от настройки внутри TYP (размер шрифта, невидимая надпись, некое присвоенное слово «по умолчанию» и т. д.) Большая часть проблем решилась тупым удалением «set» и «=».
Почитал руководство mkgmap, не смог применить if then else условие (конвертер выдаёт ошибку). Там какие-то «хитрости» со скобками (или чем-то другим). Вообще, легко запороть всё дело, забыв поставить скобку или пробел, или кавычку, или ещё что (конвертер ругается, но не всегда понятно, где копать). Так что желательно иметь вариант «до изменений» (чтобы откатиться).
Тоже скачал «немецкие» TYP-ы, да только они бесполезны без остальных файлов стиля. Откуда их брать? (ведь, вся эта чехарда с типами, правилами отрисовки и проч. строго индивидуальная).
Где-то видел ссылку на Maptourist-а слиль, но потерял.
P. S. Ещё интересно попробовать опцию «использовать значок из другого стиля» (чтобы «доукомплектовать» недостающие)

Не внимательный ты… Я давал ссылку http://www.freizeitkarte-osm.de/garmin/en/development.html а там в самом низу Download.
Скачиваешь архив и в нем 2 стиля найдешь. Для них 6 TYPфайлов и того 12 вариантов.

Точно невнимательный. Маптурист сообщение на 13ой странице под номером 324
И обнови MKGMAP и SPLITTER до крайней версии.

Ага, всё нашлось :slight_smile: Забыл самое главное спросить: есть способ быстрого тестирования результата ковыряний без заливки карты в прибор? (а то слегка напрягает, благо, что файлик меньше 200 Мб)
Файлы, по идее, mkgmap все необходимые создаёт. Но в Basecamp запихнуть их просто так нельзя, вроде бы…

Удивляюсь я твоей невнимательности :smiley:
Сообщение 331 черный квадрат ползунок вниз.
Читаем
“rem Создаем карту gmap (для BaseCamp и MapSource) с помощью MKGMAP”

а дальше
просто скопировать папку “*.gmap” по указанному ниже пути (в зависимости от ОС компьютера):
для WinXP путь C:\Documents and Settings\All Users\Application Data\GARMIN\Maps
для Win7/8/10 путь C:\ProgramData\Garmin\Maps

От жеж :smiley: А у меня оправдалка: много инфы, закопался чутка.
Всё получилось, дас ыст фантастыш!
Странно, что в options.txt про –gmapi сказано «Create a directory in the “gmapi” format required by Mac applications.»
Приятно, что кто-то подскажет, ёлки-палки.
UPD Позже мне подсказали, что можно создать ярлыки (файлы *.lnk) на соотв. папки и закинуть их по указанным выше директориям в завис. от версии Windows, тогда BaseCamp также подхватит эти карты.

Начинаю проводить эксперименты с плагином https://forum.openstreetmap.org/viewtopic.php?id=58978
Может что интересное получится.

В таких случаях принято говорить: «Экий Вы, однако, затейник» :smiley: Sergey Astakhov — в помощь.
С названиями и значками по большей части разобрался, сделал свой вариант stranger-а. Вот не знаю, можно ли как-то прикрутить отображение адресных точек с номерами домов и подъездов с номерами квартир средствами mkgmap.

А как их мапят? Прикручивать думаю надо в поинтах и в имя загонять нужную инфу.

Это, соответственно:
Отдельно стоящая точка или часть линии (addr:housenumber=)+(addr:street=)
Точка на контуре дома (addr:flats=диапазон номеров)+(entrance=staircase/yes)+(ref=номер подъезда)
P. S. Оказалось всё просто, сделал.

Стиль MapTourist файл polygons:

(building=* | bridge=yes & area=yes) { name 'д.${addr:housenumber} (${name}) ${addr:street}' | 'д.${addr:housenumber} ${addr:street}' | 'д.${addr:housenumber}'} [0x13 resolution 24]

На экране видим (если в TYP 0x13 разрешено показывать) д.1 Ленина проспект. У MapTourist в TYP 0x13 стоит “невидимая надпись” и видно только при наведении курсора. У бери из строки “д.” и будет просто 1 Ленина проспект. Это все на зданиях building
Стиль Stranger файл polygons:

building=* { name '${addr:housenumber} (${name}, ${name:full})' | '${addr:housenumber} (${name})' | '${name} (${name:full})' | '${name}' | '${name:full}' | '${addr:housenumber}' } [0x13 resolution 24]

тут номер дома без улицы.
Я сделал так как MapTourist (но без “д.”) в конец строки добавил “продолжить” по ангельски.
и в файл points добавил строку как в полигонах Stranger. Теперь я вижу номера домов, а наведя курсор номер дома и название улицы.
Точка или полигон с номером дома и именем улицы это building
А как называется точка с номером квартир и подъезда. ref ведь тоже в имя добавить можно. Может и addr:flats можно добавить, пробуй.

Но это сработает только на точках, имеющих *building=**, в то время как адресные точки не имеют этого тега (только адреска).

Не понял…

Тоже хотел подобного эффекта добиться (особенно для подъездов). А как получается, что присвоив один и тот же TYP (0x13) по двум разным условиям — подписи (разные!) одновременно и видимые и невидимые? Видимость (шрифт и всё такое) выставляется галкой для TYP, насколько знаю. Но, если TYP один и тот же, то не важно, по какому условию он был присвоен — всё равно его название может быть либо видимым, либо невидимым.
Иными словами, не въехал, как получилось одному и тому же TYP (который 0x13) прикрутить одновременно (невидимые улица+номер) и (видимый только номер)???
Для подъездов сделал так (0x1151f картинку переделал на свой лад):

entrance=staircase | entrance=yes { name '${ref} (${addr:flats})' | '${addr:flats}' | '${ref}' } [0x1151f resolution 24]

А хотел добиться, чтобы всегда были видны только номера ref, а наведя курсор — получить addr:flats.
Для адресных точек сделал пока так (но посмотрю, что получится по твоему варианту):

addr:housenumber=* & addr:street=* & building!=* & entrance!=* { name '${addr:housenumber}' } [0x1161a resolution 24]

0x1161a тоже сам намалевал.
Всё — только для points.

В опциях mkgmap поставь add-pois-to-areas
Points

# Точки созданные из полигонов mkgmap с опцией add-pois-to-areas
# Здания - для отображения номеров домов
(building=* | bridge=yes & area=yes) & mkgmap:area2poi=true { name '${addr:housenumber} (${name})' | '${addr:housenumber}'} [0x6402 resolution 24 continue with_actions default_name 'здание']

# Удалить точки созданные из полигонов mkgmap с опцией add-pois-to-areas
mkgmap:area2poi=true {deletealltags}

То есть автоматически ставить точки только на полигоны зданий, а с других полигонов автоматически поставленные удалить. Если нужны автоматические точки на еще каком нибудь полигоне, впиши эти точки в пустую строку (строки) выше правила Удалить…
Polygons

(building=* | bridge=yes & area=yes) { name '${addr:street} ${addr:housenumber} (${name})' | '${addr:street} ${addr:housenumber}' | '${addr:housenumber}'} [0x13 resolution 24]

Я не мапер и не программист, что такое точка только с адреской? Вход в подъезд даже по моему свой тэг имеет. Ну да имеет, ты же пишешь. А что за адреска такая нее пойму.
0x6402 - 1 прозрачный пиксел с подписью.

Осваиваю mkgmap. Пробую использовать свой стиль. Mkgmap мой стиль видит, но применять не хочет.

Что делал.

Скачал Mkgmap r3991.
В JOSM v.12542 создал линию из пяти точек, назначил ей highway=path и сохранил в Map.osm:

<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' generator='JOSM'>
  <node id='-38989' action='modify' lat='51.74690727846' lon='86.43364897728' />
  <node id='-38990' action='modify' lat='51.74882031029' lon='86.44248953819' />
  <node id='-38991' action='modify' lat='51.74924541747' lon='86.45090094566' />
  <node id='-38992' action='modify' lat='51.75222105571' lon='86.45914069176' />
  <node id='-38993' action='modify' lat='51.75253986247' lon='86.47055617332' />
  <way id='-38988' action='modify'>
    <nd ref='-38989' />
    <nd ref='-38990' />
    <nd ref='-38991' />
    <nd ref='-38992' />
    <nd ref='-38993' />
    <tag k='highway' v='path' />
  </way>
</osm>

Создал минимальный стиль в папке style - файлы version, options и lines.
Файлы version и options взял из examples\styles\default
Файл lines содержит строку:

highway=path [0x13 road_class=0 road_speed=1 level 3]

Создал файл с опциями mkgmap.args:

input-file=Map.osm
style-file=style
check-styles
list-styles
verbose
transparent
family-id=6324
product-id=1

Запустил mkgmap:

java -Xmx256M -jar mkgmap.jar -c mkgmap.args

Сгенерённый файл 63240001.img открыл GPSMapEdit и сохранил в формате .mp
Моя линия в 63240001.mp выглядит так:

[POLYLINE]
Type=0x16
Data0=(51.74691,86.43365),(51.74882,86.44249),(51.74925,86.45090),(51.75221,86.45914),(51.75254,86.47056)
[END]

Я ожидал, что Type будет 0x13. Подскажите, пожалуйста, что я делаю не так?

Скорей всего MkgMap не видит твой стиль, а берет из стиля по умолчанию (default) из файла lines строку

highway=footway|highway=path|highway=steps [0x16 road_class=0 road_speed=0 resolution 23]

И версия 3991 еще я бы сказал экспериментальная, возьми стабильную 3980

style-file=style — тут должен быть путь к папке (а не просто её название) с файлами options, lines, polygons и т. п.
Также необходимо наличие файла TYP, который должен содержать все эти 0x13.

Нет можно и без TYP только тогда отображение будет так как зашито в прошивке прибора или в программе (BaseCamp или MapSource).