Буквально только что наконец-то одержал маленькую победу над этой программулиной, разобравшись, как добиться русских символов, которые она никак не хотела отображать при преобразовании mp->img.
При этом преобразование osm->img замечательно работает. После некоторых экспериментов дело оказалось в том, что mkgmap ожидает увидеть в файлах данных UTF-8, как в файлах *.osm . Файлы же *.mp обычно идут в виндовой кодировке 1251, с отметкой об этом в заголовке CodePage=1251. Ходил вокруг да около этих кодировок, но получалась фигня. Codepage=UTF-8 или utf8 не берет, хочет число. Нагуглил cp65001, попробовал в винде - да, оно. Codepage=65001, как оказалось, тоже mkgmap’у не нравится.
В общем, решение такое: перекодируем файл mp в UTF-8 и комментируем внутри строку с codepage. Решение обходное, временное, но рабочее.
А затем, что osm2mp выдаёт заметно лучший результат, но в mp, который ещё после этого надо компилить дальше. Я хочу попробовать заменить на этом этапе cgpsmapper на mkgmap.
CodePage=utf8, как писал выше, вызывает ругательства:
java.nio.charset.UnsupportedCharsetException: cputf8
at java.nio.charset.Charset.forName(Unknown Source)
at uk.me.parabola.mkgmap.reader.polish.PolishMapDataSource.imgId(PolishM
apDataSource.java:623)
…
А так, да, всё круто, результирующий файлик вроде переваривается, несмотря на мои опасения по поводу заголовков. Там name остается в 1251, но это вроде пофиг. Спасибо за подсказку
Интересное дело, mkgmap Московскую область целиком в *.osm не прожевывает, а в *.mp - вполне даже. Размеры исходных файлов разные - osm около 450 мегов, а mp около 100, видимо, из-за этого.
С измененным TreSize на старом девайсе крутится довольно шустро в итоге, а внешний вид пока на глаз особо не отличается.
Пользую mkgmap для себя почти с того момента, как начал рисовать в osm. Поделюсь своими наработками. Во-первых, чтобы переваривал, нужно всегда использовать splitter.
Стилем особо хвастаться не могу, т.к. никак не могу достичь идеального баланса уровней. Чтобы и на больших масштабах не тормозила, и чтобы на средних было достаточно объектов видно. Хотелось бы посмотреть на чей-то стиль, у кого хорошо проработаны levels/resolution.
Из-за ограниченности типов в гармин, решил попробовать вписывать покрытие в имя дороги, оказалось удобно:
Первое: интересно, зачем и откуда такая извращённая кодировка?
Второе: не понимаю смысла замены имени, а не добавления уточнения к нему. Конструкция типа { name ‘${name} (грунтовка)’} вполне работает и встречается где-то в дефолтах.
Пока что в mkgmap выявились следующие отличия, по сравнению с osm2mp:
Нет возможности сформировать точку из полигона
Похоже, нет поддержки адресации точек
Нет некоторых дополнительных условий типа inside_city
Чуть менее тонкие настройки роутинга
Объекты можно привязать как к уровню карты (level=[0…8]), так и к уровню прибора (resolution=[~10…24]).
А так, по большому счёту, всё то же самое, только занимаемая при работе память раза в три меньше и время выполнения раз в двадцать быстрее.
Про роутинг пока можно сказать, что он, по крайней мере, работает.
Отдельно нужно сказать про очень сильную генерализацию линий mkgmap’ом на средних уровнях. В крайних масштабах всё нормально, а в средних заметны большие ступеньки. Причём, это не зависит от входных данных и не регулируется параметрами.
Долго не знал, чего написать, очень уж ты вопрос хороший поднял. Я уже более полугода экспериментирую с настройками уровней, пытаясь найти баланс, однако проблема в том, что он будет разным для разных ситуаций.
В идеале, хотелось бы иметь отключаемые слои, чтобы быстро убрать ненужное и сосредоточиться на нужном типе объектов. Однако, в гармине такого даже близко нет, увы. На данный момент наиболее интересная мысль - это точки убирать в отдельные дополнительные карты, которые можно включать/выключать в навигаторе. Кстати, файлы gpi для этого хуже - их нельзя отключать, в отличие от прозрачных карт с точками.
Level - категория карты, а resolution - категория железки. Если в заголовке карты поменять настройки levels, то придётся везде по конфигам править/подгонять значения. Если же привязать объекты к resolution, то число и разрешение уровней карты можно менять без последствий. Очень удобно для экспериментов, да и вообще полезно.