Я сделал себе скрипт, чтобы импортировать из osm в mongoDB, там можно делать что угодно довольно просто. Бью пути на сегменты (между 2 точками), считаю для них веса, дальше буду пробовать алгоритмы трассировки.

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

db.way.find().forEach(function(w) {
    var nodes = w.nodes.map(function(v) { return v.ref }), // make nodes array of `ref` attributes of nodes in the ways
        from = nodes.slice(0, nodes.length - 1), // first nodes of segments are all but the last node
        to = nodes.slice(1); // last nodes of segments are all but the first node
    /* if nodes were [1, 2, 3], I need [1, 2] and [2, 3] to make [[1, 2], [2, 3]] */
    var zip = function(v) { // pop from both `from` and `to` arrays and make them a segment with way's id, way's tags
            db.segments.save({way: w.id, tags: w.tags, from: from.shift(), to: to.shift()});
        };
    from.map(zip); // map is quicker than the `for` loop
});

Работать с базой данных на JavaScript - это колоссальное облегчение участи программиста!