skyksandr
@skyksandr
Full Stack Ruby on Rails Developer

Как эффективно определить сближения траекторий с учетом времени?

Всем привет,

возникла достаточно интересная задача, но затрудняюсь с тем с какой стороны к ней подступиться.
Задача звучит следующим образом - дано 20-50 траекторий (~5 мин с частотой 5 Гц, длина до 10 км), необходимо найти фрагменты траектории, где было сближение ближе чем на 250 метров. Сближение необходимо учитывать с учетом времени, то есть, не просто фрагменты, которые находятся близко.
Ограничение - сервер 1 ядро, 1Гб RAM

Картинка:
fbf94e31e38d4209b371598dec2e7dc7.png

Подскажите, пожалуйста, направление в котором двигаться? Книги и статьи к прочтению - тоже полезная информация.
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ответы на вопрос 4
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
Двигаться по оси времени, считать взаимные расстояния во всех комбинациях. Для пар, где расстояние оказалось меньше 250 м записать пару и timestamp
{
    timestamp1: [ [id1, id2], [id35,id42], ... ],
    timestamp2: [ [id1, id2], [id23,id24], ... ],
}

Потом по этим данным можно снова вытащить нужные координаты и отобразить участки сближений.

Оптимизировать можно с учётом доп. условий – напр. известно, что это воздушные шары и их скорость не может превышать некое значение. И тогда если какой-то шар удалён на значительное расстояние, его можно не проверять следующие X секунд, например.
Ответ написан
@koronabora
Человек
Нужны текстовые "сырые" данные в виде: "точка" = "пользователь, время, координаты" (означает что в этот момент такой-то пользователь был по таким координатам)

Далее - проходим по всему временному интервалу, определяя, когда началось сближение и закончилось для всех возможных пар, занося их как две точки - начала и конца.

Далее - выводим результаты как удобно.
Ответ написан
x67
@x67
Ничего сложного для вашего сервера тут нет. Все считается очень быстро. Формализуете условия(сближение на 250 метров к примеру в течении минимум секунды и 4 тактов из 5, ибо шум, ошибки и тп), а потом прогоняете все данные. Уж как расстояние найти между двумя точками, вы наверное знаете. Еще важным фактором в решении задачи будет то, в каком виде представлены данные. Это координаты? Если так, то в какой системе координат? Может это скорости? Тогда нужно будет их еще и проинтегрировать и определиться с возможными ошибками и способами их нейтрализации.
На каком языке будете реализовывать?
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Кратко: находим расстояние в 3D-пространстве между всеми точками в один момент времени. При нахождении сближения - фиксируем "перелом" (триггер) и указываем в доп. массиве временную засечку и связки объектов (по-парно), находящихся рядом на расстоянии меньшем, чем 250м.
Бонус (формула расстояния для lat/lon): Calculate distance, bearing and more between Latit...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы