Конвертация OSM в Navitel

  1. А в навителе могут отображаться отдельно стоящие деревья?
    Например стоит в поле дуб, я его нанес на карту (natural=tree) и он отображается зеленой точкой на карте OSM, а в навителе нет.
  2. Можно ли как то скрыть название POI, чтобы в поиске находило, а на карте не отображалось?
  3. Когда будет новая карта Беларуси?

А чем не нравятся эти?

Эти обновлю, как только чуток с делами разгребусь :).

Они и отображаются, как “Отдельно стоящее дерево (0xf404, точка)”, видны на масштабах до 120 м при средней детализации.

Хм. Можно пример, где это было бы полезным?

К примеру какая нибудь территория водозабора или очистных сооружений нарисована в виде площади и имеет название, но в поиске его так не найти.
Если еще поставить точку с таким названием, то в поиске находит, но тогда на карте вылазит 2 одинаковых названия.
Остается только не указывать название в площади.

Нравятся, но я внес много изменений в Гродно, и хотелось бы увидеть результат в навителе.

Обновил карту Беларуси :slight_smile:

Поставил максимальную детализацию, приблизил до максимума - дерева нет.

Спасибо, сча посмотрим. Когда ты только успел?

SegMar, ну раз просили… :slight_smile:

Может быть, так настроен фильтр POI?
Навскидку, вот тут в НН 3.2.6 отлично видны все деревья.

C отдельными деревьями все понятно. Просто dimuzz говорил про российские конфиги, а я конвертил с белорусскими, которые tibman делал. Оказывается у него деревья были закомменчены. Снял пометку. Теперь будут, но уже в следующей сборке :).

а вам еще никто не говорил, что рисовать под навигатор - один из смертных грехов в осм?

Коллеги, отпишитесь плиз здесь, кто у вас старшой.
если есть сомнения, можете внутренние выборы провести:slight_smile:

Господа подскажите, что за ошибка??

Processing ways…
“\x{d604}” does not map to cp1251 at osm2mp.pl line 3263, <$[…]> line 10901048.
“\x{b300}” does not map to cp1251 at osm2mp.pl line 3263, <$
[…]> line 10901048.

и что сделать? спасибо!

Насколько помню, ничего страшного. Просто эти символы не были найдены в cp1251 и соответственно не могут быть им интерпретированы. Могу посоветовать использовать --namelist label=name:ru,name
Если не прав, поправьте.

спасибо, но не помогло. тоже самое в том же месте

А какой регион конвертируете? Наверное, который граничит с другой страной?

нет, Архангeльская область
у меня cp нигде не прописана…

Конвертация osm в navitel с отдельным файлом роутинга на примере Приморского края. О пользе отдельного файла роутинга можно почитать здесь.

Скачиваем GPSMapEdit. Если выбрали версию без инсталлятора, то разархивируем в любое место и запускаем один раз mapedit.exe, что бы прописались пути в реестре.
2. создаём папку, например prim, и складируем все файлы в ней

http://osm2mp.googlecode.com/svn/trunk/osm2mp/cp1251.cmap
Что бы каждый раз не копировать эти файлы вручную (при их обновлении на сервере), можно использовать TortoiseSVN
Также рекомендую немного отредактировать getbound.pl: найти в нём строчку $ua->timeout( 60 ); и поменять её на $ua->timeout( 300); так получение poly файла будет более стабильным.
3. В созданной нами папке prim
3.1 создаём файл main.bat с содержимым

del *.bak
del *.htm
Start /Wait wget.bat
Start /Wait size.vbs
If Exist log.txt Exit /B
Start /Wait 7z.bat
Start /Wait getbound.bat
Start /Wait poly.vbs
Start /Wait osm2mp.bat
Start /Wait osm2mp_rt.bat
Start /Wait mp-postprocess-navitel.bat
Start /Wait ConvertToNM2.vbs
exit

3.2 создаём файл wget.bat с содержимым

wget -N http://data.gis-lab.info/osm_dump/dump/latest/RU-PRI.osm.bz2 -olog.txt
exit

качаем http://www.interlog.com/~tcharron/wgetwin-1_5_3_1-binary.zip из архива нам нужен wget.exe, который разархивируем в ту же папку prim
данный батник закачивает последний osm файл нужного нам региона, причём если файл не изменился, то он его закачивать не будет.
3.3 создаём файл size.vbs с содержимым

Dim objFso
Dim f
Set objFso = CreateObject("Scripting.FileSystemObject")
Set f = objFso.GetFile("log.txt")
if f.size > 600 then f.delete

данный скрипт нужен для автоматизации, т.е. если файл не изменился то и конвертировать ничего не надо. Размер в 600 байт выбран методом “научного тыка”, т.е. wget в случае закачки создаст log.txt размером больше 600 байт, если не закачал (файл не изменился), то файл log.txt будет размером меньше 600 байт.
3.4 создаём файл 7z.bat с содержимым

7za e prim.osm.bz2 -y
exit

качаем http://downloads.sourceforge.net/sevenzip/7za920.zip, 7za.exe из архива также разархивируем в папку prim.
3.5 создаём файл getbound.bat с содержимым

getbound.pl prim > prim.poly
exit

Очень рекомендую запустить данный батник и проследить, что бы poly файл создался.
3.6 Очень часто бывает, что poly файл в силу разных причин не создаётся (поломали релейшн, нет связи с osm и т.д. и т.п.) поэтому у меня в запасе есть более старый poly файл.
создаём файл poly.vbs с содержимым

Dim objFso
Dim f
Const OverwriteExisting = True

Set objFso = CreateObject("Scripting.FileSystemObject")

Set f = objFso.GetFile("prim.poly")

if f.size <> 0 then
objFSO.CopyFile "c:\gps\update\OSM\prim\prim.poly" , "c:\gps\update\OSM\POLY\", OverwriteExisting
Else
objFSO.CopyFile "c:\gps\update\OSM\POLY\prim.poly" , "c:\gps\update\OSM\prim\", OverwriteExisting
end if

Т.е. когда запустили getbound.bat и получили рабочий poly файл то сохраняем его в папке poly. И если при конвертации закачка poly файла будет неудачной то он будет взят из папки poly, а если закачка будет удачной то он там сохранится как более свежая версия.
3.7 файл osm2mp.bat, с ним всё более интересно. Можно не извращаться и создать его в таком виде

osm2mp.pl --config=navitel.yml --textfilter PrepareCP1251 --namelist label=name:ru,name --defaultcountry=RU --defaultregion="prim" --bpoly=prim.poly RU-PRI.osm > RU-PRI.mp
exit

Можно же немного поизвращаться и создать в виде

chcp 65001
osm2mp.pl --config=navitel.yml --textfilter PrepareCP1251 --namelist label=name:ru,name --defaultcountry=RU --defaultregion="Приморский край" --bpoly=prim.poly RU-PRI.osm > RU-PRI.mp
exit

но…
а. его нужно сохранить, например с помощью программы Notepad++ в кодировке utf-8
б. например с помощью программы XVI32 удалить первые 3 hex-символа (EF BB BF), зато потом можно использовать в --defaultregion любые символы, чем я и пользовался когда конвертировал Украину.
3.8 создаём файл osm2mp_rt.bat с содержимым

osm2mp.pl --config=navitel-rt.yml --nobackground --bpoly=prim.poly RU-PRI.osm > RU-PRI_rt.mp
exit

3.9 создаём файл mp-postprocess-navitel.bat с содержимым

mp-postprocess-navitel.pl RU-PRI.mp --killrouting --noshorten
mp-postprocess-navitel.pl RU-PRI_rt.mp --fixrouting --noshorten
exit

Если будут ошибки роутинга, то постпроцессор попытается их исправить и запишет их в файл RU-PRI_rt.mp.err.htm. Если же постпроцессор не смог исправить все ошибки, то на последующем шаге конвертация вылетит и ошибки придётся исправлять вручную по этому методу.
3.10 создаём файл ConvertToNM2.vbs с содержимым

Option Explicit
On Error Resume Next
Dim a
Set a = CreateObject ("GPSMapEdit.Application.1")
a.MinimizeWindow
Dim fso
Set fso = CreateObject ("Scripting.FileSystemObject")
Dim strRoot
strRoot = fso.GetAbsolutePathName (WScript.ScriptFullName + "\..\")
Dim pMapsFolder
Set pMapsFolder = fso.GetFolder (strRoot)
Dim pFile
For Each pFile In pMapsFolder.Files
	Dim strExt
	strExt = LCase (fso.GetExtensionName (pFile.Path))
	If strExt = "img" Or strExt = "ntm" Or strExt = "rus" Or strExt = "mp" Then
		a.Open pFile.Path, False

		Dim strOutFile
		strOutFile = fso.GetParentFolderName(pFile.Path) + "\" + fso.GetBaseName (pFile.Path) + ".nm2"
		a.SaveAs strOutFile, "navitel-nm2"
	End if
Next
a.Exit

Соответственно для конвертации нужно запустить main.bat
Данный скрипт у меня работал на WinXP SP3, а сейчас успешно работает под Win7.