Хм, насколько я понимаю - гугловская подложка - это просто картинка, без векторных данных? Аналоги ОСМвоских way приходится поверх них рисовать алгоритмом каким-нибудь?
Из ОСМ можно дергать сразу векторные данные, “порубленные” на сегменты - как “выглядят” данные изнутри, можно увидеть в любом редакторе, например нажав на “правка” на http://www.openstreetmap.org
Хотя подробностей как это завернуть на практике, я не подскажу, к сожалению
Похожую проблему испытывают и создатели “dorogy.net”: http://dorogy.net/#ci/ideas/popular/37531/comments (нажать кнопку с картинкой “Feedback” слева)
Они используют исключительно osm-данные. Соответственно, сегментация соответствует сегментации в OSM.
Яндекс-пробки, похоже, просто повторяет контур своих векторных данных. Если дорога с двухсторонним движением - рисует две линии по краям дороги, если с односторонним - по любому краю дороги. Сегментация у них, похоже, тоже по векторным участкам, а не динамическая.
В osm для дорог обычно только один way (на дорогах с разделителем - рекомендуются две полосы, на каждой из которых oneway=yes). Ещё, бывает, указывают количество полос: http://wiki.openstreetmap.org/wiki/Uk:Key:lanes
Боюсь, не все так просто. Либо вам придется использовать какую-то надстройку для работы с гео-данными в монго, либо придется использовать постгре с постгисом, в которых линия, ближайшая к точке находится одним запросом.
Самый очевидный путь в вашем случае - найти ближайшие точки к заданной и после этого уже найти среди линий, в которые входят эти точки, самую подходящую - не всегда будет давать верные результаты (бывает, что на ровных дорогах точки ставят раз в километр, например, а в пределах города можно попасть на соседнюю улицу вместо текущей, если мы стоим ровно между двумя ее точками)