Mkgmap

Запускаю 3_run_boundary.bat
@echo off
set BASEDIR=%CD%
:: =============================================================
rem Очистка целевых каталогов
echo .
echo . Cleaning the target directory
echo .
del /q /s %BASEDIR%\boundary*.*
:: =============================================================
rem Создаём файлы границ из данных OSM Osmosis.
echo .
echo . Osmosis create boundary out of file OSM data
echo .

call %BASEDIR%\osmosis\bin\osmosis ^
–read-pbf file=%BASEDIR%\input\MAP.osm.pbf outPipe.0=1 ^
–buffer inPipe.0=1 outPipe.0=2 ^
–tag-filter reject-relations inPipe.0=2 outPipe.0=3 ^
–tag-filter accept-ways boundary=administrative,postal_code inPipe.0=3 outPipe.0=4 ^
–used-node inPipe.0=4 outPipe.0=5 ^
^
–read-pbf file=%BASEDIR%\input\MAP.osm.pbf outPipe.0=6 ^
–buffer inPipe.0=6 outPipe.0=7 ^
–tag-filter accept-relations boundary=administrative,postal_code inPipe.0=7 outPipe.0=8 ^
–used-way inPipe.0=8 outPipe.0=9 ^
–used-node inPipe.0=9 outPipe.0=10 ^
^
–merge inPipe.0=5 inPipe.1=10 outPipe.0=11 ^
–write-pbf file=%BASEDIR%\boundary\local-boundaries.osm.pbf omitmetadata=true compress=deflate inPipe.0=11

java -cp %BASEDIR%\mkgmap\mkgmap.jar ^
uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryPreprocessor ^
%BASEDIR%\boundary\local-boundaries.osm.pbf %BASEDIR%\boundary\local

pause
получаю \boundary\local-boundaries.osm.pbf размер файла 3мб
boundary\local\bounds_2450000_1500000.bnd - bounds_2600000_1600000.bnd итого 17 файлов общий вес 9,5 мб

запускаю 4_run_splitting.bat
@echo off
set BASEDIR=%CD%
:: =============================================================
rem Очистка целевых каталогов
echo .
echo . Cleaning the target directory
echo .
rem del /q /s %BASEDIR%\output*.*
rem del /q /s %BASEDIR%\tiles*.*
:: =============================================================
rem Разбиваем файл данных OSM на плитки Splitter-ом.
echo .
echo . Splitting a file OSM data
echo .

java -Xmx1024m -jar %BASEDIR%\splitter\splitter.jar ^
–max-nodes=1600000 ^
–overlap=0 ^
–output-dir=%BASEDIR%\output ^
–write-kml=%BASEDIR%\tiles\tiles.kml ^
–output=pbf ^
–keep-complete=true ^
–no-trim ^
–geonames-file=%BASEDIR%\input\cities15000.zip ^
%BASEDIR%\input\MAP.osm.pbf > %BASEDIR%\splitter\logs\splitter.log
pause

“%PROGRAMFILES(x86)%\GPSBabel\gpsbabel” -i kml -o osm -f %BASEDIR%\tiles\tiles.kml -F %BASEDIR%\tiles\tiles.osm
“%PROGRAMFILES(x86)%\GPSBabel\gpsbabel” -i kml -o gpx -f %BASEDIR%\tiles\tiles.kml -F %BASEDIR%\tiles\tiles.gpx
“%PROGRAMFILES(x86)%\GPSBabel\gpsbabel” -i kml -o gdb -f %BASEDIR%\tiles\tiles.kml -F %BASEDIR%\tiles\tiles.gdb
pause

получаю \tiles tiles.gdb tiles.gpx tiles.kml tiles.osm общий вес 5кб
\output 63240003.osm.pbf 63240002.osm.pbf 63240001.osm.pbf areas.list areas.poly template.args densities-out.txt общий вес 27,5 мб

запускаю 5_run_create.bat

@echo off
set BASEDIR=%CD%
:: =============================================================
echo .
echo .
echo Введите номер - соответствующего выбранного стиля
echo создоваемой карты
echo 1 - p-map - стиль карт с https://wiki.openstreetmap.org/wiki/User:Petrovsk/My_Garmin_map_styles#P-Map
echo 2 - Osma11 - стиль карт с https://wiki.openstreetmap.org/wiki/User:Petrovsk/My_Garmin_map_styles#Osma11
echo 3 - My-style - стиль карт Mkgmap default + J-Typ-v161.typ
echo .
set /p NAME="Enter NAME Style - "
echo NAME Style is - %NAME%
if %NAME%==1 goto style1
if %NAME%==2 goto style2
if %NAME%==3 goto style3

goto EOS

rem set MYSTYLE= - Имя папки со стилем, имя стиля
rem set MYFID= - FID карты
rem set MYTYP= - Имя TYP файла без расширения

:style1
set MYSTYLE=p-map
set MYFID=433
set MYTYP=p-map
goto pusk

:style2
set MYSTYLE=Osma11
set MYFID=444
set MYTYP=Osma11
goto pusk

:style3
set MYSTYLE=My-style
set MYFID=1000
set MYTYP=J-Typ-v161
goto pusk

:default
set MYSTYLE=%MYSTYLE%
set MYFID=%MYFID%
set MYTYP=%MYTYP%

:pusk

:: =============================================================
rem Очистка целевых каталогов
echo .
echo . Cleaning the target directory for Creating.
echo .
del /q /s %BASEDIR%_Garmin%MYSTYLE%.img
del /q /s %BASEDIR%_MapSource%MYSTYLE%*.*
rmdir /q %BASEDIR%_MapSource%MYSTYLE%
mkdir %BASEDIR%_MapSource%MYSTYLE%
:: =============================================================

rem Создаем карту с помощью MKGMAP
echo .
echo . Create a map using MKGMAP…
echo .
cd "%BASEDIR%\output"

java -Xmx1024m -jar "%BASEDIR%\mkgmap\mkgmap.jar" ^

–output-dir=%BASEDIR%_MapSource%MYSTYLE% ^
–description=“OSM %MYSTYLE% v. %DATE%” ^
–family-name=“OpenStreetMap + %MYSTYLE%” ^
–series-name=“Russia” ^
–overview-mapname=“OSM_%MYSTYLE%” ^
–area-name=“OSM %DATE%” ^
–copyright-message=“OpenStreetMap CC-BY-SA 2.0, ST-GIS CC-BY-SA 3.0, %MYSTYLE%” ^
–family-id=%MYFID% ^
–keep-going ^
–read-config=%BASEDIR%\styles\optionsfile.args ^
–style-file=%BASEDIR%\styles%MYSTYLE% ^
-c %BASEDIR%\output\template.args %BASEDIR%\styles%MYSTYLE%%MYTYP%.typ
pause
:: =============================================================
rem Копирование карт в выходные каталоги
echo .
echo . Copying gmapsupp.img into output…
echo .
cd “%BASEDIR%”
move /y %BASEDIR%_MapSource%MYSTYLE%\gmapsupp.img %BASEDIR%_Garmin
rename %BASEDIR%_Garmin\gmapsupp.img %MYSTYLE%.img

**Толи глаз замылился, немогу найти ошибку **

содержимое optionsfile.args
country-name=Российская Федерация
country-abbr=RUS
mapname=63240001
code-page=1251
lower-case
index
split-name-index
bounds=…..\boundary\local
location-autofill=bounds
housenumbers
remove-ovm-work-files

style-file=…....\styles\osma11

name-tag-list=name:ru,name,name:en,int_name
family-id=6324
product-id=1
product-version=1701
series-name=RUS-Test
route
drive-on=right
preserve-element-order
add-pois-to-areas
precomp-sea=…....\work\input\sea-latest.zip
generate-sea=land-tag=natural=land
make-poi-index
link-pois-to-ways

process-destination

process-exits

tdbfile
show-profiles=1

draw-priority=25

transparent

hide-gmapsupp-on-pc

no-poi-address

verbose

Я примерно понял где ошибка.
Запускаю 3_run_boundary.bat
Вот в этой и похожей строке --read-pbf file=%BASEDIR%\input\MAP.osm.pbf outPipe.0=1 ^
Надо указывать другой файл, содержащий или всю Россию или бывший СССР, а так как сейчас границы не создаются.

источник выгрузок ОСМ
local локальное покрытие http://osm.sbin.ru/osm_dump/local.osm.pbf
RU Российская Федерация http://osm.sbin.ru/osm_dump/RU.osm.pbf
RU Российская Федерация http://download.geofabrik.de/russia-latest.osm.pbf
RU Российская Федерация http://osmosis.svimik.com/latest/RU.osm.pbf
RU Российская Федерация http://needgeo.com/data/current/country/RU.pbf

ИЛИ пользоваться готовыми границами bounds-latest.zip
Но тогда содержимое optionsfile.args
bounds=…..\boundary\local
поменять на
bounds=…....\work\input\bounds-latest.zip

Теперь разберемся с путями.
Предположим что все это мы собираем на диске С в папке OSM, тогда у нас получается %BASEDIR%=C:\OSM
И все папки и файлы должны находиться в этой (C:\OSM) папке и все пути в файлах должны идти от нее.
Соответственно
bounds=…....\work\input\bounds-latest.zip должно принять вид
bounds=%BASEDIR%\work\input\bounds-latest.zip
Замени везде по этому принципу.

Если пользоваться готовым файлом границ bounds-latest.zip
То Запускаю 3_run_boundary.bat это делать не надо, этот файл тогда не нужен. Сразу переходи к запускаю 4_run_splitting.bat

Дальше проверь на задвоение (у тебя есть) запускаю 5_run_create.bat и содержимое optionsfile.args
Если в первом –family-id=%MYFID% ^ то во втором family-id=6324 не должно быть
ну и остальное

Во втором пути могут быть только полными C:\OSM\work\input\bounds-latest.zip или относительными …....\work\input\bounds-latest.zip
Пути с переменными %BASEDIR%\work\input\bounds-latest.zip надо перенести в первый , вот так
bounds=%BASEDIR%\work\input\bounds-latest.zip ^
и удалить или закоментировать во втором? вот так.

bounds=…....\work\input\bounds-latest.zip

Проверил все пути, проверил задвоения, все получилось.
Как сделать чтоб на выходе получался один *.img файл?
При запуске java максимально получилось выделить java -Xmx1600m а в наличии 16Gb из за чего это может быть?

java должна быть 64бита, а не 32.
Добавь параметр (а документацию на MKGMAP прочитать слабо?) gmapsupp

Спасибо.
Нашел документацию. https://wiki.openstreetmap.org/wiki/RU:Mkgmap

Когда же Вы (молодое поколение) научитесь читать? Давно все дано.
https://forum.openstreetmap.org/viewtopic.php?id=9249&p=14
Сообщение 326 черное листай в самый низ там ссылки найдешь стили от freizeitkarte
Вдруг не сможешь найти https://github.com/freizeitkarte/fzk-mde-garmin
Еще интересный стиль https://github.com/Jorisbo/Mkgmap-Mapnik-Style-Garmin
Еще интересный стиль https://speichenkarte.de/

Документация сообщение 332 вторая черная (файл optionsfile2.args я уже перевел для вас)
Еще документация в архиве MKGMAP в папке mkgmap\doc
Пример стиля по умолчанию в архиве MKGMAP в папке mkgmap\examples\styles\default
Еще документация http://www.mkgmap.org.uk/doc/index.html http://www.mkgmap.org.uk/doc/options http://www.mkgmap.org.uk/doc/typ-compiler http://www.mkgmap.org.uk/doc/pdf/style-manual.pdf http://www.mkgmap.org.uk/doc/splitter.html
А еще попробовать версию содержащую TYP http://www.mkgmap.org.uk/download/mkgmap-default-typ-r4258.zip

Ну и в каждой программе есть параметр help

Изучай, сравнивай, делай выводы. И все получится.

Спасибо за терпение.
Отличный стиль, очень понравился(название папки стиля нужно поменять для корректной работы) https://github.com/Jorisbo/Mkgmap-Mapnik-Style-Garmin
Пока писал данный текст вышла обнова на этот стиль

Со стилем https://speichenkarte.de/ тоже разобрался typ файлы брал из собранных там же карт

Нашел еще стили https://github.com/solitone/mtbmap
https://github.com/V0174/garminstyly
https://github.com/F462/OpenHikingMap

Установил стили с https://github.com/freizeitkarte/fzk-mde-garmin их там 2 fzk и swisspopo + 5 .typ файлов к каждому стилю
На выходе компиляция идет 10 сек и карта весит 50 кб. и она не работает, была ли у вас такая же проблема.

Внимательнее!!! Молодой человек. 6 TYPфайлов да на 2 стиля итого 12.
А у speichenkarte.de 3 TYPфайла в архиве присутствуют в текстовом формате.

Joris как раз делает TYPфайл который находится в сборке http://www.mkgmap.org.uk/download/mkgmap-default-typ-r4258.zip

Последнее предложение не понял, я уже говорил что я не экстрасенс. Про что это? Если про fzk-mde-garmin то там перл надо устанавливать. Вот https://www.freizeitkarte-osm.de/garmin/en/development.html здесь смотрим. А для своих карт еще и правильно редактировать mt.pl файл, ну и еще свои файлы добавлять, скопируй файл mt.pl поменяй ему расширение на txt и открой текстовым редактором и изучай.

Как поменять название карты которое отображается в Basecamp?
Я так понимаю что название карты дает splitter в файле template.args в разделе “description: RU-Kursk”
В 5_run_create.bat
–description=“%DESCRIPTION%-%MYSTYLE% v. %DATE%” ^
–family-name=“OpenStreetMap + %MYSTYLE%” ^
–series-name=“Russia” ^
–overview-mapname=“OSM_%MYSTYLE%” ^
–area-name=“OSM %DATE%” ^
неработают

Пробовал для splitter параметр --description=“OSM Map” но не помогло - подскажите как решить?

Для splitter не надо, надо для mkgmap

splitter формирует файл \output\template.args в котором прописан “description: RU-Kursk” на основе этой строки mkgmap формирует название карты в Basecamp “RU-Kursk”
как сделать чтоб splitter не прописывал description: “RU-Kursk” ?

За это отвечает ключ --geonames-file=
Документация по Splitter находится вот здесь:
http://www.mkgmap.org.uk/doc/splitter.html

С момента моего перевода кое что поменялось, посмотри оригинальную документацию.
Сплиттер прописывает каждому img файлу, а mkgmap прописывает всему набору. Только там надо правильно указывать description=text после -c template.args, а иначе прописывается от последней карты (квадрата) в наборе.

Спасибо все получилось.

Подскажите можно ли как нибудь ускорить процесс osmosis? (очень долго делает)
Есть ли возможность скачивать прямоугольную зону из OSM, а то скачивание “http://download.geofabrik.de/russia/central-fed-district-latest.osm.pbf” тоже по времени много занимает и трафик.

Подскажите, пожалуйста!

Есть ли возможность запретить **mkGmap **разбивать мультиполигоны на части ?
Может параметр какой недокументированный есть ?
Известно ли количество точек, при превышении которого **mkGmap **начинает заниматься разбиением полигонов ?

Дело в том, что конвертирую карту в польском формате (.MP) при помощи **cGPSmapper **-- всё нормально:

Конвертирую тот же файл при помощи последней версии mkGmap и получаю кривизну, которая запечатлена на скриншоте:

В GPSmapEdit’е видно, что мультиполигоны разбиваются на части, но похоже разбиваются некорректно!!!

Конвертировал при помощи батника:

java -jar d:\mkgmap.jar --reduce-point-density=1 --mapname=12345678 --family-id=1281 --product-id=1 "AmericanLake.mp"

причём в параметр --reduce-point-density= подставлял и 0, и 1 – без разницы
Других параметров, которые могли бы повлиять на результат, пока не нашёл…

Исходный .MP файл выложил здесь: https://yadi.sk/d/c5-7lv8v-Ubvzw

Может есть какие-нибудь идеи по поводу решения данной проблемы ?
Ну не самому же разбивать мультиполигон на более мелкие части… :open_mouth:

Заранее СПАСИБО за советы!

ЗЫ: Попробовал --order-by-decreasing-area и --reduce-point-density-polygon=1 – не помогло.
PPS: Генерализация исходного .MP файла (“похудел” в 2 раза) в GpsMapEdit не помогла.

PPPS: В .MP убрал из мультиполигонов внутренние (inner ring) полигоны. Т.е. сделал мультиполигоны просто полигонами – косяк как ни странно ИСЧЕЗ !!! :smiley:

Это, конечно, не выход из положения, т.к. при таком варианте перестают отрисовываться пупки и острова.
Возможно, причина косяков не столько в самом mkGmap, сколько в не очень качественном исходном .MP: если загрузить его в GPSmapEdit и выбрать в меню: Инструменты > Проверка карты , то высветится довольно много ошибок пересечения и перекрытия. + Большинство полигонов этой карты состоят из нескольких сотен точек.

Но всё равно остаётся вопрос: почему Mkgmap косячит с картами, которые спокойно переваривает cGPSmapper ? :frowning: