Как обнаружить отклонение в пути между наборами координат - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть данные координат (широта, длина) различных транспортных средств, едущих из аналогичного источника в аналогичный пункт назначения.

В некоторых случаях эти транспортные средства не следуют по обычному пути при переходе от источника к пункту назначения.Я пытаюсь найти те наборы координат, где есть изменение от стандартного пути.

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

Я немного знаю о расстоянии Хаусдорфа и сходстве Джекардда.Но я пытаюсь получить более эффективный способ, так как мой набор данных составляет около 1 ТБ.Кроме того, если есть простой способ сделать это с PostGis.Пожалуйста, предложите.

1 Ответ

0 голосов
/ 18 декабря 2018

Боюсь, для указанного количества данных QGIS не будет подходящим вариантом.Если вы решите использовать PostGIS, вы должны помнить о точности GPS ваших исходных данных.Я имею в виду, что даже если вы идете по одному и тому же маршруту два раза, вы не обязательно получите два одинаковых следа.

Однако самое первое, что я хотел бы рассмотреть при загрузке ваших данных в PostGIS, это упрощение (st_simplify()) это позволяет избавиться от ненужных вершин и, таким образом, повысить скорость дальнейших вычислений.

Далее я бы использовал st_buffer(), чтобы обернуть маршруты в буферы, чтобы допустить отклонение данных GPS в некотором допустимом диапазоне.

После этого с комбинацией st_intersection() и st_area() я бы измерил вероятность двух маршрутов на основе общей области двух буферов.

Итак, для трех примеров маршрутов enter image description here

Самый простой запрос

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

Я думаю, это похоже на то, с чего начать.

...