Боюсь, для указанного количества данных QGIS не будет подходящим вариантом.Если вы решите использовать PostGIS, вы должны помнить о точности GPS ваших исходных данных.Я имею в виду, что даже если вы идете по одному и тому же маршруту два раза, вы не обязательно получите два одинаковых следа.
Однако самое первое, что я хотел бы рассмотреть при загрузке ваших данных в PostGIS, это упрощение (st_simplify()
) это позволяет избавиться от ненужных вершин и, таким образом, повысить скорость дальнейших вычислений.
Далее я бы использовал st_buffer()
, чтобы обернуть маршруты в буферы, чтобы допустить отклонение данных GPS в некотором допустимом диапазоне.
После этого с комбинацией st_intersection()
и st_area()
я бы измерил вероятность двух маршрутов на основе общей области двух буферов.
Итак, для трех примеров маршрутов
Самый простой запрос
select st_area(st_intersection(st_buffer(r1.geom,0.001),st_buffer(r2.geom, 0.001)))/st_area(st_buffer(r1.geom, 0.001)) as "blue2red",
st_area(st_intersection(st_buffer(r1.geom,0.001),st_buffer(r3.geom, 0.001)))/st_area(st_buffer(r1.geom, 0.001)) as "yellow2red",
st_area(st_intersection(st_buffer(r2.geom,0.001),st_buffer(r3.geom, 0.001)))/st_area(st_buffer(r2.geom, 0.001)) as "blue2yellow"
from route r1
join route r2
on r2.name='blue'
join route r3
on r3.name='yellow'
where r1.name='red'
возвращает
blue2red yellow2red blue2yellow
0.495408079 0.641252527 0.688753036
Я думаю, это похоже на то, с чего начать.