25 февраля 2010 г.

Автомобильная навигация

Так получилось, что некоторе время назад я перебрал очень много (возможно - все :) ) автомобильных навигационных программ для коммуникатора (КПК): от уже написанных до программ, находящихся в состоянии ранней разработки. Искал кое-что определённое, что сейчас не важно.
Буквально сразу в начале поиска, я перестал пытаться разбираться в программе и сразу от неё отказывался, если для её установки и запуска необходимо было долго разбираться (много читать :) ). Таким образом, начинаем формировать требования к идеальной навигационной программе:
  • Программа должна легко (прозрачно) устанавливаться и запускаться, т.е. в идеале установка должна проходить по стандартному алгориму установки программ для текущей OS.
Вторым шагом в большинстве программ была необходимость в установке карт. Вроде бы такая простая операция, как копирование, в некоторых программах превращалась в сущее мучение, особенно если карты и программа - от разных авторов.
  • Карты в программу должны устанавливаться ещё проще, чем сама программа.
Навигационная программа имеет связь с GPS. Следовательно, программа должна знать текущее местоположение пользователя. Если она знает местоположение, то она должна уметь скачать нужную карту с Internet'а и самостоятельно установить её. Пользователю можно только задавать уточняющие вопросы, но никак не заставлять его делать всю работу. Уточняющий вопрос, это например вопрос о том, скачать ли карту прямо сейчас, (с помощью доступного в текущий момент интернет-соединения) или подождать, когда пользователь подключит другой способ связи с интернетом.
Например, в одной из опробованных мной программ, небыло вообще такого понятия, (ну или почти небыло ;) ) как "скачивание и установка карт" - всё делалость автоматически. Конечно, таким образом повышаются расходы на интернет, но, согласитесь, что удобней этого ничего нет.

Из предыдущих пунктов следуют:
  • Программа и карты должны также прозрачно обновляться.
Одним из самых важных показателей качества программы является качество используемых ею карт:
  • Дорожная обстановка на картах (например, ремонт дороги или установка новых знаков) должна обновляться максимально быстро.
Сейчас это делается несколькими способами:
- только обновление карты целиком, обычно очень редко - ни о какой точности тут и говорить не приходится;
- обновление карты целиком + обновления дорожной обстановки, высылаемые пользователям отдельно довольно часто - хороший вариант;
- возможно, есть ещё способы, как в упомянутом мной ранее примере, когда пользователь работает постоянно с актуальной картой, хранящейся на сервере - идеальный вариант, но уже с некоторой избыточностью.

Я считаю, что второго варианта более чем достаточно, при условии что обновления дорожной обстановки высылаются сразу, как только они были внесены в систему.

Но передача исправлений пользователям - только половина работы:. Основное - это нахождение изменений дорожной обстановки и их исправление.
Абсолютно все программы, которые я посмотрел, выполняют это только "ручками", т.е. люди каким-либо образом находят эти ошибки и вручную исправляют их на карте.
Сколько проходит времени между обнаружением и исправлением - достаточно, что бы ещё много пользователей "попали" на эту ошибку.
Я же считаю, что:
  • Программа должна уметь автоматически передавать ошибки в дорожной обстановке.
Как это можно реализовать:
- Пользователи в автоматическом режиме передают треки (маршруты), если их нет на карте или они не обладают необходимой точностью, таким образом прорисовываются новые дороги;
- Если пользователь едет по предлагаемому программой маршруту, но маршрут ведёт так, что пользователь должен нарушить ПДД, то пользователь съезжает с маршрута, а программа автоматически передаёт на сервер, что предложенный манёвр не выполним;
- Конечно, для уточнения, программа может уточнять некоторые детали у пользователя, как например, в последнем случае, действительно ли имеет место нарушение ПДД или пользователь решил ехать другим маршрутом. В любом случае, в этом процессе роль пользователя сводится к нажатию одной кнопки (причем нажать её можно после остановки транспортного средства, т.е. производить накопление данных - для безопасности) вместо того, чтобы заставлять пользователя запоминать ошибочное место и потом вводить (описывать) его где-либо ещё.
- Конечно, необходим дополнительный узел (сервер), который бы собирал эти данные и производил их обработку.

Думаю, продолжение следует ...