GibsonG |
---|
По маршруту идет машина (полилиния). Если к примеру машина ушла с машрута я нахожу все точки не принадлежащие к маршруту.
|
Тогда выходит все несколько хитрее - если машина на одну точку отклонилась а на следующей вернулась, то это считается отдельным уходом? А какой длительности?
Я бы предложил для начала определить критерий принадлежности точки маршруту, затем отселектить последовательно ВСЕ точки с отдельной колонкой - признаком принадлежности (булевым). Должно получиться что-то вроде
moment | geodata | online
-----------------------------------------------
2014-12-28 16:10:05 | ....... | true
2014-12-28 16:10:10 | ....... | true
2014-12-28 16:10:15 | ....... | false
2014-12-28 16:10:20 | ....... | false
2014-12-28 16:10:25 | ....... | true
2014-12-28 16:10:30 | ....... | false
2014-12-28 16:10:35 | ....... | false
2014-12-28 16:10:40 | ....... | false
2014-12-28 16:10:45 | ....... | true
Для первого ухода интервал по идее должен быть 16:10:15 ... 16:10:25
Обработать это окнами может и можно, но имхо черезушно. Проще прогнать через функцию ( tstart out timestamp, tend out timestamp ), в которой что-то вроде
flag := true;
for r in select ..... loop
if flag and not r.online then
tstart := r.moment;
end if;
if not flag and r.online then
tend := r.moment;
return next;
end if;
flag := r.online;
end loop;