Sight Safari - пешеходный навигатор для туристов

Sight Safari - навигатор, который строит не самые короткие, а самые интересные пешеходные маршруты. Идущие мимо парков, дворцов и прочих достопримечательностей. Такой маршрут может быть процентов на 20-30 длиннее, зато будет гораздо интереснее прямого пути.

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

Из OSM берутся объекты с тегами типа tourism, historic и т.п., ранжируются по важности по эвристическому алгоритму на основании прочих тегов, затем для них строятся области видимости. После чего они начинают влиять на поиск путей и притягивать их к себе.

Веб-версия, круговой маршрут по Турку:

Андроид-приложение, небольшой маршрут по СПб:

Подробное описание алгоритма работы на Хабре:
Про извлечение достопримечательностей и простые маршруты: https://habr.com/ru/post/414433
Про круговые маршруты и генетические алгоритмы: https://habr.com/ru/post/445826

Есть веб-версия https://sightsafari.city
Есть **Android приложение **https://play.google.com/store/apps/details?id=city.sightsafari.android

Основное обсуждение идет в группе ВК https://vk.com/sightsafari

Если у кого есть идеи, пожелания или описания багов - велкам.

Если хотите попробовать в своем городе, а его нет в списке (хотя у нас уже больше 100 городов РФ и иностранных) - пишите, добавим.

По ощущениям, маршруты в Санкт-Петербурге строились бы лучше, если бы, во-первых, программой обрабатывался тег historic=heritage_building, а, во-вторых, дозволялось сильнее отклоняться от основного маршрута для осмотра достопримечательностей. Так, попадаются неподсвечиваемые historic=memorial + tourism=attraction, расположенные менее, чем в 50 метрах от проложенного маршрута (при этом имеется дорога, ведущая от основного маршрута к этой POI).

Спасибо за комментарий. Не очень понял, правда, что за historic=heritage_building. taginfo показывает что есть historic=heritage, но он редкий довольно. Мне лично в Питере он не попадался на глаза, хотя не могу сказать чтобы я так уж много в OSM копаюсь.

Про отклонение - там много соображений. Например есть ограничение на длину. В центре Питера всегда можно осмотреть еще больше интересностей, добавив к маршруту еще пару сотен метров, но в какой-то момент все-таки придется остановиться. Иначе маршрут станет уже в разы длиннее прямого пути или вылезет за лимит для кругового.

Иногда, правда, бывает что алгоритм недооценивает важность достопримечательности. Либо потому что на ней в OSM мало тегов (про то, как работает оценка, я писал в статье на хабре https://habr.com/ru/post/414433/), либо потому что я что-то не учел. Но это надо смотреть на конкретных примерах объектов. Буду благодарен за такие примеры, если есть.

  1. Проверил - оказалось, что historic=heritage_building в Санкт-Петербурге не очень распространён: надо понимать, меня сильно впечатлила неотмеченная сервисом дача Гаусвальд с name, wikidata и start_date=1898. Может, надо фиксировать все historic= и объекты со start_date<=1917? Сейчас, видимо, сервис обрабатывает только какие-то отдельные значения тега historic, а на год постройки не обращает внимания вовсе.
  2. historic=memorial + tourism=attraction + name= менее чем в 50 метрах от основного маршрута при наличии дороги рядом и при нахождении в прямой видимости, на мой взгляд, можно было бы хотя бы подсветить.
  3. barrier=turnstile + fee=yes не смущают программу - такое допущено умышленно или GraphHopper попросту не оперирует тегом fee?

Окей, спасибо за наводку, добавлю эти теги.

Не подсвечивает он потому, что там между дорогой и дачей куча зданий, которые блокируют видимость. Вот если точку подвинуть чуть левее то он начинает ее отображать в списке https://sightsafari.city/r/GYgklzmk. Так как видимость сейчас ограничивается только полигонами с тегом building. Хотя судя по панорамам Яндекса ее там все равно за деревьями не видно с этой улицы. Но тут уж ничего не поделаешь, алгоритм сильно приближенный. Кстати рельеф он тоже не учитывает, в Питере это не проблема, а вот в горной местности, говорят, дает много ложных срабатываний.

Про третье не понял, маршрут не проходит через отмеченный вами узел.

Жаль что данный навигатор работает только с ограниченным списком городов.
Видимо из-за ограничений мощностей сервера.
Можно ли как-то постройку маршрута перенести на фронт? Через тот-же wasm например.
Это бы сняло ограничения.

Если вам нужны какие-то конкретные города - пишите, добавим. Лучше писать в группе в соответствующей теме https://vk.com/topic-168028574_38506255
Перенос на фронт в ближайшее время не планируем, так как для работы алгоритма нужен довольно сложный препроцессинг, который занимает от пяти минут до часа (для какого-нибудь Парижа). Нужно выкачать OSM через overpass (а он может 500-600 мб занимать для крупного города), пропарсить его, найти достопримечательности, объединить похожие, рассчитать зоны видимости. В реальном времени или на медленных клиентских устройствах это не сделать.

Уточнения:

  1. После моего сообщения на дачу Гаусвальд добавили tourism=attraction - поэтому она начала подсвечиваться.
  2. По такому маршруту всё-таки остались вопросы. Менее чем в 50 метрах от него находится historic=memorial + tourism=attraction + name=, не закрываемая ни building, ни barrier. Не обязательно строить маршрут к этой точке и обратно, но подсветка этой точки, на мой взгляд, напрашивается.
  3. С момента моего последнего сообщения что-то изменилось либо в исходных данных, либо в Вашем алгоритме: раньше маршрут заводил через турникеты в метро и выводил через другой выход. И парк не подсвечивался.

Если вы про дуб Петра Великого - у него как раз радиус видимости в 50 метров стоит. Т.е. ваш маршрут буквально пару метров не дотянул до попадания в его зону видимости.
Все это ограничения эмпирического алгоритма определения видимости. Для подсчета дистанции видимости он использует в том числе размер достопримечательности. Предполагается, что точечные объекты можно разглядеть с меньшего расстояния, чем объемные (заданные Way или Relation). При этом однако точечные могут быть как совсем мелкие (граффити или мелкий монумент типа Чижика-пыжика, который и с десяти метров уже не особо разглядишь), так и вот целый дуб. Но из карты никак этого не поймешь, в итоге используется среднее значение буфера видимости, как раз где-то 50 метров.

Алгоритм уже давно принципиально не менялся, но возможно что кто-то подправил карту. В этом, как я считаю, одно из преимуществ Sight Safari (впрочем как и любого проекта на OSM данных) - если кого-то что-то не устраивает, он может это подправить в исходнике, сделав доброе дело для всего сообщества.

Про метро - я там стараюсь этого избегать, у меня отфильтровываются тоннели с уровнем ниже какого-то там значения (чтобы оставить подземные переходы, но убрать проходы по станциям метро). Возможно где-то поменяли этот уровень.

Насчёт 50 метров нужно взять паузу на размышления, давайте пока разбираться с конкретными парками.

Например, не ясно, почему не подсвечивается leisure=park + wikidata=

И турникетов метро сервис опять перестал бояться, при этом часть маршрута проходит даже не по footway, а по краю полигона railway=platform + area=yes + layer=-5.

Спасибо за примеры, погляжу в чем может быть дело.

Добавил heritage_building, сделал дополнительный фильтр для объектов подземки. Действительно странно, почему GraphHopper прокладывал путь по границе полигона с area=yes, ну теперь уже не будет - я теперь удаляю подземные платформы из OSM файла перед тем, как скормить его маршрутизатору.

В Иваново достопримечательные Файлы — именованные области данных на носителе информации

:laughing:
Скорее всего потому, что в OSM ссылка не на вики-страницу, а на файл с изображением почему-то. И при попытке распарсить и вытащить инфу получается запрос по теме Файлы.

Пока туристическая сфера бьется в агонии, добавляем новые фичи в наш навигатор.
Так как во многих городах теперь запрещено посещение парков, детских и спортивных площадок, мы добавили covid-режим, в котором эти объекты начинают отталкивать маршруты.

Интересно, что Яндекс карты уже тоже стали водить пешеходные маршруты в обход парков. А вот Google пока ничего не менял, в итоге его маршруты нынче чреваты штрафами.

Здравствуйте!
Несколько мыслей:

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

  2. Мне кажется, не хватает возможности отдельно отключить музеи из построения маршрута. Например, при построении пешеходного маршрута музеи не интересны, т. к. в здания заходить не предполагается. Сейчас музеи, видимо, являются скрытым подтипом какого-то отображаемого типа (“Культурный объект”?)

  3. В названии типа “Исторический объекты” сейчас есть опечатка.

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

  1. Да, этот баг я тоже заметил. Попробую поправить или само поведение, или описание.
  2. Музеи я добавил исходя из того, что они часто расположены в красивых зданиях, так что представляют культурный интерес даже снаружи. Не всегда, но достаточно часто. Подумаю насчет отдельной категории для них.
  3. Это поправлю