Для построения маршрута в транспортной сети, хранящейся в SpatiaLite, можно воспользоваться соответствующими встроенными средствами, которые будут прокладывать маршрут по алгоритму Дейкстры.

Предварительно нужно создать некоторые вспомогательные данные (уже сделано в предоставляемом файле). Будет создана виртуальная таблица netedge_net и несколько больших блобов в таблице netedge_net_data.

Найти точки начала и конца маршрута

Это задача обратного геокодинга, найти ребро транспортной сети, ближайшее к указанным точкам.

От точки (73.317810, 54.983779): http://maps.yandex.ru/?text=54.983779,73.317810

select e.id_start, e.id_finish, Distance(MakePoint(73.317810, 54.983779, 4326), e.geom)
from netedge e
order by 3
limit 1;
id_startid_finishDistance
19050180560.000196

До точки (73.391646, 54.976827): http://maps.yandex.ru/?text=54.976827,73.391646

select e.id_start, e.id_finish, Distance(MakePoint(73.391646, 54.976827, 4326), e.geom)
from netedge e
order by 3
limit 1;
id_startid_finishDistance
14326143270.000406

Построить маршрут

Возьмем идентификаторы начальных точек найденных ребер.

select * from netedge_net
where NodeFrom = 19050 and NodeTo = 14326;

Результатом будет таблица, первая строка которой содержит итоговые данные о маршруте, а последующие — идентификаторы вершин и ребер построенного маршрута.

AlgorithmArcRowidNodeFromNodeToCostGeometry
DijkstraNULL19050143263580.000000BLOB sz=1200 GEOMETRY
Dijkstra27815190501800850.000000NULL
...
Dijkstra666140151432680.000000NULL

Блоб в первой строке является географическим представлением маршрута и выглядит примерно так:

 

Attachments: