Как определять движение/остановки объекта в GPS системе?
Добавляя функционал оповещения движения и остановок объекта, я задался вопросом: “а по какому именно критерию определять начало и конец движения?”
Объект периодически отправляя свои координаты, даёт их с погрешностью в несколько метров, потому для системы он движется всё время. А остановки на светофорах так же не являются существенными для отчётов.
Решение
Добавил булевый флаг “двигается/остановился” для объекта и с каждым добавлением новой точки проверяю одно из событий.
1. Если объект движется, то я проверяю случилась ли остановка и переключаю флаг в “остановился”.
2. Если объект стоит, то я проверяю произошло ли движение.
Чтобы не делать две проверки вместо одной. Мне надо проверять либо то, что он поехал, либо то, что он остановился.
Но интервалы и расстояния для срабатывания разные.
Чтобы нивелировать погрешность GPS приёмника, я ставлю срабатывание на случай, в котором объект проехал за 1 минуту 100 метров. Определение движения не моментальное. Реагируем на среднюю скорость выше 6 км/час.
А за остановку считаем тот случай, когда если объект проехал меньше 300 метров за 5 минут. Скорость стала ниже 3.6 км/час.
Начало и конец движения помечаются на карте зелёными и красными маркерами.
Чтобы действовал этот функционал, нужно, чтобы у объекта был включен параметр Alerts (Оповещения) и обязательно вписаны поля телефон и email.
Если заполнен в объекте заполнен email, то нотификации будет приходить по электронной почте, а если только номер телефона, то по SMS.