[Статья] Пешеходная навигация - Делаем карту для пешеходов

А если программа не имеет режим пешеход? Она будет строить маршрут как машине - с запретами…

Alexandr Zeinalov, в гармине для рестрикшена указывается, на какие типы транспорта он распространяется. Сейчас relation=restriction на пешеходов не переносится.
В навителе, как я понял, рестрикшен действует на всех.

Это я как раз к вопросу о --norestrictions

Ntkiller У тебя хорошие инструкции! Чтобы они не съехали в конец форума и не затерялись где-то на его дне - советую перенести их на странички вики. А ссылочки на них мы уж понатыкаем…

В вики будет перенесено когда будет вторая-третья версия - сначала баги отловим)

Ntkiller, вам просто необходимо поправить в вики раздел про установку ActivePerl в статье http://wiki.openstreetmap.org/wiki/RU:Osm2mp :slight_smile:
Ну и ждем отдельной статьи о пешей навигации в Навител!

ВТОРАЯ ВЕРСИЯ

Многие сталкивались с проблемой выбора навигационной программы - идеального продукта нет. А для пешехода тем более… Поэтому я решил найти универсальный метод применимый почти для любой программы. И этот метод был найден. Метод применим для любых программ где мы можем создать свою карту(Navitel, Rusa…)

Проблема пешеходной навигации заключается в том, что навигационные программы строят маршрут по правилам. Включение режима пешехода (где он есть) ситуации не меняет(Исключение Garmin). Большинство программ разрешает пешеходу идти по дороге, но только в направлении движения данной дороги. Т.е. если дорога односторонняя, то и пешеход может идти только в одну сторону. Но если для машины это правильно, то для пешехода нет понятия “встречная”.
Пример. Есть дорога, через нее проходит пешеходный переход, нам надо ее перейти. По логике нам надо подойти к пешеходному переходу и перейти дорогу. Но у большинства программ другая логика - если начать маршрут против движения, то навигационная программа проложит маршрут по движению, т.е. сделает крюк до ближайшего разворота…
Если бы включение режима пешехода разрешало движение по встречной, то проблемы пешеходной навигации не было бы.

Т.к. мы не можем изменить программу, то мы будем менять карту. Именно в изменении карты и заключается мой метод.

Но тут появляется другая проблема - где взять карту? Если для автомобильной навигации все понятно - новые дороги появляются редко, да и проехать можно не везде, то для пешехода нужна карта с обозначением максимального количества тропинок/пешеходных дорожек/обходных путей, также эта карта должна быть всегда в актуальном состоянии – тропинки появляются и исчезают. В качестве такой карты я использую OpenStreetMap.

OpenStreetMap - карта, которую можно менять самому, можно сказать википедия в мире карт. Т.е. данные карты актуальны, а если вы найдете что-то новое или ошибку, то можете добавить/исправить карту. Отличный выбор для пешеходной навигации.

OSM-файлы с отдельными регионами можно брать здесь:
http://gis-lab.info/projects/osm-export.html (3-й столбец(osm xml))
Данные обновляются ежедневно. Т.е. если вы вечером внесли изменения в карту, то утром уже будет файл с вашими изменениями.

Для преобразования карты в польский формат(mp) есть скрипт на перле osm2mp.pl написанный liosha. Также есть его исполняемая версия(exe), но на момент написания статьи была только старая версия. При использовании exe пропустите раздел Установка ActivePerl

Про установку ActivePerl написано здесь http://wiki.openstreetmap.org/wiki/RU:Osm2mp
Установка ActivePerl:
Если вы собираетесь использовать Perl-версию программы, то необходимо установить ActivePerl

  1. Скачиваем и устанавливаем ActivePerl - http://activestate.com/Products/activeperl/index.mhtml
  2. Дальше требуется установить некоторые модули, для этого запускаете Perl Package Manager
  3. Жмете Ctrl+1
  4. Дальше нам нужны следующие пакеты: Template-toolkit, Getopt-Long, Text-Unidecode, List-MoreUtils, Math-Polygon, Math-Geometry-Planar-GPC-Polygon. Часть из них уже установлена. Выбираете пакеты из списка, кликаете правой кнопкой мыши по пакету и смотрите - если есть пункт начинающийся на “Install”, то выбираете его.
  5. После того как отметите все необходимые пакеты, нажмите Ctrl+Enter (или File->Run Marked Actions)
  6. Нажмите yes если появится вопрос об установке пакетов.
  7. Закройте Perl Package Manager
  8. Зайдите в командную строку и введите perl -MCPAN -e “install Math::Polygon::Tree”
  9. Дальше начнется долгий процесс установки модуля Math-Polygon-Tree, дождитесь окончания
  10. Perl и все необходимые библиотеки установлены.

Рассмотрим изготовление карты Воронежской области для программы Навител(применимо и для других программ с некоторыми изменениями(частично описаны ниже)):

Если вы используете perl-версию, то сначала установите ActivePerl – описание выше.

I) Создание MP-карты (польский формат)

  1. Создаем папку в корне диска, называем ее MapNav (Название может быть любое, но без русских букв. В нашем случае D:\MapNav)
  2. Скачиваем Нужную область (voronezh.osm.bz2)
  3. Распаковываем любым архиватором, получаем файл с областью (voronezh.osm)
  4. Кладем файл в папку из п.1 (D:\MapNav)
  5. загружаем osm2mp.pl (http://osm2mp.googlecode.com/svn/trunk/osm2mp/osm2mp.pl) и кладем в туже папку
  6. загружаем header.tpl (http://osm2mp.googlecode.com/svn/trunk/osm2mp/header.tpl) и кладем в туже папку
  7. Далее берем poi.cfg для навитела (http://maps-by.googlecode.com/hg/configs/osm2mp-navitel/poi.cfg) и кладем в туже папку
  8. Далее берем poly.cfg для навитела (http://maps-by.googlecode.com/hg/configs/osm2mp-navitel/poly.cfg) и кладем в туже папку
  9. Редактируем poly.cfg:
    Открываем WordPad-ом и меняем все 0x48 на 0x16 - На момент написания статьи в файле неправильно описаны пешеходные дорожки. Затем превращаем односторонние дороги в двусторонние - находим что-то похожее на RouteParams=speed,class,oneway,toll,emergency,delivery,car,bus,taxi,foot,bike,truck, после чего идет список дорог, нас интересует последние последовательности цифр, например:
    highway motorway r 0x01,2 0 4 6,4,1,0,0,0,0,0,0,0,0,0
    В этом случае нас интересует 6,4,1,0,0,0,0,0,0,0,0,0
    Нужно изменить 3-ю цифру(в примере выше - 1) на 0 Проделываем это для всех дорог(около 20 дорог из них односторонних(3-я цифра равна 1) около 5). Сохраняем изменения.
  10. Теперь запускаем osm2mp.pl со следующими параметрами:
    osm2mp.pl –norestrictions --nooneway --navitel voronezh.osm > foot.mp
    В данном случае voronezh.osm - osm-файл области, а foot.mp - имя файла для генерируемой карты.
  11. Проверим правильность редактирования фала poly.cfg, для этого откроем получившийся файл из предыдущего пункта(foot.mp) И попробуем найти там DirIndicator, если его нет в файле, то все дороги двусторонние. Если есть, то заново начинаем с пункта 9. Далее попробуем найти 0x48 если вдруг они остались, то их нужно заменить на 0x16
  12. Теперь у нас есть карта в польском формате для Навитела.

ОТЛИЧИЯ ДЛЯ ДРУГИХ ПРОГРАММ:

  1. В пункте 11 не нужен параметр --navitel
    Запуск osm2mp.pl --norestrictions –nooneway voronezh.osm > foot.mp
  2. Требуются другие Файлы poly.cfg и poi.cfg
    Для Гармин можно взять тут:
    http://osm2mp.googlecode.com/svn/trunk/osm2mp/poi.cfg
    http://osm2mp.googlecode.com/svn/trunk/osm2mp/poly.cfg

II) Изготовление карты из MP

Далее берем конвертор для вашей навигационной программы, в случае Навитела это GPSMapEdit.

  1. Скачиваем GPSMapEdit (http://geopainting.com/ru/)
  2. Открываем в нем нашу карту foot.mp
  3. Делаем экспорт карты в формат Navitel 3.2.6 (File->Export->Navitel 3.2.6)
  4. Теперь у нас есть пешеходная карта для Навител 3.2.6

III) Загружаем карту в навигатор и можно использовать.

Это вторая версия статьи, в дальнейшем она будет поправлена и дополнена. Автором статьи являюсь я(Ntkiller). При копировании статьи ссылка на автора обязательна. Если есть какие-либо вопросы/предложения - пишите, постараюсь ответить.

По возможности вместе со статьей выложу готовые osm2mp.pl, poly.cfg

Кто пробовал этот метод для навитела? Не могу понять в чем проблема - поиск не хочет работать…

Выложил готовые poi.cfg и poly.cfg на GoogleCode. Скоро сделаю статью в вики.

ТРЕТЬЯ ВЕРСИЯ

Многие сталкивались с проблемой выбора навигационной программы - идеального продукта нет. А для пешехода тем более… Поэтому я решил найти универсальный метод применимый почти для любой программы. И этот метод был найден. Метод применим для любых программ где мы можем создать свою карту(Navitel, Rusa…)

Проблема пешеходной навигации заключается в том, что навигационные программы строят маршрут по правилам. Включение режима пешехода (где он есть) ситуации не меняет(Исключение Garmin). Большинство программ разрешает пешеходу идти по дороге, но только в направлении движения данной дороги. Т.е. если дорога односторонняя, то и пешеход может идти только в одну сторону. Но если для машины это правильно, то для пешехода нет понятия “встречная”.
Пример. Есть дорога, через нее проходит пешеходный переход, нам надо ее перейти. По логике нам надо подойти к пешеходному переходу и перейти дорогу. Но у большинства программ другая логика - если начать маршрут против движения, то навигационная программа проложит маршрут по движению, т.е. сделает крюк до ближайшего разворота…
Если бы включение режима пешехода разрешало движение по встречной, то проблемы пешеходной навигации не было бы.

Т.к. мы не можем изменить программу, то мы будем менять карту. Именно в изменении карты и заключается мой метод.

Но тут появляется другая проблема - где взять карту? Если для автомобильной навигации все понятно - новые дороги появляются редко, да и проехать можно не везде, то для пешехода нужна карта с обозначением максимального количества тропинок/пешеходных дорожек/обходных путей, также эта карта должна быть всегда в актуальном состоянии – тропинки появляются и исчезают. В качестве такой карты я использую OpenStreetMap.

OpenStreetMap - карта, которую можно менять самому, можно сказать википедия в мире карт. Т.е. данные карты актуальны, а если вы найдете что-то новое или ошибку, то можете добавить/исправить карту. Отличный выбор для пешеходной навигации.

OSM-файлы с отдельными регионами можно брать здесь:
http://gis-lab.info/projects/osm-export.html (3-й столбец(osm xml))
Данные обновляются ежедневно. Т.е. если вы вечером внесли изменения в карту, то утром уже будет файл с вашими изменениями.

Для преобразования карты в польский формат(mp) есть скрипт на перле osm2mp.pl написанный liosha. Также есть его исполняемая версия(exe), но на момент написания статьи была только старая версия. При использовании exe пропустите раздел Установка ActivePerl

Про установку ActivePerl написано здесь http://wiki.openstreetmap.org/wiki/RU:Osm2mp
Установка ActivePerl:
Если вы собираетесь использовать Perl-версию программы, то необходимо установить ActivePerl

  1. Скачиваем и устанавливаем ActivePerl - http://activestate.com/Products/activeperl/index.mhtml
  2. Дальше требуется установить некоторые модули, для этого запускаете Perl Package Manager
  3. Жмете Ctrl+1
  4. Дальше нам нужны следующие пакеты: Template-toolkit, Getopt-Long, Text-Unidecode, List-MoreUtils, Math-Polygon, Math-Geometry-Planar-GPC-Polygon. Часть из них уже установлена. Выбираете пакеты из списка, кликаете правой кнопкой мыши по пакету и смотрите - если есть пункт начинающийся на “Install”, то выбираете его.
  5. После того как отметите все необходимые пакеты, нажмите Ctrl+Enter (или File->Run Marked Actions)
  6. Нажмите yes если появится вопрос об установке пакетов.
  7. Закройте Perl Package Manager
  8. Зайдите в командную строку и введите perl -MCPAN -e “install Math::Polygon::Tree”
  9. Дальше начнется долгий процесс установки модуля Math-Polygon-Tree, дождитесь окончания
  10. Perl и все необходимые библиотеки установлены.

Рассмотрим изготовление карты Воронежской области для программы Навител(применимо и для других программ с некоторыми изменениями(частично описаны ниже)):

Если вы используете perl-версию, то сначала установите ActivePerl – описание выше.

I) Создание MP-карты (польский формат)

  1. Создаем папку в корне диска, называем ее MapNav (Название может быть любое, но без русских букв. В нашем случае D:\MapNav)
  2. Скачиваем Нужную область (voronezh.osm.bz2)
  3. Распаковываем любым архиватором, получаем файл с областью (voronezh.osm)
  4. Кладем файл в папку из п.1 (D:\MapNav)
  5. загружаем osm2mp.pl (http://osm2mp.googlecode.com/svn/trunk/osm2mp/osm2mp.pl) и кладем в туже папку
  6. загружаем header.tpl (http://osm2mp.googlecode.com/svn/trunk/osm2mp/header.tpl) и кладем в туже папку
  7. Далее берем poi.cfg для навитела (http://osm2foot.googlecode.com/files/poi.cfg) и кладем в туже папку
  8. Далее берем poly.cfg для навитела (http://osm2foot.googlecode.com/files/poly.cfg) и кладем в туже папку
  9. Теперь запускаем osm2mp.pl со следующими параметрами:
    osm2mp.pl –norestrictions --nooneway --navitel voronezh.osm > foot.mp
    В данном случае voronezh.osm - osm-файл области, а foot.mp - имя файла для генерируемой карты.
  10. Теперь у нас есть карта в польском формате для Навитела.

ОТЛИЧИЯ ДЛЯ ДРУГИХ ПРОГРАММ:

  1. В пункте 9 не нужен параметр --navitel
    Запуск osm2mp.pl --norestrictions –nooneway voronezh.osm > foot.mp
  2. Требуются другие Файлы poly.cfg и poi.cfg
    Для Гармин можно взять тут:
    http://osm2mp.googlecode.com/svn/trunk/osm2mp/poi.cfg
    http://osm2mp.googlecode.com/svn/trunk/osm2mp/poly.cfg

II) Изготовление карты из MP

Далее берем конвертор для вашей навигационной программы, в случае Навитела это GPSMapEdit.

  1. Скачиваем GPSMapEdit (http://geopainting.com/ru/)
  2. Открываем в нем нашу карту foot.mp
  3. Делаем экспорт карты в формат Navitel 3.2.6 (File->Export->Navitel 3.2.6)
  4. Теперь у нас есть пешеходная карта для Навител 3.2.6

III) Загружаем карту в навигатор и можно использовать.

Это третья версия статьи, в дальнейшем она будет поправлена и дополнена. Автором статьи являюсь я(Ntkiller). При копировании статьи ссылка на автора обязательна. Если есть какие-либо вопросы/предложения - пишите, постараюсь ответить.

С глюком поиска разобрался - надо было проиндексировать карту.

Дороги некоторых категорий не предусматривают движения пешеходов ни в каком виде. Не знаю как по правилам, но по факту - точно.

На МКАД - пешеходы только могут появляться в районе остановок и переходить по пешеходному мосту. в принципе можно как то двигаться в районе канавы между отбойником и забором, но не в любую погоду.

3-е транспортное - там где по улицам оно идёт - можно, где на эстакадах с риском для собственной задницы.

Да и в протяжённых туннелях нельзя.

Мост на Воробъёвых горах сделали без тротуара по основной проезжей части (там до этого был роскошный тротуар пол-метра высотой и 2 шириной - в любую погоду можно было идти - все брызги не долетали до тебя) есть в принципе, пешеходные мостки на уровне станции метро, но чтобы на них попасть надо попасть на территорию Лужников, а там режим пропуска зависит от охраны - в принципе пускают, но если мероприятие какое проходит - хрен, со стороны собственно Воробъёвых гор проход на к помосткам заварен всякими железяками.

Новая Рига, там где она автомагистраль, заполнена отбойниками и пешеходного движения не предусматривает.

В принципе, это можно решать foot=no

И как бы не понятно как быть с тротуарами, на радостях многие бросятся их рисовать, а по технологии навигатора будет что-то вроде “дойдите до безымянного вея через 100 метров, пройдите по безымянному вею направо 400 метров” и подобная хрень.

Самому интересен вопрос тротуаров - рисовать их или нет? Есть общепринитая практика?

если нет необходимости - не рисовать.

Рисовать, если есть желание. Если нет - не рисовать рисовать не тротуары :slight_smile:
Я рисовал, рисую и рисовать буду :slight_smile:
http://www.openstreetmap.org/?lat=53.86959&lon=27.64744&zoom=17&layers=B000FTF

Мое мнение - лучше не рисовать тротуары, параллельные улицам.
Во-первых, повышенная погрешность определения координат в городе приводит к тому, что навигатор может определить свое положение как на проезжей части, так и на тротуаре (который может быть двусторонним вдоль односторонки, без запрета поворотов и т.п.).
В-вторых, движение “по улице” для пешехода все-таки означает движение “по тротуару вдоль улицы”.
А вот тротуары и дорожки, которые позволяют пешеходу “срезать углы”, рисовать можно и нужно, причем соединяя их с дорогами, иначе для пешеходной маршрутизации они бесполезны, например: http://osm.org/go/0t2exO4_0

Если навигационная программа пытается вести человека в режиме автонавигации по пешеходным дорогам - это, извините, нехорошая программа. И править надо именно ее. Тротуар возле дороги есть? есть. Если рендерер в виде навигатора не умеет с ними правильно обращаться - это проблема рендерера, не базы данных. А для рендерера мы не рисуем :slight_smile:

Komяpa, а ты обозначаешь ВСЕ места, где с тротуара можно сойти на дорогу?

Вопрос аналогичен “а вы обозначаете ВСЕ места, где можно проехать на автомобиле?”.

Если возможность сойти на дорогу есть - обозначаю. Как и highway=crossing на зебрах.

Если ради этого придётся идти по нетоптанному газону… не обозначаю :slight_smile:

Даже если просто регулярно “втыкать” тротуар в дворовые проезды (про которые тоже забывать не стоит) - роутинг получается вполне приемлимый.

Не совсем так. Навигатор - это не только рендерер, но и измерительный прибор со своими погрешностями. И я за то, что не нужно рисовать параллельные дорожки, которые чисто технически невозможно различить (достаточно посмотреть на ширину пучка треков вдоль хорошо “обкатанных” дорог).
Навигатору, который определил свое местоположение на тротуаре, в такой ситуации нужно либо лукавить, считая, что он все-таки на проезжей части, либо честно считать, что он на тротуаре (например, груз подвез к подъезду) и, следовательно, вести маршрут по тротуару.
Кстати, верно и обратное - пешеходный навигатор, определивший местоположение на проезжей части, вовсе не обязан привязывать себя к проходящему рядом тротуару.
Потому я и призываю рисовать только те тротуары, которые находятся за пределами основного пучка треков - хотя бы до тех пор, когда точность “бытового” навигатора не вырастет до метра в условиях города :slight_smile:

То, что навигатор привязывает себя к дороге или тротуару – совершенно не повод не рисовать тротуары. Навигатор в идеале должен понимать, где он находится (в зависимости от режима), либо спрашивать. Разнесённость дорог – тоже не показатель. Дороги могут быть разнесены на 10 метров, а навигатор ошибаться на 30. Рисовать надо всё, что есть. Если не лень, конечно :slight_smile: