Как создать мастер-трек из большого набора координат, полученных от gps-трекеров?

Есть самописная система мониторинга транспорта.
Есть несколько сотен автомобилей, оснащенных gps-трекерами.
Все автомобили катаются из Москвы в регионы. Представьте карту Москвы и области, основные трассы, выходящие с МКАДа и идущие во Владимир, Екатеринбург, Красноярск, Питер, Краснодар и т.д. Десятки и сотни городов.
За год работы в системе накопилось несколько десятков миллионов координат. Если отобразить их на карте, то они в основном лягут на трассы, о которых говорилось выше. Иногда будет "мусорные координаты" - машина под крышей заправки, либо еще какие-то помехи, объез пробок. Например, в Питер из москвы можно ехать через Чехов. Узнали об этом только после запуска мониторинга. "Мусора" хватает.
Задача в следующем: научить систему мониторинга самостоятельно определять сход с основного/обычного маршрута движения. Для этого хочется все существующие точки обработать и получить т.н. мастер-трек. А потом искать ближайшую координату из мастер-трека к получаемой от трекера из машины, и если расстояние больше определенного 2 раза подряд, считать это сходом с маршрута.
Сейчас координаты хранятся в виде XX.XXXXXX и YY.YYYYYY. Т.е. точность шесть знаков после запятой. Мастер-трек должен содержать пять знаков после запятой.
Алгоритм должен отсеивать "мусор", т.е. если вокруг точки, которую мы рассматриваем в радиусе пяти знаков после запятой нет других точек или их меньше определенного количества, то мы считаем точку мусором и не учитываем в расчетах.
Т.е. начать можно с простого обрубания шестого знака после запятой. Потом "убираем" мусорные точки. А далее из оставшихся надо посчитать мастер-трек.
Много вариантов перепробовал и понял, что идеальный вариант - медиана. Но как ее применить к координатам, не знаю.
Коллеги, есть идеи?
  • Вопрос задан
  • 1270 просмотров
Пригласить эксперта
Ответы на вопрос 2
Подумайте над таким вариантом:
1) руками на карте грубо рисуете геометрию области (не обязательно прямоугольную), где фигурирует четко один трек (чтобы выделить массив точек, относящихся к одному треку). Врядли это просто сделать автоматически
2) бьете всю обозначенную вручную область на небольшие квадраты. Для каждого из таких квадратов будем искать среднее значение. Вот как раз тут и можно учесть тот самый шестой знак - т.е. построить квадраты так, чтобы в координатах границ квадрата шестой знак был равен нулю (т.е. на каждый квадрат будет 10 возможных значений реальной координаты).
3) для каждого квадрата делаем выборку координат из базы (если есть нормальный пространственный индекс, должно быть быстро). Если в квадрат не попала ни одна координата, пропускаем его (таких будет большинство, но их будет тем меньше, чем точнее вы вручную выделили область одного трека). Если попала хотя бы одна (а лучше несколько) - считаем среднее значение. Это среднее значение становится частью мастер-трека.

Меняя размер вышеописанной "сетки" усреднения, можно либо уменьшать количество точек в мастер-треке, огрубляя определение схода с маршрута, либо увеличивать количество точек, также как и точность определения.
Ответ написан
@neomichi
Мое мнение:
1) Думаю Можно сократить данные если, к примеру отсеять ближайшие/одинаковые точки при помощи кластеризации.
2)Численные Методы . Интерполяция.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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