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