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

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

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.

to Paspartu:
спасибо, все перепробовал, ошибка одна и та же.
Што там за символы нечитаемые непонятно!

при попытке использовать cp1251
выдает вот такую ошибку
Can’t locate PerlIO/via/PrepareCP1251.pm in @INC (@INC contains: C:/Perl64/Navitel_Convert/___test C:/Perl64/site/lib C:/Perl64/lib .) at (eval 147) line 2.

где его взять и куда положить подскажите пжлста

PrepareCP1251.pm

скачал. спс.
ОШИБКА ОСТАЛАСЬ! ну что же это такое то блин!

а можно как то вычислить, что это за символы и где они?

Только что отконвертировал, не одной ошибки.

вот я и не понимаю, с чем это связано

Тук, тук, тук!
Простите, что помешал, но можно ли как-нибудь обновить Финляндию, все-таки? А?

Финляндия 54224
1 Лапландия 1724359
2 Похьойс-Похьянмаа 1724360
3 Кайнуу 1997164
4 Похьойс-Карьяла 1999428
5 Северное Саво 918898
6 Этеля-Саво 918897
7 Этеля-Похьянмаа 1702263
8 Похьянмаа 2000320
9 Пирканмаа 1701741
10 Сатакунта 2000361
11 Кески-Похьянмаа 1702330
12 Центральная Финляндия 1701740
13 Варсинайс-Суоми 38092
14 Этеля-Карьяла ?
15 Пяйят-Хяме 1703362
16 Канта-Хяме 1473990
17 Уусимаа 37355
18 Кюменлааксо ?
19 Аландские острова 1650407
Fortress начал рисовать границу между оставшимся областями, но почему то остановился.
Я могу настроить конвертацию, но т.к. Вы явно лучше меня знаете Финляндию, Вам задача - дорисовать границу между оставшимся областями.

Было свободное время как раз хотел пересобрать Финляндию по всем правилам. Начал рисовать границы. Времени не хватило, поэтому пока зависло…

надо тебе подготовить to-do список для желающих помочь, но незнающих чем
тогда, глядишь, и дело пойдет быстрее

Это да.

А что можно сделать, чтобы мусульманские и православные кладбища отображались по-разному? Сейчас они отображаются одинаково - тип, вроде, 0x1a … т.е. тэг religion = muslim не учитывается…?

Чтобы отображались по-разному - никак. НН не поддерживает кастомных типов.
Религию в принципе можно дописывать в примечание (Text), но оно будет видно только при просмотре полной информации об объекте.

Насчёт Финляндии. Заметил ошибку в нарезки на области. Область Уусимаа сейчас больше за счёт Восточной Уусимаа. Карта на русской википедии неверна, т.е по этой карте область Уусимаа сейчас собой представляет 17+18 область.
Сделал временный релейшин temp, с помощью него сегодня ночью попробую отконвертировать всю Финляндию.

Коллеги, подскажите мне, наивному человеку, Карты для Навитела, выкладываемые на Рамблере http://navitel.osm.rambler.ru/ собираются с помощью этих конфигов http://osm2navitel.googlecode.com/svn/trunk/ ?