А сколько приблизительно весит база с графом дорог России в ОСМ? Как часто происходят изменения? Насколько они масштабные обычно?
Изменения происходят ежесекундно, а конкретно в графе дорог РФ… Да черт его знает, может, раз в минуту, может, раз в 10 минут.
Вообще, вроде бы есть два основных варианта — поддерживать базу РФ в актуальном состоянии с помощью ежечасных, например, диффов, либо периодически выдирать из свежего дампа.
Насколько я знаю, отдельную выгрузку только с графом дорог (тем более России) никто не делает. Можно взять полную выгрузку России, например с gis-labа (по невероятному стечению обстоятельств на данный момент выгрузка недоступна), и с помощью osmosis
а отфильтровать по нужным тегам (highway=).
Как часто происходят изменения? Да постоянно, ежесекундно кто-то что-то где-то правит. Касаются ли эти изменения графа - вполне вероятно. Но очень уж масштабных изменений обычно нет.
-
- Щелкнуть на “ticker”
Я сделал себе скрипт, чтобы импортировать из 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 - это колоссальное облегчение участи программиста!
А сколько всего “рёбер” в графе дорог России?
Может кто-то знает, как это проверить не скачивая всю карту…
На карте этого нет. Только когда конкретно построишь граф, тогда и узнаешь. А зачем это знать?
Есть небольшая статистика по регионам.
Вот небольшой регион:
http://wowik.byethost7.com/routes/ru-yev/clusters.htm
Смотрим самый низ и видим, что все дороги вплоть до track включительно
6572 штук way
Общей длиной 7183.7 км
Смотрим повыше и видим, что Если track не включать, то
5039 штук way
Общей длиной 3840.1
и т.д.
Количество way это не совсем количество ребер, но что-то близкое.
- Если к way в середину приклеивается другой, то ребер три, а не два.
- Если два вея просто сцеплены друг с другом, без соединений с чем-либо, то это одно ребро. Например на них разная полосность или освещение.
А может и два, если важно, что скорость на них разная.
Вы что под ребром понимаете?
Совсем грубо число osm-веев с междугородними дорогами можно прикинуть полистав валидатор дорог от Вовика:
http://wowik.byethost7.com/routes/ru-sve/1.htm
Еще какие-то циферки вот тут вверху: http://wowik.byethost7.com/routes/ru-sve/clusters.htm
Попробовал прогнать свой конвертер по файлу https://download.geofabrik.de/russia-latest.osm.pbf
Если включить все автодороги до уровня track (т.е. кроме пешеходных), то всего там ~5.2 млн. отдельных way. С учётом связности наибольший кусок связанного графа включает в себя ~5.1 млн. отдельных way. Но это именно osm-ные way, до разбивки по перекрёсткам. С разбивкой получается ~11 млн. рёбер ненаправленного связанного графа у наибольшего куска. Для направленного графа рёбер получается ещё вдвое больше, ~21 млн.
Объединения последовательных цепочек рёбер не выполнялось (например там где дорога без ветвлений проходит через мост или разбита по какой-либо другой причине).