Рефераты - Афоризмы - Словари
Русские, белорусские и английские сочинения
Русские и белорусские изложения

Разработка автоматизированной системы расчета оптимального маршрута между городскими объектами для курьерской компании

Работа из раздела: «Программирование, компьютеры и кибернетика»

/

Введение

Тенденция к сближению мобильных и навигационных технологий сегодня заметна как никогда. Решение вопроса предоставления конечному пользователю мобильных устройств возможности получения, использования и обработки информации, связанной с их местоположением, является очень актуальной задачей.

Автоматизированные информационные системы, включающие в себя компонент мобильных навигационных технологий, применяются в самых разнообразных областях человеческой деятельности.

В современном мире часто приходится пользоваться услугами по доставке того или иного груза. Грузоперевозки оказывают незаменимую помощь в жизни нашего общества.

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

Любая компания, выйдя на определённые обороты, задумывается об автоматизации своей работы. У такого решения есть явные плюсы:

- внедрение нетривиальных алгоритмов оптимизации затрат;

- уменьшение рутинной нагрузки на сотрудников и ускорение их работы;

- создание, выравнивание и контроль планов работы.

Переходя от общего к частному, любая динамично развивающаяся курьерская фирма в целях повышения своей конкурентоспособности, так или иначе приходит к необходимости автоматизации некоторых аспектов своей деятельности. В данном случае на первый план выходят вопросы построения оптимальных маршрутов между городскими объектами, оценка времени, необходимого на доставку груза, контроль движения курьера по обозначенному пути. Вопрос решения данных задач и поднимается в проекте, что, безусловно, обуславливает его актуальность.

Цель проекта - разработка автоматизированной системы расчета оптимального маршрута между городскими объектами для курьерской компании.

Для достижения поставленной цели необходимо решить следующие задачи:

- провести анализ предметной области;

- определиться с функциональными требованиями к системе;

- выбрать способ реализации системы;

- подобрать необходимые инструменты для разработки;

- решить задачи, встающие при реализации той или иной функции;

- разработать интерфейс приложения;

- определить основополагающие элементы развертывания системы;

- провести технико-экономическое обоснование дипломного проекта;

- рассмотреть аспекты ее безопасности и экологичности.

Цель и задачи определили структуру дипломного проекта. В первой главе производится анализ предметной области. Во второй обосновывается выбор способа реализации системы. В третьей детально раскрываются функциональные требования к системе. В четвертой описывается этап разработки проекта: решаются ключевые задачи, создается графический интерфейс системы, выявляются основные аспекты развертывания системы. Две последние главы посвящены вопросам технико-экономическому обоснованию и безопасности и экологичности дипломного проекта.

Решением поставленных задач обеспечивается создание полноценной автоматизированной информационной системы, способной сократить временные затраты на организацию перевозок, их непосредственное выполнение, ведение контроля за их состоянием и как следствие - повышение качества услуг, оказываемых фирмой, и ее конкурентоспособности.

Автоматизированная система расчета оптимального маршрута между городскими объектами ориентирована на фирмы, которые стремятся оптимизировать и наилучшим образом управлять транспортными перевозками.

Создаваемый программный комплекс функционирует на базе коммуникаторов с операционной системой Android. Выбор данной платформы не случаен и обоснован в проекте.

Для разработки системы использовался язык Java. Были использованы комплект разработки программного обеспечения Java Development Kit, интегрированная среда разработки Eclipse, Android SDK, включающий в себя эмулятор работы реальных устройств и плагин Android Development Tools - расширение для интегрированной среды разработки, ускоряющее и упрощающее создание и отладку приложений. Основные характеристики выбранного инструментария и его преимущества так же раскрыты в дипломном проекте.

Для документирования основных вех разработки системы и структурированного представления выработанных артефактов использованы средства унифицированного языка моделирования - UML, языка графического описания для объектного моделирования в области разработки программного обеспечения. UML является языком широкого профиля, это открытый стандарт, использующий графические обозначения для создания абстрактной модели системы, называемой UML-моделью [9].

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

1. Анализ предметной области

Анализ предметной области является важнейшим этапом среди всех этапов жизненного цикла системы. Он оказывает существенное влияние на все последующие этапы, являясь в то же время наименее изученным и понятным процессом. На этом этапе, во-первых, необходимо понять, что предполагается сделать, а во-вторых, задокументировать выдвинутые предложения, так как если проектные требования не зафиксированы и не сделаны доступными для участников разработки, то они вроде бы и не существуют вовсе. При этом язык, на котором формулируются результаты анализа, должен быть достаточно прост и понятен.

Деятельность курьерской компании связана с оперативной доставкой того или иного груза из одной точки в другую. От того, насколько быстро выполняется заказ, напрямую зависит коммерческий успех фирмы. На скорость выполнения поставленных заданий влияет целый ряд факторов. Это, к примеру, возможность курьера быстро ориентироваться на местности и выбирать верный маршрут.

Назначая исполнителя, диспетчер обязан обзванивать всех сотрудников в поисках свободного и находящегося недалеко от места получения заказа работника. Согласитесь, гораздо удобнее иметь под рукой инструмент, позволяющий мгновенно оценить все трудовые ресурсы, не прибегая к долгим переговорам.

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

От того, как качественно решаются обозначенные выше проблемы, насколько оперативно в конечном итоге клиент получит товар, на прямую зависит коммерческий успех и репутация фирмы.

Определим проблемы, которые целесообразно решить по внедрении автоматизированной системы, определим их влияние на производственные процессы, а так же укажем преимущества внедрения АИС (Таблица 1, 2, 3).

Таблица 1 - Проблема планирования маршрута перевозок

Объект

Значение и характеристика

Проблема

Сложность планирования маршрута перевозок

Актер

Курьер

Следствие проблемы

Снижение скорости доставки товара, задержка выполнения заказа, потеря прибыли

Успешное решение

Автоматизация процесса поиска оптимального маршрута доставки

Таблица 2 - Проблема отсутствия визуального контроля перевозок

Объект

Значение и характеристика

Проблема

Отсутствие инструмента для визуального контроля перевозок

Актер

Диспетчер, Курьер

Следствие проблемы

Практическая невозможность отследить, где точно находится Курьер. Сложность координации.

Успешное решение

Создание АРМ диспетчера с возможностью удобного отслеживания местоположения Курьеров фирмы и мониторинга их деятельности и занятости.

Таблица 3 - Проблема затянутости отчетности курьеров

Объект

Значение и характеристика

Проблема

Затянута отчетность Курьеров перед Диспетчером

Актер

Диспетчер, Курьер

Следствие проблемы

Нерегулярный срыв планирования работ по доставке товара, увеличение времени доставки.

Успешное решение

Введение возможности быстрой установки статуса доставки, легкий доступ к централизованной телефонной книге компании

Видно, что внедрение АИС значительно увеличит качество и скорость предоставляемых услуг, создаст новые условия для развития фирмы и увеличит ее конкурентоспособность.

У системы существуют два основных пользователя: курьер и диспетчер. Диспетчер - работает над оформлением заказа и его корректировкой вместе с клиентом, распределяет задачи между курьерами, контролирует их исполнение в срок. Курьер доставляет груз в максимально возможный короткий срок и своевременно информирует Диспетчера о своей деятельности.

Внедряемая АИС предоставляет целый спектр возможностей:

1 упрощение работы пользователей благодаря удобному и эргономичному интерфейсу ввода данных и получения необходимой информации;

2 удобство планирования маршрута становится доступным вследствие разработанной навигационной системы;

3 формирование единой базы данных - все заинтересованные пользователи со своих рабочих мест имеют доступ к необходимой им информации;

4 назначение исполнителя и контроля работ прямо с рабочего места диспетчера;

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

Время, необходимое для обучения обычных пользователей - 3 рабочих дня (24 часа), для обучения продвинутых пользователей - 1 рабочий день (8 часов). Система должна быть способна поддерживать минимум 15 одновременно работающих пользователей, связанных с общей базой данных

Стоит отметить, что система является законченной независимой разработкой. В перспективе возможно использование системы в других фирмах, чья деятельность связана с планированием движения (экстренных службах, такси), где крайне важно снижение временных затрат на прохождение определенного пути.

2. Определение способа реализации

Перед тем, как приступить к разработке автоматизированной системы расчета оптимального маршрута необходимо определиться с целым рядом аспектов ее реализации, начиная с выбора аппаратной платформы, на базе которой разместится создаваемый программный комплекс. Здесь на первый план выступают следующие требования: устройство, обеспечивающее необходимый функционал должно обладать возможностью получения и отслеживания текущего местоположения пользователя, предоставлять необходимые вычислительные ресурсы для выполнения различных алгоритмических задач, иметь возможность выхода в интернет для получения и передачи данных. Кроме того, оно должно быть достаточно мобильным и взаимодействие с ним не должно мешать свободному перемещению по городскому пространству.

Целый ряд требований необходимо предъявить и к выбору операционной системы - комплекса программных средств, предназначенных для управления устройством, вычислительными процессами, эффективного распределения вычислительных ресурсов, а так же выступающих как интерфейс между устройствами вычислительной системы и прикладной программой. Необходимо детально проанализировать рынок существующих операционных систем и выявить наиболее подходящую из них для реализации поставленной задачи.

Особый акцент стоит сделать на выборе средств, применяемых для разработки и тестирования. Тот факт, что создаваемая система должна функционировать на мобильном устройстве, в разы усложняет эти задачи. Разработку удобно вести с использованием персонального компьютера и для отладки понадобятся специальные программы-эмуляторы, ведь использование в этих целях реальных устройств весьма затратно и проблематично. На финальных этапах тестирование должно проводиться уже на реальных аппаратах в полевых условиях. Должен быть выбран современный объектно-ориентированный язык программирования, работающий с базами данных, динамично развивающийся в данное время и предоставлять для разработки все необходимые средства.

Согласно анализу требований, необходимо выделить основные функции, которые должна выполнять система. Разрабатываемый программный комплекс должен декомпозироваться на модули, главным образом, по принципу реализации данных функций.

Необходимо решить, как создаваемые модули будут друг с другом взаимодействовать в плане передачи управления и работы с общей базой данных. Обращение к ним пользователем должно осуществляться посредством детально проработанного графического интерфейса. Задачи должны выполняться без задержек и за приемлемое в рабочих условиях время.

2.1 Выбор аппаратной платформы

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

Во-первых, устройство должно предоставлять оперативный и надежный доступ к определению текущего положения. Речь здесь идет не только о наличии GPS чипсета - процессора обеспечивающего обработку спутникового сигнала и GPS-антенны настроенной на частоты, на которых передаются данные навигационных спутников. Широко используемые приемники GPS отлично работают под открытым небом, но плохо принимают сигнал вблизи зданий и абсолютно не принимают внутри них. В условиях городской инфраструктуры эта проблема часто встает на передний план. Поэтому желательно, чтобы устройство имело возможность определения местоположения и в выше обозначенных проблемных условиях.

Во-вторых, необходимо наличие довольно мощного процессора и оперативной памяти для осуществления необходимых вычислений и достижения необходимого быстродействия. Встроенная память, используемая для хранения операционной системы, программного комплекса и пользовательских данных должна быть достаточно большой. Желательно наличие слота для подключения карты памяти в целях увеличения объема памяти.

В-третьих, важна поддержка стандарта GSM для оперативной организации мобильной сотовой связи и наличие GPRS-модуля для обеспечения пакетной передачи данных по протоколу TCP/IP.

В-четвертых, устройство должно так же обладать хорошим дисплеем для отображения информации в дневное и ночное время. Батарея должна держать заряд довольно длительное время.

Всем перечисленным требованиям в достаточной степени удовлетворяют цифровые устройства, называемые коммуникаторами или смартфонами.

Смартфоны отличаются наличием достаточно развитой операционной системы, открытой для разработки программного обеспечения сторонними разработчиками. В настоящее время на рынке представлен целый ряд операционных систем для мобильных устройств. Из него необходимо выбрать наиболее надежный, динамично развивающийся вариант. Кроме того для выбранной операционной системы должны существовать удобные и развитые инструменты разработки приложений.

О выборе операционной системы речь пойдет далее.

2.2 Выбор операционной системы

Операционная система Symbian, безоговорочно лидирующая на рынке до 2010 года в настоящее время почти полностью утратила свои позиции. Сперва Sony Ericsson объявил о прекращении использования Symbian, чтобы сосредоточиться на выпуске устройств под управлением Android. Следом за ним Samsung прекращает поддержку Symbian и переходит на использование Android, Windows Phone 7 и Bada, ОС собственной разработки.

Весной 2011 года сама Nokia объявила о том, что Windows Phone 7 станет ключевой платформой для смартфонов, однако компания не планирует отказываться от платформы Symbian и станет поддерживать мобильную платформу Symbian «по меньшей мере» до 2016 года.

Несмотря на это, перспектив в качественном развитии данной операционной системы не предвидится. И, несмотря на то, что разработка автоматизированной системы возможна и в рамках данной платформы, от этого варианта стоит отказаться.

Apple iOS (до 2010 года известная как iPhone OS) мобильная операционная система, разработанная американской компанией Apple на основе Mac OS X первоначально для iPhone, а затем расширена для поддержки таких мобильных устройств, как Apple iPod, iPad и Apple TV и в настоящее время динамично развивается.

Разработка приложений для iOS ведется в среде XCode, который поддерживает языки C, C++, Objective-C, Objective-C++, Java, AppleScript, Python и Ruby с различными моделями программирования.

Apple не лицензирует iOS для установки на стороннее оборудование, а цена коммуникатора iPhone в России достаточно велика. Этот факт безусловно сильно затруднит внедрение автоматизированной системы, разработанной для iOS с финансовой точки зрения. Поэтому данная ОС так же не была выбрана.

Набирающая некоторую популярность операционная система Windows Phone 7 обладает рядом недостатков, среди которых необходимо выделить отсутствие встроенной поддержки баз данных. SQL Server Compact не включен в состав WP7. Также не включены SQLite или любые другие сторонние СУБД. Отсутствует так же поддержка межпроцессного взаимодействия (IPC) и нет поддержки сокетов.

Продолжая анализировать рынок операционных систем для смартфонов, можно прийти к целесообразности использования ОС Android.

Операционная система Android - портативная (сетевая) операционная система для коммуникаторов, планшетных компьютеров, цифровых проигрывателей, наручных часов. Изначально разрабатывалась компанией Android Inc., которую затем купила Google. Впоследствии Google инициировала создание альянса Open Handset Alliance (OHA), который сейчас и занимается поддержкой и дальнейшим развитием платформы. 

Доли рынка, которые занимали операционные системы в определенные кварталы, можно узнать из рисунка 1 и таблицы 4.

Рисунок 1 - Доли рынка операционных систем для смартфонов

Таблица 4 - Доли рынка операционных систем для смартфонов

Квартал

Android

iOS

Symbian

Microsoft

Bada

RIM

Other

2007 Q4

0%

5,20%

62,30%

11,90%

0%

12,90%

20,60%

2008 Q1

0%

4,60%

49,50%

10,40%

0%

13,10%

35,50%

2008 Q2

0%

2,80%

57,50%

12,10%

0%

15,40%

27,60%

2008 Q3

0,60%

13,10%

50,30%

11,20%

0%

18,20%

24,80%

2008 Q4

1,10%

10,60%

46,50%

12,20%

0%

19,70%

29,60%

2009 Q1

1,60%

10,50%

48,80%

10,20%

0%

19,70%

28,90%

2009 Q2

1,80%

13,00%

51,00%

9,30%

0%

20,50%

24,90%

Окончание таблицы 4

2009 Q3

3,40%

17,00%

44,20%

7,90%

0%

19,00%

27,50%

2009 Q4

7,60%

16,20%

44,70%

7,90%

0%

20,60%

23,60%

2010 Q1

9,60%

15,30%

44,20%

6,80%

0%

19,30%

24,10%

2010 Q2

17,20%

14,20%

41,20%

5,00%

0,90%

16,10%

21,50%

2010 Q3

25,30%

16,60%

36,30%

2,80%

1,10%

17,50%

17,90%

2010 Q4

31,10%

16,10%

32,90%

3,40%

1,30%

11,60%

15,20%

2011 Q1

36,00%

16,80%

27,40%

3,60%

1,70%

10,90%

14,50%

2011 Q2

43,40%

18,20%

22,10%

1,60%

1,90%

9,70%

12,80%

2011 Q3

52,50%

15,00%

16,90%

1,50%

2,20%

8,90%

11,90%

2011 Q4

56,90%

18,90%

11,70%

1,90%

2,10%

8,70%

8,50%

Операционная система Android обладает целым рядом преимуществ [13]:

Во-первых, это полная открытость системы. Разработка приложений доступна всем желающим, и поэтому Android является одной из самых легко расширяемых платформ.

Во-вторых, система полностью универсальна. Android OS можно устанавливать и на смартфоны, и на карманные компьютеры, и даже на телефоны (в облегчённом виде).

Это одна из наиболее удобных и практичных мобильных операционных систем, используемых в современном мире и ее настройка очень проста.

Популярность операционной системы Android стала следствием того, что ведущие компании мобильных телефонов, например, HTC, Motorola, Samsung Electronics, и многие другие производители стали использовать Android на своих смартфонах.

Преимуществом Android от Google также является так же и то, что новая версия Android запускается почти каждые 3 месяца. Обновление телефона новыми версиями помогает пользователям наслаждаться более качественными услугами.

2.2.1 Особенности архитектуры ОС Android

Перед тем, как приступить к разработке приложения для Android, необходимо ознакомиться с архитектурой системы и основными особенностями этой платформы.

Система Android - это программный стек для мобильных устройств, который включает операционную систему, программное обеспечение промежуточного слоя (middleware), а также основные пользовательские приложения.

Архитектуру Android принято делить на четыре уровня [1]:

- уровень ядра;

- уровень библиотеки среды выполнения;

- уровень каркаса приложений;

- уровень приложений.

На рисунке 2 показаны основные компоненты операционной системы и их взаимодействие между собой.

Рисунок 2 - Архитектура операционной системы Android

Ядро Android основано на ядре Linux версии 2.6, но сама система Android не является Linuх-системой в чистом виде, имеет некоторые отличия и содержит дополнительные расширения ядра, специфичные для Android, - свои механизмы распределения памяти, взаимодействие между процессам и и др.

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

Основные компоненты уровня ядра:

- драйвер межпроцессного взаимодействия (IPC Driver);

- драйвер управления питанием (Android Power Management);

- набор драйверов для оборудования, входящего в состав мобильного устройства.

«Выше» ядра, как программное обеспечение промежуточного слоя, лежит набор библиотек (Libraries), предназначенный для обеспечения важнейшего базового функционала для приложений. То есть именно этот уровень отвечает за предоставление реализованных алгоритмов для вышележащих уровней, поддержку файловых форматов, осуществление кодирования и декодирования информации (в пример можно привести мультимедийные кодеки), отрисовку графики и многое другое. Библиотеки реализованы на C/C++ и скомпилированы под конкретное аппаратное обеспечение устройства, вместе с которым они и поставляются производителем в предустановленном виде.

Перечислим некоторые из них:

- Surface Manager - в ОС Android используется композитный менеджер окон, наподобие Compiz (Linux), но более упрощенный. Вместо того чтобы производить отрисовку графики напрямую в буфер дисплея, система посылает поступающие команды отрисовки в закадровый буфер, где они накапливаются вместе с другими, составляя некую композицию, а потом выводятся пользователю на экран. Это позволяет системе создавать интересные бесшовные эффекты, прозрачность окон и плавные переходы.

- Media Framework - библиотеки, реализованные на базе PacketVideo OpenCORE. С их помощью система может осуществлять запись и воспроизведение аудио и видео контента, а также вывод статических изображений. Поддерживаются многие популярные форматы, включая MPEG4, H.264, MP3, AAC, AMR, JPG и PNG.

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

- FreeType - библиотека для работы с битовыми картами, а также для растеризации шрифтов и осуществления операций над ними. Это высококачественный движок для шрифтов и отображения текста.

- LibWebCore - библиотеки известного шустрого браузерного движка WebKit, используемого также в десктопных браузерах Google Chrome и Apple Safari.

- SSL - библиотеки для поддержки одноименного криптографического протокола. Libc - стандартная библиотека языка C, а именно её BSD реализация, настроенная для работы на устройствах на базе Linux. Носит название Bionic.

На этом же уровне располагается Android Runtime - среда выполнения. Ключевыми её составляющими являются набор библиотек ядра и виртуальная машина Dalvik. Библиотеки обеспечивают большую часть низкоуровневой функциональности, доступной библиотекам ядра языка Java.

Каждое приложение в ОС Android запускается в собственном экземпляре виртуальной машины Dalvik. Таким образом, все работающие процессы изолированы от операционной системы и друг от друга. И вообще, архитектура Android Runtime такова, что работа программ осуществляется строго в рамках окружения виртуальной машины. Благодаря этому осуществляется защита ядра операционной системы от возможного вреда со стороны других её составляющих. Поэтому код с ошибками или вредоносное ПО не смогут испортить Android и устройство на его базе, когда сработают. Такая защитная функция, наряду с выполнением программного кода, является одной из ключевых для надстройки Android Runtime.

Уровнем выше располагается Application Framework, иногда называемый уровнем каркаса приложений. Именно через каркасы приложений разработчики получают доступ к API, предоставляемым компонентами системы, лежащими ниже уровнем. Кроме того, благодаря архитектуре фреймворка, любому приложению предоставляются уже реализованные возможности других приложений, к которым разрешено получать доступ. В базовый набор сервисов и систем, лежащих в основе каждого приложения и являющихся частями фреймворка, входят [2]:

- богатый и расширяемый набор представлений (Views), который может быть использован для создания визуальных компонентов приложений, например, списков, текстовых полей, таблиц, кнопок или даже встроенного web-браузера.

- Контент-провайдеры (Content Providers), управляющие данными, которые одни приложения открывают для других, чтобы те могли их использовать для своей работы.

- Менеджер Ресурсов (Resource Manager), обеспечивающий доступ к ресурсам без функциональности (не несущими кода), например, к строковым данным, графике, файлам и другим.

- Менеджер Оповещений (Notification Manager), благодаря которому все приложения могут отображать собственные уведомления для пользователя в строке состояния.

- Менеджер Действий (Activity Manager), который управляет жизненными циклами приложений, сохраняет данные об истории работы с действиями, а также предоставляет систему навигации по ним.

- Менеджер Местоположения (Location Manager), позволяющие приложениям периодически получать обновленные данные о текущем географическом положении устройства.

Таким образом, благодаря Application Framework, приложения в ОС Android могут получать в своё распоряжение вспомогательный функционал, благодаря чему реализуется принцип многократного использования компонентов приложений и операционной системы. Естественно, в рамках политики безопасности.

На вершине программного стека Android лежит уровень приложений (Applications). Сюда относится набор базовых приложений, который предустановлен на ОС Android. Например, в него входят браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов и многие другие. Список интегрированных приложений может меняться в зависимости от модели устройства и версии Android. И помимо этого базового набора к уровню приложений относятся в принципе все приложения под платформу Android, в том числе и разрабатываемая система.

2.3 Выбор средств разработки и тестирования

Выбор устройств-коммуникаторов в качестве аппаратной основы для реализации проекта и Android OS в качестве операционной системы в значительной степени обусловил и то, какой инструментарий будет использоваться для разработки и тестирования приложений.

2.3.1 Язык Java

Система разрабатывалась на объектно-ориентированном языке Java, разработанном компанией Sun Microsystems, которая в данный момент приобретена корпорацией Oracle. Выбор данного языка был сделан по ряду соображений.

Программы на языке Java транслируются в байт-код, выполняемый виртуальной машиной (Java Virtual Mashine) - программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

Достоинство данного способа выполнения программ заключается в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. На коммуникаторах с операционной системой Android такую функцию выполняет виртуальная машина Dalvik.

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

К недостаткам концепции виртуальной машины можно отнести то, что исполнение байт-кода виртуальной машиной в некоторой степени снижает производительность программ и алгоритмов, реализованных на языке Java. Но и влияние этих особенностей сведено к минимуму, благодаря применению технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) и широкому использование платформенно-ориентированного кода в стандартных библиотеках.

Система Java создавалась объектно-ориентированной с самого начала. Объектно-ориентированная парадигма во многом наиболее удобна при создании программного обеспечения.

Нужно отметить, что существует возможность разрабатывать программы и на C/C++ (с помощью Native Development Kit), и на Basic (с помощью Simple) и с использованием других языков. Также можно создавать собственные программы с помощью конструкторов приложений, таких как App Inventor.

2.3.2 Java Development Kit 

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

Java Development Kit (JDK) - бесплатно распространяемый корпорацией Oracle Corporation комплект разработчика приложений на языке Java, включающий в себя стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE).

Стоит отметить такой важный факт, что в состав JDK не входит интегрированная среда разработки, которая устанавливается отдельно.

Все современные интегрированные среды разработки приложений на Java, такие, как NetBeans IDE, Sun Java Studio Creator, IntelliJ IDEA, Borland JBuilder, Eclipse, опираются на сервисы, предоставляемые JDK. Большинство из них для компиляции Java-программ используют компилятор из комплекта JDK. Поэтому эти среды разработки либо включают в комплект поставки одну из версий JDK, либо требуют для своей работы предварительной инсталляции JDK на машине разработчика.

2.3.3 Интегрированная среда разработки Eclipse

Несмотря на то, что для разработки можно использовать целый ряд современных интегрированных средств разработки (IDE), список которых приведен в предыдущем параграфе, выбор пал на Eclipse. Это произошло по следующим причинам:

Eclipse - наиболее полно документированная, свободная и доступная интегрированная среда разработки для Java. Eclipse также очень проста в изучении. Это делает Eclipse очень привлекательной IDE для разработки приложений под Android;

Компания Google выпустила плагин для Eclipse - Android Development Tools, который позволяет создавать Android-пpoeкты, компилировать их, и, что очень важно, использовать эмулятор мобильного ycтpoйcтвa для запуска и отладки приложений.

Плагин Android Development Tools для Eclipse автоматически создает необходимую структуру Android пpoeктa и устанавливает требуемые параметры настройки компилятора.

2.3.4 Android SDK

Android SDK включает в себя разнообразные инструменты, библиотеки и документацию, которые помогают разрабатывать мобильные приложения для платформы Android. В их число входят:

Эмулятор Android - виртуальное мобильное устройство, которое запускается на обычном компьютере. Эмулятор используется для проектирования, отладки и тестирования ваших приложений в реальной среде выполнения Android.

Dalvik Debug Monitor Service (DDMS) - интегрированный с Dalvik, стандартной виртуальной машиной платформы Android, этот инструмент позволяет управлять процессами на эмуляторе или устройстве, а также помогает в отладке приложений.

3. Функциональные требования к системе

Пришло время перейти к определению функций, которые должна выполнять разрабатываемая информационная система. Для документирования функциональных требований мы будем использовать диаграммы вариантов использования.

Диаграммы вариантов использования описывают функциональное назначение системы или то, что система должна делать. Разработка диаграммы преследует следующие цели:

- определить общие границы и контекст моделируемой предметной области;

- сформулировать общие требования к функциональному поведению проектируемой системы;

- разработать исходную концептуальную модель системы для ее последующей детализации в форме логических и физических моделей;

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

Суть диаграммы вариантов использования состоит в следующем. Проектируемая система представляется в виде множества сущностей или актеров, взаимодействующих с системой с помощью вариантов использования. При этом актером (actor) или действующим лицом называется любая сущность, взаимодействующая с системой извне. Это может быть человек, техническое устройство, программа или любая другая система, которая может служить источником воздействия на моделируемую систему так, как определит сам разработчик [11]. Вариант использования служит для описания сервисов, которые система предоставляет актеру. Диаграмма вариантов использования может дополняться пояснительным текстом, который раскрывает смысл или семантику составляющих ее компонентов.

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

Цель варианта использования заключается в том, чтобы определить законченный аспект или фрагмент поведения некоторой сущности без раскрытия её внутренней структуры. В качестве такой сущности может выступать система или любой элемент модели, который обладает собственным поведением.

Каждый вариант использования соответствует отдельному сервису, который предоставляет моделируемая сущность по запросу актера, то есть определяет способ применения этой сущности. Сервис, который инициализируется по запросу актера, представляет собой законченную неделимую последовательность действий.

Проектируемая система состоит из двух частей.

Первая часть функционирует на коммуникаторах с операционной системой Android. Она мобильна и выполняет ряд функций, необходимых курьеру для организации доставки товара: расчет оптимального маршрута, оценка необходимого времени доставки товара, организация связи с офисом фирмы, выраженная в отправке на диспетчерский пункт координат и статусного сообщения.

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

Курьеров в фирме, а соответственно и их автоматизированных рабочих мест в системе может быть несколько. АРМ диспетчера же представляет собой центр системы. Через него могут быть получены мгновенные данные о текущем положении курьера, статусе его деятельности.

Итак, система представляет собой совокупность мобильных устройств, оснащенных АРМ Курьеров, объединенных в единое целое через АРМ Диспетчера (рисунок 3, таблица 5).

Рисунок 3 - Общая структура АИС

Таблица 5 - Реестр основных компонентов системы

Код

Наименование

Формулировка

К

АРМ Курьера

Автоматизированное рабочее место курьера функционирует на базе коммуникатора с ОС Android и позволяет производить расчет оптимального маршрута, оценивать необходимое время прохождения маршрута. Обеспечивается обмен информацией с АРМ Диспетчера

M

АРМ Диспетчера

Автоматизированное рабочее место диспетчера функционирует на ПК, позволяет вести мониторинг состояния перевозок по карте. Обеспечивается обмен информацией с АРМ Клиента.

Теперь более детально определим функциональные требования к клиентской части системы (рисунок 4, таблица 6).

Рисунок 4 - Диаграмма прецедентов для клиентской части системы, размещаемой на коммуникаторах с ОС Android (АРМ Курьера)

Таблица 6 - Реестр вариантов использования для АРМ Курьера

Код

Наименование

Формулировка

KA1

Определение местоположения

Определение координат (широты и долготы) текущего местоположения и отображение их на карте.

KA2

Расчет оптимального маршрута

Расчет, построение и отображение оптимального маршрута движения от текущего местоположения до пункта назначения.

KA3

Оценка необходимого времени

Оценка времени, необходимого для прохождения оптимального маршрута.

KS1

Установка статуса состояния перевозок

Установка статуса состояния: «Свободен», «Выполняю заказ», «Аварийная ситуация», «Перерыв в работе»

Окончание таблицы 6

KD1

Редактирование реестра объектов

Меню доступа и инструментам добавления, редактирования и удаления городских объектов.

KD2

Добавление объекта

Добавление в базу данных нового объекта с указанием его наименования, категории, адреса, широты и долготы, примечаний.

KD3

Редактирование данных об объекте

Редактирование данных о географическом объекте

KD4

Удаление объекта

Удаление объекта из базы данных

Проведем декомпозицию объекта АРМ Диспетчера по выполняемым функциям (рисунок 5, таблица 7).

Рисунок 5 - Диаграмма прецедентов для стационарной, серверной части системы (АРМ Диспетчера)

Таблица 7 - Реестр вариантов использования для АРМ Курьера

Код

Наименование

Формулировка

MA1

Мониторинг состояния перевозок

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

Окончание таблицы 7

MP1

Управление курьерами

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

MP2

Добавление курьера

Добавление в базу данных нового курьера, ввод необходимой информации и характеристик

MP3

Редактирование данных о курьере

Корректировка данных о курьере

MP4

Удаление курьера

Удаление курьера из базы данных

MP5

Просмотр сведений о курьере

Просмотр основных сведений о курьере, хранящихся в базе данных

4. Разработка проекта

4.1 Обзор и решение ключевых задач

4.1.1 Определения текущего местоположения

Задача получения приложением данных о текущем местоположении пользователя является отправной точкой в вопросе построения оптимального маршрута. Видится два решения этого вопроса: использование спутниковой системы навигации GPS и сетевого провайдера местоположения Android (ANLP - Android's Network Location Provider).

Несмотря на то, GPS является более точным, он работает только на улице, быстро расходуется заряд батареи, и не возвращает местоположение так же быстро, как хотят пользователи. ANLP определяет местоположение пользователя с помощью мобильных вышек и Wi-Fi сигналов. Этот способ вполне работоспособен как на открытом воздухе, так и в помещении, реагирует быстрее использует меньше энергии аккумулятора, но дает меньшую точность позиционирования. По этим причинам целесообразно использовать эти два метода в совокупности [7].

Получение данных местоположения пользователя с мобильного устройства является непростой задачей, как может показаться на первый взгляд. Есть несколько причин, почему чтение местоположения (вне зависимости от источника), может быть ошибочным или неточным.

Вот несколько источников ошибок:

1 множественность источников определения местоположения - GPS, Cell-ID и Wi-Fi. И каждый дает свой ключ к определению местоположения пользователя. Определение того, какие данные использовать и каким доверять - это дело компромиссов в точности, скорости и экономии заряда батареи;

2 пользователь постоянно находится в движении - из-за постоянного изменения местоположения необходимо очень часто получать новые данные о текущих координатах;

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

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

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

Алгоритм выбора провайдера местоположения представлен на рисунке 6.

Рисунок 6 - Выбор провайдера местоположения

4.1.2 Прокладка оптимального маршрута

Задача отыскания оптимального маршрута является центральной в проекте. Входными данными для нее являются координаты текущего местоположения пользователя и объектов, которые необходимо посетить. На выходе необходимо получить траекторию пути, маршрут движения вдоль которой будет оптимальным.

Естественно, для решения этой задачи необходимы данные о структуре путей, по которым возможно движение, и которые связывают объекты. Такие данные удобно представлять в виде графа дорог.

Граф дорог - это цифровая векторная карта, состоящая из топологически связанных дуг и узлов, местоположение и свойства которых с заданной точностью и полнотой передают маршруты и организацию движения наземного транспорта.

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

Поиск минимального пути между точками (населенными пунктами) осуществляется с учетом любых характеристик записанных в дуги сети (тип дорог, скорость движения, количество проезжих частей). Кратчайший маршрут можно найти либо по минимальной длине пути либо по минимальному времени прохождения маршрута. При нахождении минимального пути имеется возможность исключения некоторых дуг, например аварийных участков, из поиска. Результаты поиска отображаются на карте в виде объекта - маршрута.

Узлы могут последовательно соединять две дуги, имеющие разные характеристики, или соединять несколько дуг в местах перекрестков, развилок и т.п. Если дороги физически проходят над одним участком местности на разных уровнях (тоннель, эстакада и т.п.), то в точке пересечения дорог на карте графа узел должен отсутствовать. С помощью набора односторонних и двусторонних дуг и узлов можно однозначно описать различные виды перекрестков, одноуровневых и многоуровневых развязок. Если на перекрестке дорог необходимо показать запрет поворота, то в этом месте дороги могут быть показаны параллельными односторонними дугами, которые имеют узлы только с теми пересекающими их дугами, на которые разрешено перестроение транспорта.

Необходимо ответственно подойти к выбору картографической основы, описывающей узлы и дуги графа дорог. Она должна в полной мере характеризовать актуальное состояние транспортных путей. Стоит поставить очень важное требование: граф дорог должен легко редактироваться, так как состояние дорог не является постоянным.

Операционная система Android разработана компанией Google. Поэтому логично выделить первого кандидата - картографический сервис Google Maps. Действительно, в настоящее время он очень бурно развивается. Кроме того, существуют готовые и очень удобные инструменты для создания приложений под Android с использованием Google Maps. Однако детальное изучение системы показало, что подробно сеть дорог проложена только в пределах США и стран Евросоюза. В России же в векторном формате представлены карты лишь наиболее крупных городов. Свободное редактирование так же не представляется возможным.

Российский картографический сервис Yandex Maps, напротив, характеризуется развитой векторной картой крупных и средних городов России. Существует так же Народная Карта, которую можно свободно редактировать. Но вот при построении маршрута очень часто не учитываются второстепенные дороги и в целом дорожный граф построен очень некачественно.

После выделения недостатков двух представленных выше картографических сервисов, выбор пал в сторону использования OpenStreetMap (дословно «открытая карта улиц»), сокращённо OSM - некоммерческий веб-картографический проект по созданию силами сообщества участников-пользователей Интернета подробной свободной и бесплатной географической карты мира.

В настоящее время проект динамично развивается и охватывает все крупные населенные пункты. Существуют удобные инструменты для добавления и редактирования картографических данных. Среди редакторов стоит в первую очередь выделить Potlatch 2, доступ к которому свободно открыт с сайта OpenStreetMap.

4.1.3 Особенности построения графа дорог в OpenStreetMap

OpenStreetMap использует топологическую структуру данных, состоящую из объектов:

- node (точка) - точка с указанными координатами;

- way (линия (путь)) - упорядоченный список точек, составляющих линию или полигон;

- relation (отношение) - группы точек, линий и других отношений, которым назначаются некоторые свойства;

- tag (тег) - пары «ключ - значение», могут назначаться точкам, линиям и отношениям.

Пример графа дорог OpenStreetMap, редактируемый в системе Potlatch2 можно видеть на рисунке 7. Можно видеть, что разные типы дорог привязываются к реальным географическим координатам. Подробнее об этом будет сказано в следующей главе.

Рисунок 7 - визуализация графа дорог в OpenStreetMap

Все возможные виды карт состоят из базовых элементов, которыми являются «точка» (node) и «путь» (way). С каждым из базовых элементов связано множество его свойств (т.н. «меток») [14].

Точка - базовый элемент в структуре данных OSM. Точка имеет параметры «широта» и «долгота». Точки используются для того, чтобы определить «линию», однако точка может являться и самостоятельным элементом карты, и использоваться для обозначения отдельного ни с чем не связанного объекта (например, телефонной будки, бара, для указания координат, к которым привязано название населённого пункта или любого интересного места. Отдельные точки (т.е. не входящие в состав линий или областей) всегда должны иметь хотя бы одно свойство.

Точки, входящие в состав линии, часто не имеют свойств и нужны только для описания линии; однако это не является незыблемым правилом.

Путь представляет собой ломаную линию, проходящую через точки.

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

Линия характеризуется свойствами, которые распространяются на линию на всём её протяжении. Например, для линии, обозначающей дорогу, такими свойствами могут являться тип и качество покрытия, допустимая скорость движения и т.п. Если при уточнении выясняется, что не все свойства линии сохраняются на всём её протяжении (например, на дороге, которой соответствует линия, имеется участок с другим типом покрытия), то линия может быть разделена на части [3].

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

В OpenStreetMap нет ограничений на свойства (теги), которыми могут быть помечены элементы (Точки и Пути). Однако, выгоднее использовать некий рекомендованный набор объектов и соответствующих им тегов.

Тег highway - основной и часто единственный для обозначения дорог и улиц. Ряд значений, которые он может принимать приведен в таблице 8.

Таблица 8 - Типы дорог в OpenStreetMap

Значение 

Описание

primary

Автомобильные дороги регионального значения

secondary

Автомобильные дороги областного значения

tertiary

Более важные автомобильные дороги среди дорог местного значения

living_street

Улицы, на которых пешеходы имеют преимущество перед автомобилями

pedestrian

Для обозначения улиц городов, выделенных для пешеходов.

track

Дороги сельскохозяйственного назначения.

path

Тропа без назначения. Беговая лыжня, велосипедный маршрут, пешеходный маршрут.

Окончание таблицы 8

footway

Пешеходные дорожки. Если по ним разрешено передвижение на велосипеде, то необходимо добавить тег bicycle=yes.

cycleway

Велодорожка. Если это дорожка и для пешеходов, можно добавить тег foot=yes.

Для описания характеристик дорог следующие теги:

- Maxspeed:practical - практически достижимая на участке дороги скорость.

- Surface - используется для более подробного описания покрытия. дороги. Этот тег позволяет учитывать, например, тот факт, что езда по грунтовым дорогам более медленная (занимает большее время).

- Smoothness - cлужит для указания состояния и проходимости дороги. Цель этого тега - дать способ классификации дорог по их физической проезжаемости для различных видов колесной техники.

Принимает такие значения, как excellent, good, intermediate, bad, horrible, impassable.

- Bicycle - тег, устанавливающий, возможность проезда велотранспорта.

- Foot - могут ли перемещаться пешеходы.

Все покрытия можно разделить на две основные группы: paved и unpaved road. В США, термин unpaved road называют разбитую дорогу. В России используется термины не грунтовая/грунтовая дорога (таблица 9).

Навигационное программное обеспечение должно учитывать, что езда по грунтовым дорогам более медленная (занимает большее время) и может быть вообще невозможна в ненастье.

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

Таблица 9 - Типы качества дорог в OpenStreetMap.

Значение 

Описание

Качество покрытия

asphalt

Асфальтное покрытие

paved

cobblestone

Булыжник -- специально уложенные относительно ровными поверхностями вверх камни.

paved

concrete

Бетон. Бетонное покрытие может заливаться на месте или выкладываться железо-бетонными плитами.

paved

grass

Трава, укатанная транспортными средствами, утоптанная людьми

unpaved

gravel

Гравий -- мелкие камни с неровной поверхностью

unpaved

ground

Голая почва, специальное покрытие отсутствует.

unpaved

Таким способом описывается граф дорог в системе OpenStreetMap, который имеет глобальный масштаб. Теперь мы напрямую подходим к вопросу вычисления оптимального маршрута между объектами.

4.1.4 Поиск оптимального маршрута

Существует целый ряд алгоритмов поиска оптимального маршрута. Алгоритм поиска A* является наиболее интересным при решении задачи с большим количеством путей и вершин [22].

A* пошагово просматривает все пути, ведущие от начальной вершины в конечную, пока не найдёт минимальный. Как и все информированные алгоритмы поиска, он просматривает сначала те маршруты, которые «кажутся» ведущими к цели. От жадного алгоритма (который тоже является алгоритмом поиска по первому лучшему совпадению) его отличает то, что при выборе вершины он учитывает, помимо прочего, весь пройденный до неё путь (составляющая g(x) -- это стоимость пути от начальной вершины, а не от предыдущей, как в жадном алгоритме). В начале работы просматриваются узлы, смежные с начальным; выбирается тот из них, который имеет минимальное значение f(x), после чего этот узел раскрывается. На каждом этапе алгоритм оперирует с множеством путей из начальной точки до всех ещё не раскрытых (листовых) вершин графа («множеством частных решений»), которое размещается в очереди с приоритетом. Приоритет пути определяется по значению функции

f(x) = g(x) + h(x),

где g(x) - стоимость пути от начальной вершины;

h(x) - эвристика.

Алгоритм продолжает свою работу до тех пор, пока значение f(x) целевой вершины не окажется меньшим, чем любое значение в очереди (либо пока всё дерево не будет просмотрено). Из множественных решений выбирается решение с наименьшей стоимостью.

При работе с графом дорог OpenStreetMap, для реализации алгоритма поиска оптимального маршрута эффективно использовать сервис CloudMade.

CloudMade Maps - это англоязычный «облачный» картографический сервис, который тем не менее понимает и отыскивает кириллические обозначения. Его главное применение - поиск как адресов на карте, так и примерных маршрутов в пределах города или области, а также между городами и даже странами. Этот сервис поддерживает открытый формат OpenStreetMap.

Не так давно CloudMade выделил несколько приоритетных направлений, среди которых оказалась и навигация. Решено было создать специальный проект Navi Studio, который объединял бы в себе несколько более мелких сервисов и позволял пользоваться ими, для создания полноценного навигационного программного обеспечения [15].

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

4.1.5 Прогнозирование времени прохождения маршрута

Время прохождения найденного оптимального маршрута зависит от целого ряда факторов, таких как:

- длина маршрута;

- качество его отдельных участков;

- скоростные характеристики средства передвижения;

Время преодоления пути увеличивается прямо пропорционально его длине и снижению качества дорог и уменьшается с увеличением скорости движения. Естественно точный прогноз времени движения невозможен из-за наличия действия многочисленных внешних факторов, на которые повлиять порой не возможно.

Поэтому задача заключается в нахождении приблизительной цифры, на которую можно ориентироваться с высокой долей вероятности.

4.1.6 Диспетчеризация

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

В рамках создания системы диспетчеризации процесса перевозки грузов важно реализовать выполнение следующих функций:

- диспетчер должен проводить регистрацию курьерских устройств в системе;

- необходимо в режиме реального времени отслеживать местоположение всех курьеров, находящихся в системе. С автоматизированного рабочего места диспетчера должен быть организован просмотр карты, на которой отмечается текущее местоположение сотрудников фирмы. Для этого необходимо передавать с Android-устройств в центр широту и долготу текущего местоположения и пунктов назначения;

- важно всегда быть в курсе о состоянии перевозок. Для этого курьер может установить соответствующий статус, типа «Свободен», «Выполняю заказ», «Аварийная ситуация», «Перерыв в работе». Этот статус должен передаваться в центр, и доступен для просмотра диспетчером. Маркер местоположения может подсвечиваться соответствующим цветом: зеленым - если курьер свободен, синим - если выполняет заказ, красным - по возникновении аварийной ситуации, желтым - если работник взял перерыв в работе. Статус может быть откомментирован в виде текстового сообщения.

- диспетчер должен иметь возможность мгновенно связаться с курьером. Для этого всегда под рукой должен быть доступ к его контактам. Организация связи возможна как с помощью стационарного или мобильного телефона, так и с применением технологии VoIP, обеспечивающей передачу речевого сигнала по сети Интернет или по любым другим IP-сетям. 

Реализация данных функций способствует созданию удобной системы диспетчерского контроля, в которую вовлечены Android-устройства организации.

4.2 Графический интерфейс системы

Графический интерфейс пользователя (Graphical User Interface, GUI) - это система средств для взаимодействия пользователя с устройством, основанная на представлении всех доступных пользователю системных объектов и функций в виде графических компонентов экрана (окон, кнопок, полос прокрутки и т. п.). При работе с GUI пользователь имеет произвольный доступ (с помощью клавиатуры или устройств координатного ввода, например, touch-screen) ко всем видимым экранным объектам.

Одним из требований к хорошему графическому интерфейсу программной системы является концепция «делай то, что я имею в виду» или DWIM (Do What I Mean) [16]. DWIM требует, чтобы система работала предсказуемо, чтобы пользователь заранее интуитивно понимал, какое действие выполнит программа после получения его команды.

4.2.1 Интерфейс АРМ Курьера

В Android используется среда пользовательского интерфейса (UI), напоминающая другие подобные системы на полнофункциональных компьютерах. Более того, эта среда более современна и асинхронна. 

Программирование в пользовательском интерфейсе Android предполагает объявление интерфейса в XML-файлах. Потом эти XML-определения визуального отображения загружаются в приложение пользовательского интерфейса в виде окон. Даже меню загружается из XML-файлов. Экраны или окна в Android часто называют действиями (activity), которые состоят из нескольких представлений, или групп представлений (view group) [4].

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

Графический интерфейс приложения, написанного для мобильного устройства должен быть удобен для использования в уличных условиях. Он не должен содержать излишне мелких элементов и при этом ни в коем случае не может быть перегруженым. Должна существовать полная поддержка технологии touch-screen, облегчающей работу с устройством.

Работа с курьерским приложением начинается с удобного меню. Из него можно получить доступ ко всем функциям системы:

- навигация;

- установка статуса;

- расчет маршрута;

- мои объекты;

- настройки.

Завершить работу с приложением можно по нажатии соответствующей кнопки.

В окне навигации нет ничего лишнего. Карта, развернутая на весь экран, может легко масштабироваться как «щипком», так и с помощью соответствующих кнопок. Это позволяет в удобном режиме изучать как районы города, так и отдельные улицы. Текущее местоположение помечается маркером на карте.

Функция установки статуса позволяет своевременно оповещать диспетчера о своем состоянии. Статус может принимать одно из четырех значений: «Свободен», «Выполняю заказ», «Перерыв в работе», «Авария».

Любой статус может быть прокомментирован соответствующим сообщением.

В зависимости от установленного статуса, маркер на карте диспетчера принимает разный цвет. Статусное сообщение так же может быть оперативно прочитано.

Завершив редактирование статусного сообщения, пользователь нажимает на кнопку подтверждения. Введенные данные сохраняются в настройках коммуникатора и становятся доступными и по завершении работы с приложением.

Статус и статусное сообщение передаются вместе с координатами при получении сигнала со спутника GPS.

При расчете маршрута, пользователь имеет возможность легко и быстро установить маркеры, показывающие, через какие точки должен пролегать путь. Это делается двойным прикосновением к сенсорному экрану. По нажатии на соответствующую кнопку, вычисляется необходимый маршрут, рисуется на карте, выводится его длина и оценка времени, необходимого для его прохождения.

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

Все эти действия возможны в меню настроек системы.

4.2.2 Интерфейс АРМ Диспетчера

Автоматизированное рабочее место диспетчера функционирует как web-приложение. Существенное преимущество построения web-приложений для поддержки стандартных функций браузера заключается в том, что функции должны выполняться независимо от операционной системы данного клиента. Вместо того чтобы писать различные версии для Microsoft Windows, Mac OS X, GNU/Linux и других операционных систем, приложение создается один раз для произвольно выбранной платформы и на ней разворачивается. 

Для работы с АРМ Диспетчера подойдет любой современный браузер (Internet Explorer, Mozilla Firefox, Google Chrome, Safari, Opera). Для мониторинга состояния перевозок выводится карта с отмечеттными на ней маркерами местоположениями курьеров. Под картой располагается удобная таблица, в поторой сведены все сотрудники фирмы, входящие в систему. Указывается их имя, контактный телефон, статус, статусное сообщение и дата последнего обновления местоположения (Рисунок 14).

Рисунок 14 - Мониторинг состояния перевозок в городе Саранск

В правом верхнем углу находится кнопка смены темы отображения, позволяющая выбрать наиболее наглядный вариант (Рисунок 15).

Рисунок 15 - Тема «Night View» отображения карты

По щелчку на соответствующем маркере будет выведено соответствующее облако. В нем будет написано жирным шрифтом имя курьера и статусное сообщения. Сам маркер помечается определенным цветом в зависимости от статуса: зеленый - «Свободен» (Рисунок 16), синий - «Выполняю заказ», желтый - «Перерыв в работе», красный - «Авария» (Рисунок 17).

Рисунок 16 - Свободный курьер обозначен зеленым цветом

Рисунок 17 - Выполняющий заказ курьер помечен синим маркером

4.3 Развертывание системы

АРМ Курьера размещается на коммуникаторах с ОС Android c версией API не ниже 8 (Android 2.2). Для каждого мажорного релиза платформы выпускается новая версия API, к примеру, для Android версии API 2.3.1 - 9, для Android 2.3.3 - 10, и разработанная система будет на них в полной мере функционировать. Детально характеристики платформы Android уже рассмотрены ранее.

Обязательным требованием к устройству является наличие приемника GPS сигнала.

Интерфейс обмена данными GPS приемников реализован в соответствии со спецификацией NMEA, разработанной Национальной Ассоциацией Морской Электроники (National Marine Electronics Association - NMEA), как специальный протокол для поддержания совместимости морского навигационного оборудования различных производителей. Все NMEA сообщения состоят из последовательного набора данных, разделенных запятыми. Каждое отдельное сообщение не зависит от других и является полностью «завершенным». NMEA cообщение включает заголовок, набор данных, представленных ASCII символами, и поле «чексуммы» для проверки достоверности переданной информации.

Каждое NMEA сообщение начинается с «$», заканчивается «n» ( «перевод строки») и не может быть длиннее 80-и символов. Все данные содержаться в одной строке и отделены друг от друга запятыми. Информация представлена в виде ASCII текста и не требует специального декодирования. Если данные не умещаются в выделенные 80 символов, то они «разбиваются» на несколько NMEA сообщений. Такой формат позволяет не ограничивать точность и количество символов в отдельных полях данных.

Спутники, находящиеся на орбите (высота орбиты GPS - 20000 км) беспрерывно передают в эфир маломощные (мощность сигналов GPS - 50 Вт) псевдослучайные сигналы на частотах L1=1575,42 МГц , L2=1227,6 МГц, L5= 1176.5 МГц. Соответственно приемник оконечного пользователя принимает сигналы спутников, для определения координат и точного времени достаточно получать сигналы минимум от 4 спутников.

Зная точное время и координаты спутников (а они передаются в навигационном сообщении), мы можем определить расстояние до этих спутников. И после этого математическими методами рассчитать наше местоположение.

Принимая сигналы от одного спутника GPS, зная расстояние до него, мы можем сказать, что мы находимся на сфере, радиус которой составляет наше расстояние до спутника, а в центре сферы находится спутник расстояние, до которого мы знаем [5].

Например, если мы отдалены от спутника на 11000 миль то - имеем сферу радиусом 11000 миль. И площадью 1 519 760 000 миль.

Принимая сигналы от двух спутников GPS, мы знаем расстояния до них, и соответственно можем сказать, что мы находимся на площади образованной пересечением двух сфер (Рисунок 18).

Рисунок 18 - Определение местоположения при наличии двух спутников

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

Принимая сигналы от трех GPS спутников, мы получаем всего две точки нашего возможного местоположения, ненужную можно исключить с помощью математики (Рисунок 19).

Рисунок 19 - Определение местоположения при наличии трех спутников

Четвертый GPS спутник нужен для определения точной ошибки по времени.

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

Передача данных от коммуникатора к диспетчеру осуществляется посредством GPRS (General Packet Radio Service - «пакетная радиосвязь общего пользования»). Это надстройка над технологией мобильной связи GSM, осуществляющая пакетную передачу данных. GPRS позволяет пользователю сети сотовой связи производить обмен данными с другими устройствами в сети GSM и с внешними сетями, в том числе Интернет.

При использовании GPRS информация собирается в пакеты и передаётся через неиспользуемые в данный момент голосовые каналы, такая технология предполагает более эффективное использование ресурсов сети GSM. При этом, что является приоритетом передачи - голосовой трафик или передача данных - выбирается оператором связи. Возможность использования сразу нескольких каналов обеспечивает достаточно высокие скорости передачи данных, теоретический максимум при всех занятых таймслотах TDMA составляет 171,2 кбит/c. Существуют различные классы GPRS, различающиеся скоростью передачи данных и возможностью совмещения передачи данных с одновременным голосовым вызовом.

АРМ Диспетчера имеет трехуровневую архитектуру и имеет следующие основные компоненты: клиентское приложение (тонкий клиент), подключенное к серверу приложений, который в свою очередь подключен к серверу базы данных [12].

- клиент - интерфейсный, графический компонент, который представляет приложение для конечного пользователя. Он не имеет связи с базой данных (по требованиям безопасности) и не нагружен бизнес-логикой (по требованиям масштабируемости). Работа с интерфейсом осуществляется через браузер. Для организации внешнего вида выводимой информации использованы HTML и CSS. Динамичное и асинхронное обновление данных возможно благодаря технологии AJAX.

- сервер приложений располагается на втором уровне, где сосредоточена большая часть бизнес-логики. Здесь обрабатываются данные, получаемые от коммуникаторов курьеров, происходит обращение к базе данных для получения структурированной информации, которая будет отображаться на клиенте. Приложения этого уровня разработаны на языке PHP [24].

- сервер базы данных обеспечивает хранение данных и выносится на третий уровень. В качестве системы управления базами данных использована MySQL [25].

В простейшей конфигурации физически сервер приложений может быть совмещён с сервером базы данных на одном компьютере, к которому по сети подключается ряд клиентов.

В «правильной» (с точки зрения безопасности, надёжности, масштабирования) конфигурации сервер базы данных находится на выделенном компьютере (или кластере), к которому по сети подключены один или несколько серверов приложений, к которым, в свою очередь, по сети подключаются терминалы.

Диаграмма развертывания системы представлена на рисунке 20.

Рисунок 20 - Диаграмма развертывания системы

Пре-альфа версия программы получила название Windrose 2012 (Роза ветров).

5. Технико-экономическое обоснование дипломного проекта

Программу, как любое техническое решение необходимо рассматривать с экономической точки зрения экономической целесообразности и пользы. Целью технико-экономического обоснования разработки является количественное и качественное доказательство экономической целесообразности усовершенствования программы, а также определение организационно-экономических условий ее эффективного функционирования.

Эффективность программного модуля определяется его качеством и эффективностью процесса разработки и сопровождения.

5.1 SWOT-анализ

SWOT-анализ - метод стратегического планирования, используемый для оценки факторов и явлений, влияющих на проект [17].

Все факторы делятся на четыре категории: strengths (сильные стороны), weaknesses (слабые стороны), opportunities (возможности) и threats (угрозы). 

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

Слабые стороны проекта - это отсутствие реализации каких-либо важных функций, или их неоптимальная реализация. Выделение слабых сторон необходимо для определения основных путей, по которым необходимо продолжать развитие проекта.

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

Угрозы - события, наступление которых может оказать неблагоприятное воздействие на развитие проекта. Примеры рыночных угроз: выход на рынок новых конкурентов, рост налогов, спад интереса к области исследования, появление на рынке заменяющих товаров-субститутов.

Основные положения SWOT-анализа проекта сведены в таблицу 10.

автоматизированный маршрут курьерский android

Таблица 10 - SWOT-анализ

Среда

Положительное влияние

Отрицательное влияние

Внутренняя

Strengths/Сильные стороны:

- функциональность системы основана на широких возможностях современных коммуникаторов;

- проект разработан специально для динамично развивающейся ОС Android;

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

- учет характеристик путей и качества дорожного покрытия;

- множество устройств с АИС возможно объединить в единую систему, контролируемую с диспетчерского пункта.

Weaknesses/Слабые стороны:

- отсутствие учета текущей плотности дорожного движения;

- разработка инструментов ведения статистики на диспетчерском пункте находится на начальной стадии;

- высокое потребление заряда батареи современными коммуникаторам.

Внешняя

Opportunities/Возможности:

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

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

Threats/Угрозы:

- рост конкуренции на рынке операционных систем для коммуникаторов;

- появление и развитие конкурирующих проектов, имеющих иное архитектурное решение.

5.2 PEST-анализ

PEST-анализ (иногда обозначают как STEP) - это маркетинговый инструмент, предназначенный для выявления политических (Political), экономических (Economic), социальных (Social) и технологических (Technological) аспектов внешней среды, которые влияют на проект [18].

Политика изучается потому, что она регулирует власть, которая в свою очередь определяет среду функционирования проекта. Основная причина изучения экономики - это создание картины распределения ресурсов на уровне государства, которая является важнейшим условием работы проекта. Не менее важные потребительские предпочтения определяются с помощью социального компонента PEST-анализа. Последним фактором является технологический компонент. Целью его исследования принято считать выявление тенденций в технологическом развитии, которые зачастую являются причинами изменений и потерь рынка, а также появления новых продуктов.

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

К политическим, экономическим, социальным и технологическим факторам, определяющим эффективность внедрения можно отнести:

- общую стабилизацию политической ситуации в стране, ведущую к формированию устойчивого общества потребления.

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

- увеличение влияния на имидж компании внедрения информационных технологий. Фирма, использующая систему способна в большей степени удовлетворять потребности клиентов, выполнять заказы быстрее и качественнее, с полной уверенностью того, что это будет обязательно оценено с положительной стороны.

- бурное развитие в области беспроводной коммуникации и систем обработки данных. Это создает многочисленные пути развития проекта в будущем, параллельно совершенствованию технологий.

Описанные выше факторы обуславливают в целом положительные перспективы для развития разрабатываемого проекта.

5.3 Расчет экономических показателей

Исходные данные для расчета экономических показателей приведены в таблице 11.

Таблица 11 - данные для расчета экономических показателей.

Обозначение

Наименование показателя

Единицы

измерения

Значение

показателя

СЭВМ

Стоимость ЭВМ

тыс. р.

30

СКА

Стоимость коммуникатора Android

тыс. р.

15

ДМ

Среднее количество дней в месяце

дни

21

н

Норматив рентабельности

-

0,2

д

Коэффициент, учитывающий дополнительную заработную плату разработчика

-

0,1

с

Коэффициент, учитывающий отчисления на социальные взносы

-

0,30

н

Коэффициент, учитывающий накладные расходы организации

-

0,6

qI

Количество I-задач, решаемых потребителем

зад. год

750

tМ.В.I

Время решения I-ой задачи с помощью АИС

маш. час

2

t'М.В.I

Время решения I-ой задачи без использования АИС

маш. час

3

nп

Количество организаций, которые приобретут данную программу

шт.

5

ZЭЛ

Тариф за 1 кВт/час

р.

2,37

н

Нормативный коэффициент эффективности капиталовложений

-

0,33

ТС

Срок службы разработанной программы

год

25

НДС

Налог на добавленную стоимость

%

18

ТР

Количество рабочих дней в году

дни

249

NСМ

Количество смен работы

-

1

tСМ

Продолжительность смены

ч

8

Простой ЭВМ

%

5

P

Мощность, потребляемая ЭВМ

кВт

0,4

NСР

Среднее количество ремонтов в год

-

1

Стоимость деталей, заменяемых при ремонте

р.

2000

5.4 Расчет затрат на разработку программы

Суммарные затраты на разработку программы рассчитываются по следующей формуле:

SРП = SЗП+SНАК ,

где SЗП - затраты по заработной плате инженера-программиста;

SНАК - накладные расходы.

Затраты по заработной плате инженера-программиста рассчитываются по формуле:

SЗП = ОЗП (1+с) (1+д) tрi ,

где ОЗП - основная заработная плата инженера-программиста за месяц (15000 р.);

tpi - время, необходимое для разработки программы программистом i-го разряда (чел.-мес.);

д - коэффициент, учитывающий дополнительную заработную плату разработчика программы, в долях к сумме основной заработной платы;

с - коэффициент, учитывающий начисления органам социального страхования на заработную плату разработчика программы, в долях к сумме основной заработной плате разработчика.

Программа разрабатывалась 63 дня, если учесть, что в одном месяце 21 рабочих дня, то:

(чел.-мес.)

Таким образом, затраты по заработной плате инженера-программиста составят:

(р.)

Накладные затраты рассчитываются с учетом н - коэффициента, определяющего уровень накладных расходов организации по формуле:

SНАК = ОЗП н tр12 ,

(р.)

Таким образом, суммарные затраты на разработку программы составляют:

SРП = 64350 + 27000 = 91350 (р.)

5.5 Расчет цены разработанной программы

Оптовая цена разработанной программы определяется по следующей формуле:

ZП = SРП + П,

где ZП - оптовая цена (цена разработчика) (р.);

SРП - суммарные затраты на разработку программы (р.);

П - прибыль, рассчитанная по формуле:

П = н SРП,

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

ZП = 91350 (1+ 0,2) = 109620 (р.)

Розничная цена программы рассчитывается с учетом налога на добавленную стоимость (НДС = 18%) по формуле:

ZПр = 109620 (1 + 0,18) = 129351 (р.)

5.6 Расчет капитальных вложений

Капиталовложения, связанные с работой ЭВМ рассчитываются по формуле:

КЭВМ = СЭВМ+ СКА+SТ+SМ,

где СЭВМ - стоимость ЭВМ (р.);

СКА - стоимость коммуникатора Android (р.);

ST - стоимость транспортировки оборудования (р.);

SМ - стоимость настройки ЭВМ (р.);

Так как площадь, отводимая под установку ЭВМ, в данном случае не существенна, то этим коэффициентом можно пренебречь.

Итак, произведем расчет коэффициентов входящих в формулу расчета величины капиталовложений:

ST = 0,05 (СЭВМ + СКА) = 0,05 45000 = 2250 (р.);

SМ = 0,03 (СЭВМ + СКА) = 0,03 45000 = 1350 (р.).

Капиталовложения в ЭВМ составляют:

КЭВМ = 30000 + 15000 + 2250 + 1350 = 48600 (р.)

5.7 Расчет эксплуатационных расходов

Эксплутационные расходы на ЭВМ рассчитываются по формуле:

,

где ТМ.В. - машинное время для решения задач с помощью разработанной программы, (маш.час/год);

еч - эксплутационные расходы, приходящиеся на 1 час работы АИС;

ZП - цена, по которой продается программа (р.);

Полезный фонд времени работы АИС рассчитывается по формуле:

/

где ТОБЩ - общий фонд времени работы ЭВМ (дни); ТОБЩ = ТР;

NСМ - количество смен работы;

tСМ -время одного рабочего дня (час);

- простои ЭВМ (в % от общего фонда времени работы ЭВМ).

Полезный фонд времени работы ЭВМ получим:

маш. час/ год

Машинное время для решения задач с помощью данной программы рассчитывается по формуле:

/

где qI - количество задач, решаемых потребителем в год(шт.);

tМ.В.I - время решения задачи, разработанной программой (маш.час.).

ТМ.В. = 750 2 = 1500 (маш.час. / год).

Эксплутационные расходы, приходящиеся на 1 час работы ЭВМ, оцениваются по формуле:

,

где АО - амортизационные отчисления (р.);

SЗП - затраты по заработной плате инженера в год (р./год);

SЭЛ - стоимость потребляемой энергии (р.);

RРМ - затраты на ремонт ЭВМ (р.);

ТПОЛ - полезный годовой фонд работы ЭВМ, (маш.час/год).

Амортизационные отчисления рассчитываются с учетом нормы амортизации (ан =20 %);

АО = ан КЭВМ = 0,2 48600 = 9720 (р.).

Затраты по заработной плате инженера за год рассчитывается по формуле:

SЗП = (1+с) (1+д) ОЗП 12,

где с - коэффициент, учитывающий начисления органам социального страхования на заработную плату разработчика программы, в долях к сумме основной заработной плате разработчика.

д - коэффициент, учитывающий дополнительную заработную плату разработчика программы, в долях к сумме основной заработной платы;

ОЗП - основная заработная плата работника (15000 р.);

Рассчитываем годовые затраты по заработной плате и социальным отчислениям для работника:

SЗП = (1+ 0,3) (1+ 0,1) 15000 12 = 257400 (р./год)

Стоимость потребляемой энергии оценивается по формуле:

SЭЛ = P ТПОЛ ZЭЛ ,

где P - мощность, потребляемая ЭВМ (кВт);

ТПОЛ - полезный годовой фонд работы ЭВМ (маш. час/год);

ZЭЛ - тариф за 1 кВт/час (р. /кВт).

Итак, произведем расчет стоимости потребляемой энергии:

SЭЛ = 0,4 1892,4 2,37 = 1794 (р.).

Затраты на ремонт ЭВМ вычисляются по формуле:

RРМ = NСР SД,

где NСР - среднее количество ремонтов в год;

SД - стоимость деталей заменяемых при одном ремонте, в среднем.

RРМ = 1 2000 = 2000 (р.).

Произведем вычисление эксплутационных расходов, приходящихся на 1 час работы ЭВМ:

(р.)

Далее вычислим эксплутационные расходы на ЭВМ:

(р.)

5.8 Расчет денежного годового экономического эффекта

Денежный годовой экономический эффект оценивается по следующей формуле:

WГЭ = ЕМ.Э. + н КЭ,

где ЕМ.Э. - экономия стоимости машинного времени (р.);

н - нормативный коэффициент эффективности капитальных вложений;

КЭ - экономия капитальных вложений (р.).

Расчет экономии капитальных вложений производится по формуле:

,

где ТМ.В.2 - машинное время для решения задач с помощью разработанной программы (маш. час/год);

КЭВМ - капиталовложения в оборудование (р.);

ТПОЛ - полезный годовой фонд работы оборудования (маш. час/год);

ТМ.В.1 - машинное время для решения задач базовой программой

ТМ.В.1 = qI t'М.В.I ,

ТМ.В.1 = 750 2 = 1500 (маш. час/год).

Произведем расчет экономии капитальных вложений по формуле:

(р.)

Расчет экономии стоимости машинного времени производится по формуле:

ЕМ.Э. = еч (ТМ.В. -ТМ.В.2),

где еч - эксплуатационные расходы, приходящиеся на 1 час работы ЭВМ;

ТМ.В.1 - машинное время для решения задач базовой программой (маш. час/год);

ТМ.В.2 - машинное время для решения задач с помощью разработанной программы (маш. час/год);

Произведем расчет экономии стоимости машинного времени по формуле:

ЕМ.Э. = 142,7 (750) = 107025 (р.)

Теперь определим денежный годовой экономический эффект по формуле:

WГЭ = 107025 + 0,33 19225 = 113400 (р.)

6. Безопасность и экологичность дипломного проекта

Функционирование разрабатываемой АИС основано на организации автоматизированных рабочих мест, которые оснащаются персональной ЭВМ и различной оргтехникой.

В помещении, где находится ПК, целесообразно выделить следующие неблагоприятные факторы:

- уровень электробезопасности;

- повышенный уровень электромагнитных излучений;

- повышенный уровень шума;

- несоблюдение требований к эргономике;

- недостаточная освещенность рабочей зоны;

- неблагоприятные метеорологические условия рабочей зоны;

- пожароопасные факторы.

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

6.1 Электробезопасность

Электрические установки, к которым относится практически все оборудование ЭВМ, представляют для человека большую потенциальную опасность, так как в процессе эксплуатации или проведения профилактических работ человек может коснуться частей, находящихся под напряжением [19]. В связи с этим исключительно важное значение для предотвращения электротравматизма имеет правильная организация обслуживания действующих электроустановок ВЦ, проведение ремонтных, монтажных и профилактических работ. Под правильной организацией понимается строгое выполнение ряда организационных и технических мероприятий и средств, установленных действующими правилами техники эксплуатации и правилами техники безопасности потребителей, а также правилами устройства электроустановок.

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

Электробезопасность - это система организационных и технических мероприятий и средств, обеспечивающих защиту людей от вредного и опасного воздействия электрического тока и статического электричества.

Среди наиболее опасных факторов в помещении с электрооборудованием является возможность поражения человека электрическим током вследствие нарушения электроизоляции. При поражении человека электрическим током основным поражающим фактором является ток, проходящий через его тело. При этом степень отрицательного воздействия тока на организм человека зависит от величины тока, продолжительности его действия, частоты и некоторых других факторов.

Человек начинает ощущать протекающий через него ток промышленной частоты (50 Гц) относительно малого значения: 0.5 - 1.5 мА, постоянный ток - 5 - 7 мA. Ток 10 - 15 мА вызывает сильные и весьма болезненные судороги мышц, которые человек преодолеть не в состоянии. Ток 100 мА и более (при 50 Гц) или постоянный ток 300 мА вызывает существенные повреждения в организме человека. Он распространяет свое раздражающее действие на мышцу сердца и через 1-2 с с момента замыкания цепи этого тока через человека может наступить фибрилляция или остановка сердца. Такой ток называется фибрилляционым током, а наименьшее его значение - пороговым фибрилляционным током.

Рассмотрим заземление, как один из основных методов обеспечения электробезопасности.

Заземление электроустановки - преднамеренное электрическое соединение ее корпуса с заземляющим устройством.

Заземление электроустановок бывает двух типов: защитное заземление и зануление, которые имеют одно и тоже назначение - защитить человека от поражения электрическим током, если он прикоснулся к корпусу электроприбора, который из-за нарушения изоляции оказался под напряжением.

Защитное заземление - преднамеренное соединение с землей частей электроустановки. Применятся в сетях с изолированной нейтралью, например, в старых домах с сетями 220В.

Есть два вида заземлителей - естественные и искусственные.

К естественным заземлителям относятся металлические конструкции зданий, надежно соединенные с землей.

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

Защитное заземление значительно снижает напряжение, под которое может попасть человек. Это объясняется тем, что проводники заземления, сам заземлитель и земля имеют некоторое сопротивление. При повреждении изоляции ток замыкания протекает по корпусу электроустановки, заземлителю и далее по земле к нейтрали трансформатора, вызывая на их сопротивлении падение напряжения, которое хотя и меньше 220 В, но может быть ощутимо для человека. Для уменьшения этого напряжения необходимо принять меры к снижению сопротивления заземлителя относительно земли, например, увеличить количество исскуственных заземлителей.

Зануление - преднамеренное электрическое соединение частей электроустановки, нормально не находящихся под напряжением с глухо заземленной нейтралью с нулевым проводом.

Различают нулевой рабочий проводник и нулевой защитный проводник.

Нулевой рабочий проводник служит для питания электроустановок и имеет одинаковую с другими проводами изоляцию и достаточное сечение для прохождения рабочего тока.

Нулевой защитный проводник служит для создания кратковременного тока короткого замыкания для срабатывания защиты и быстрого отключения поврежденной электроустановки от питающей сети. Системы заземления различаются по схемам соединения и числу нулевых рабочих и защитных проводников.

Остановимся конкретнее на системе заземления TN-C-S (Рисунок 21).

Рисунок 21 - Системе заземления TN-C-S

Система TN-C-S характерна для реконструируемых сетей, в которых нулевой рабочий и защитный проводники объединены только в части схемы, во вводном устройстве электроустановки (например, вводном квартирном щитке). Во вводном устройстве электроустановки совмещенный нулевой защитный и рабочий проводник PEN разделен на нулевой защитный проводник PE и нулевой рабочий проводник N. При этом нулевой защитный проводник PE соединен со всеми открытыми токопроводящими частями электроустановки. Система TN-C-S является перспективной для нашей страны, позволяет обеспечить высокий уровень электробезопасности при относительно небольших затратах.

Система заземления TN-S показана на рисунке 22.

Рисунок 22 - Системе заземления TN-S

В системе TN-S нулевой рабочий и нулевой защитный проводники проложены отдельно. Все открытые проводящие части электроустановки соединены отдельным нулевым защитным проводником PE. Такая схема исключает обратные токи в проводнике РЕ, что снижает риск возникновения электромагнитных помех. Хорошим вариантом для минимизации помех является пристроенная трансформаторная подстанция (ТП), что позволяет обеспечить минимальную длину проводника от ввода кабелей электроснабжения до главного заземляющего зажима. Система TN-S при наличии пристроенной подстанции не требует повторного заземления, так как на этой подстанции имеется основной заземлитель. Такая система широко распространена в Европе.

Системы защитного отключения - это специальные электрические устройства, предназначенные для отключения электроустановок в случае появления опасности пробоя на корпус. Так как основной причиной замыкания на корпус токоведущих частей оборудования является нарушение изоляции, то системы защитного отключения осуществляют постоянный контроль за сопротивлением изоляции или токами утечки между токоведущими и нетоковедущими деталями конструкции оборудования. При достижении опасного уровня оборудование отключается до того момента, когда произойдет пробой на корпус и появится реальная опасность поражения электрическим током.

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

6.2 Электромагнитные излучения

Спектр электромагнитного излучения, оказывающий влияние на человека в производственных условиях, имеет диапазон волн от тысяч километров (переменный ток) до триллионной части миллиметра (космические энергетические лучи) [20]. Характер воздействия на человека электромагнитного излучения в разных диапазонах различен. В связи с этим значительно различаются и требования к нормированию различных диапазонов электромагнитного излучения.

В производственных условиях на работающего оказывает воздействие широкий спектр электромагнитного излучения. В зависимости от диапазона длин волн различают: электромагнитное излучение радиочастот, инфракрасное излучение, видимую область, ультрафиолетовое излучение, рентгеновское излучение, гамма-излучение и др.

При работе с персональным компьютером мы имеем дело с инфракрасным тепловым излучением. Влияние его сказывается на повышении температуры на рабочем месте. Решить данную проблему способна установка систем кондиционирования и вентиляции для поддержания нужного температурного баланса.

У современных ЖК мониторов уровень излучения невероятно мал по равнению со старыми моделями электро-лучевых приборов, которые в какой-то степени являются источником и рентгеновского излучения. Чтобы снизить излучение, мониторы должны включаться только в заземлённую электрическую розетку. Это относится и к самому компьютеру

6.3 Требования к эргономике, освещенности, уровню шума и микроклимату

Контрольными организациями определяются несколько предписаний, обеспечивающих безопасную работу персонала:

- при организации рабочих мест необходимо учитывать то, что конструкция рабочего места, его размеры и взаимное расположение его элементов должны соответствовать физиологическим и психофизиологическим данным человека, а также характеру. При выборе положения работающего необходимо учитывать: физическую тяжесть работ; технологические особенности процесса выполнения работ; статические нагрузки рабочей позы; время пребывания.

- при работе с АИС значительная часть работы делается в положении сидя, и организуя сидячее рабочее место необходимо обращать внимание на следующие факторы:

- высоту рабочей поверхности и размеры рабочей зоны, возможности регулировать эти параметры под индивидуальные особенности организма работающего;

- высоты и строения опорной поверхности (плоская опорная поверхность, седловидная опорная поверхность, наклонные распределенные опорные поверхности);

- пространства для ног.

- современные передовые тенденции в организации рабочего места должны учитывать индивидуальные особенности работника. Кресло, используемое при длительной работе за компьютером обязательно должно иметь подлокотники и широкую спинку высотой не менее чем от таза до плечевого пояса; рельеф спинки должен предусматривать наличие поясничной поддержки. Если конструкция кресла предусматривает регулировку наклона сиденья и спинки, а также высоту подлокотников - это очень хорошо; возможность изменять рабочее положение поможет работнику меньше утомляться.

- помещения с ПК должны иметь достаточное естественное и искусственное освещение. Общее освещение и специальное освещение (рабочие лампы) должно иметь такие параметры, количество и расположение источников света, чтобы были гарантированы необходимые условия освещения, достаточный контраст между монитором и окружением, исходя из вида деятельности и нагрузки на зрение пользователя. Мешающее ослепление и блики, а также отражение на мониторе или других предметах, должны быть устранены приспособлением обстановки рабочего помещения и рабочего места к расположению и техническим свойствам искусственных источников света.

- уровень шума на рабочих местах не должен превышать 50 дБ [21].

- оптимальные параметры микроклимата: температура воздуха 22-24 градуса, относительная влажность воздуха 40-60 %, скорость движения воздуха 0,1 м/c.

Помещения с ПК оборудуются системами отопления, кондиционирования воздуха или эффективной приточно-вытяжной вентиляцией, как уже отмечалось ранее.

6.4 Пожарная безопасность

Пожары в офисах, оборудованных ЭВМ представляют особую опасность, так как сопряжены с большими материальными потерями. Как известно пожар может возникнуть при взаимодействии горючих веществ, окисления и источников зажигания.

Горючими компонентами на ВЦ являются: строительные материалы для акустической и эстетической отделки помещений, перегородки, двери, полы, носители информации, изоляция кабелей и др.

Источниками зажигания могут быть электронные схемы от ЭВМ, приборы, применяемые для технического обслуживания, устройства электропитания, кондиционирования воздуха, где в результате различных нарушений образуются перегретые элементы.

Противопожарная защита - это комплекс организационных и технических мероприятий, направленных на обеспечение безопасности людей, на предотвращение пожара, ограничение его распространения, а также на создание условий для успешного тушения пожара.

Важнейшим средством защиты человека от опасных факторов пожара являются планировочные решения зданий. На лестницах, не имеющих естественного освещения, должен быть обеспечен подпор воздуха в лестничную клетку. В случае длинных коридоров без естественного освещения необходимо организовывать дымоудаление с путей эвакуации. Системы дымоудаления и подпора воздуха должны запускаться системой пожарной сигнализации.

Активная борьба с пожаром (тушение пожара) производится огнетушителями различного наполнения, песком и другими негорючими материалами, мешающими огню распространяться и гореть. В случае, если здание оборудовано автоматической установкой пожаротушения, необходимо использовать ее для тушения пожара.

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

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

Заключение

В ходе дипломного проектирования пройдены основные стадии, необходимые для создания автоматизированной информационной системы, основной характеристикой которой является наличие компонента мобильных навигационных технологий. На каждом этапе были получены соответствующие артефакты и сформулирован ряд выводов.

1. Проведенный анализ предметной области, выявил ряд проблем, с которыми сталкивается курьерская фирма в своей профессиональной деятельности:

- планирования маршрута перевозок, - ее следствием является снижение скорости доставки товара и потеря прибыли;

- отсутствие визуального контроля перевозок, приводящее к практической невозможности отследить, где в данный момент находится курьер; отсюда вытекает повышение сложности координации диспетчером состояния перевозок;

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

Выделенные проблемы определили архитектуру разрабатываемой системы и функциональные требования к ней.

2. Решено, что проектируемая автоматизированная система должна состоять из двух частей:

- автоматизированные мобильные рабочие места курьеров, функционирующие на коммуникаторах с установленной операционной системой Android; разработанный нами в процессе выполнения дипломного проекта программный комплекс выполняет ряд функций, необходимых курьеру для доставки товара: расчет оптимального маршрута, оценка необходимого времени доставки товара, организация связи с офисом фирмы, выраженная в отправке на диспетчерский пункт координат и статусного сообщения;

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

3. АРМ Курьера базируется на коммуникаторах, которые:

- предоставляют возможность оперативного и надежный доступа к определению текущего положения;

- снабжены мощным процессором и оперативной памятью для осуществления необходимых вычислений и достижения необходимого быстродействия.

- имеют поддержку стандарта GSM и GPRS для обеспечения связи и пакетной передачи данных.

- обладают качественным дисплеем для отображения информации в дневное и ночное время.

4. Предложено реализовать проект на базе операционной системы Android. Ее преимущества:

- полная открытость;

- универсальность;

- растущая популярность;

- динамичное развитие.

После того, как была изучена предметная область, определен ряд проблем, которые необходимо решить, выявлены необходимые составляющие информационной системы, выбрана аппаратная и программная основа для реализации проекта, стало возможным предъевить к проектируемой системе функциональные требования, которые в полной мере были реализованы:

1. АРМ Курьера выполняет следующие функции:

- определение местоположения и навигация;

- расчет оптимального маршрута;

- оценка необходимого времени для прохождения маршрута;

- установка статуса состояния перевозок.

2. АРМ Диспетчера осуществляет:

- отображение местоположения курьеров на карте;

- добавление нового курьера в базу данных;

- редактирование данных о курьере;

- удаление курьера из базы данных.

К особенностям реализации автоматизированной системы стоит отнести следующие положения:

1. В качестве основы для выполнения задач навигации и построения оптимального маршрута использованы векторные карты OpenStreetMap. Они характеризуются следующими свойствами:

- высокая степень детализации;

- актуальность отображаемых данных;

- наличие инструментов для свободного редактирования карты дорог;

- присутствие тегов, описывающих состояние дорожного покрытия и возможности прохождения пути тем или иным видом транспорта;

- поддержка картографического сервиса CloudMade, используемого для прокладки маршрута.

2. Графический интерфейс системы разработан согласно концепции «делай то, что я имею в виду» или DWIM (Do What I Mean). Благодаря этому, работа с системой интуитивно понятна. Доступ ко всем функциям приложения открывается из главного меню. Интерфейс прост, не перегружен лишними элементами, и вместе с тем функционален.

3. Среди особенностей развёртывания системы стоит выделить следующие положения:

- АРМ Курьера размещается на коммуникаторах с ОС Android c версией API не ниже 8 (Android 2.2);

- обязательным требованием к устройству является наличие приемника GPS сигнала;

- Интерфейс обмена данными GPS приемников реализован в соответствии со спецификацией NMEA;

- Передача данных от коммуникатора к диспетчеру осуществляется посредством GPRS (General Packet Radio Service - «пакетная радиосвязь общего пользования»).

4. АРМ Диспетчера имеет трехуровневую архитектуру и имеет следующие основные компоненты: клиентское приложение (тонкий клиент), подключенное к серверу приложений, который в свою очередь подключен к серверу базы данных.

- клиент - интерфейсный, графический компонент, который представляет приложение для конечного пользователя. Он не имеет связи с базой данных (по требованиям безопасности) и не нагружен бизнес-логикой (по требованиям масштабируемости). Работа с интерфейсом осуществляется через браузер;

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

- сервер базы данных обеспечивает хранение данных. В качестве системы управления базами данных использована MySQL.

4. В правильной с точки зрения безопасности, надёжности, масштабирования конфигурации сервер базы данных находится на выделенном компьютере (или кластере), к которому по сети подключены один или несколько серверов приложений, к которым, в свою очередь, по сети подключаются терминалы.

В ходе технико-экономического обоснования проекта были выявлены сильные и слабые стороны проекта, исследовано влияние различных внешних факторов на его успешность, определены пути его дальнейшего развития:

1. SWOT-анализ позволил выделить сильные стороны проекта:

- функциональность системы основана на широких возможностях современных коммуникаторов;

- проект разработан специально для динамично развивающейся ОС Android;

- функция построения оптимального маршрута удобна в использовании;

- система учитывает характеристики путей и качества дорожного покрытия;

- множество устройств с АИС объединены в единую систему, контролируемую с диспетчерского пункта.

Определены возможные пути развития проекта:

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

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

К наиболее важным внешним угрозам стоит отнести:

- рост конкуренции на рынке операционных систем для коммуникаторов;

- появление и развитие конкурирующих проектов, имеющих иное архитектурное решение.

Важно выделить и слабые стороны проекта, такие как отсутствие важной функции учета текущей плотности дорожного движения и инструментов ведения статистики.

2. К политическим, экономическим, социальным и технологическим факторам, определяющим эффективность внедрения и выявленных в результате PEST-анализа можно отнести:

- общую стабилизацию политической ситуации в стране, ведущую к формированию устойчивого общества потребления.

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

- увеличение влияния на имидж компании внедрения информационных технологий. Фирма, использующая систему способна в большей степени удовлетворять потребности клиентов, выполнять заказы быстрее и качественнее, с полной уверенностью того, что это будет обязательно оценено с положительной стороны.

- бурное развитие в области беспроводной коммуникации и систем обработки данных. Это создает многочисленные пути развития проекта в будущем, параллельно совершенствованию технологий.

3. Проектируемая автоматизированная информационная система позволит:

- снизить удельную стоимость единицы перевезенного груза за счет уменьшения доли холостых пробегов в общем пробеге транспортных средств;

- повысить качество и точность выполнения заказов на перевозку;

- сократить затраты на персонал;

- получать актуальную отчетность по различным показателям эффективности для принятия управленческих решений.

Несмотря на то, что проект был разработан для курьерских компаний, он может успешно стать базой для создания автоматизированных информационных систем, в которых используются современные мобильные технологии и, в частности, навигация. Это могут быть системы, внедряемые в службы такси, экстренные службы.

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

Список использованных источников

Голощапов А. Л. Google Android. Программирование для мобильных устройств / А. Л. Голощапов. - М. : БХВ, 2010. - 670 с.

Майер Р. Android. Программирование приложений для планшетных компьютеров и смартфонов / Р. Майер. - М. : Эксмо, 2011. - 672 с.

The Android Dev Guide : The Dev Guide provides a practical introduction to developing applications for Android [Электронный ресурс]. - Режим доступа: http://developer.android.com/guide/index.html. - Загл. с экрана.

The Developer's Guide [Электронный ресурс]. - Режим доступа: http://developer.android.com/guide/index.html. - Загл. с экрана.

Global Positioning System [Электронный ресурс]. - Режим доступа: http://www.navcen.uscg.gov. - Загл. с экрана.

Грекул В. И. Проектирование информационных систем: курс лекций. Учеб. пособие для студентов вузов / В. И. Грекул, Г. Н. Денищенко, Н. Л. Коровкина. - М. : Ун-т Информ. технологий, 2005. - 304 с.

Enabling GPS programatically in Android. [Электронный ресурс]. - Режим доступа: http://stackoverflow.com/questions/5715257/enabling-gps-programatically-in-android. - Загл. с экрана.

General Information on GPS [Электронный ресурс]. - Режим доступа: http://www.navcen.uscg.gov. - Загл. с экрана.

Буч Г. UML. Руководство пользования / Г. Буч, Д. Рамбо, А. Джекобсон. - СПб: Питер, 2007. - 630 с.

Гома Х. UML. Проектирование систем реального времени / Х. Гома. - М. : ДМК Пресс, 2002. - 704 с.

Грехем И. Объектно-ориентированные методы. Принципы и практика / И. Грехем. - М. : Вильямс, 2004. - 880 с.

Кьоу Дж. Объектно-ориентированное программирование / Дж. Кьоу, М. Джеанини. Учебный курс. - СПб. : Питер, 2005. - 238 с.

Описание операционной системы Android. [Электронный ресурс]. - Режим доступа: http://androidu.ru/android.

OpenStreetMap Wiki. [Электронный ресурс]. - Режим доступа: http://wiki.openstreetmap.org.

About CloudMade. [Электронный ресурс]. - Режим доступа: http://cloudmade.com/about.

Создание графических пользовательских интерфейсов. [Электронный ресурс]. - Режим доступа: http://cpu.h17.ru/net/6/.

SWOT анализ и стратегическое планирование. [Электронный ресурс]. - Режим доступа: http://www.swot-analysis.ru.

PEST анализ. [Электронный ресурс]. - Режим доступа: http://www.marketolog.biz/index.php?pid=49.

Электробезопасность. [Электронный ресурс]. - Режим доступа: http://electrosafety.ru/.

Электромагнитные излучения. Защита. [Электронный ресурс]. - Режим доступа: http://emi.ucoz.com/.

СНиП 23-03-2003. Защита от шума - М. : Госстандарт России : Изд-во стандартов, 2003. - 27 с.

Томас Х. Алгоритмы: построение и анализ / Х. Томас, Ч. И. Лейзерсон, Р. Л. Ривест, К. Штайн. - М. : Вильямс, 2006. - 1296 c.

Левитин А. В. Алгоритмы: введение в разработку и анализ / А. В. Левитин. - М. : Вильямс, 2006. - 1296 c.

Аргерих Л. Профессиональное PHP программирование / Л. Аргерих, В.Чой, Д. Коггсхол. - СПб. : Символ-Плюс, 2003 г. - 1048 с.

Виейра Р. Программирование баз данных Microsoft SQL Server 2008. Базовый курс / Р. Виейра. - М. : Вильямс, 2006. - 1296 c.

GPS/ГЛОНАСС мониторинг автотранспорта. [Электронный ресурс]. - Режим доступа: http://monitoring-gps.ru/.

Приложение А

Исходний код программы.

Курьерская часть

Класс GPS_Service

package app.arm.courier;

import java.io.IOException;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.ResponseHandler;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.BasicResponseHandler;

import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Service;

import android.content.Context;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.os.IBinder;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

public class GPS_Service extends Service implements LocationListener {

Intent in;

SharedPreferences mSettings;

public static final String APP_PREFERENCES = 'mysettings';

public static final String APP_PREFERENCES_STATUS_TEXT = 'status_text';

public static final String APP_PREFERENCES_STATUS = 'status';

public static final String APP_PREFERENCES_STATUS_ID = 'status_id';

public static final String APP_PREFERENCES_SERVER = 'server';

public static final String APP_PREFERENCES_LOGIN = 'login';

public static final String APP_PREFERENCES_PASSWORD = 'password';

String user;

String password;

String lat;

String lon;

String status;

String status_text;

String server;

String url;

@Override

public IBinder onBind(Intent arg0) {

// TODO Auto-generated method stub

return null;

}

@Override

public void onCreate()

{

super.onCreate();

//Связываем менеджер и сервис

LocationManager myManager = (LocationManager) getSystemService(LOCATION_SERVICE);

//Назначаем слушателя

myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 10, this);

in = new Intent('AppService');

in.putExtra('GPS_Lat','54.184841');

in.putExtra('GPS_Lon','45.174256');

in.putExtra('url','url');

sendBroadcast(in);

}

public void onLocationChanged(Location location) {

// TODO Auto-generated method stub

mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);

if(mSettings.contains(APP_PREFERENCES_LOGIN)) {

user = mSettings.getString(APP_PREFERENCES_LOGIN, '');

}

if(mSettings.contains(APP_PREFERENCES_PASSWORD)) {

password = mSettings.getString(APP_PREFERENCES_PASSWORD, '');

}

if(mSettings.contains(APP_PREFERENCES_STATUS)) {

status = java.net.URLEncoder.encode(mSettings.getString(APP_PREFERENCES_STATUS, ''));

}

if(mSettings.contains(APP_PREFERENCES_STATUS_TEXT)) {

status_text = java.net.URLEncoder.encode(mSettings.getString(APP_PREFERENCES_STATUS_TEXT, ''));

}

if(mSettings.contains(APP_PREFERENCES_SERVER)) {

server = mSettings.getString(APP_PREFERENCES_SERVER, '');

}

url = 'http://' + server + '/receiver.php?user='+user+'&password='+password+'&lat='+location.getLatitude()+'&lon='+location.getLongitude()+'&status='+status+'&status_text='+status_text;

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(url);

ResponseHandler<String> responseHandler = new BasicResponseHandler();

try {

httpclient.execute(httppost, responseHandler);

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

in = new Intent('AppService');

in.putExtra('GPS_Lat',''+location.getLatitude());

in.putExtra('GPS_Lon',''+location.getLongitude());

in.putExtra('url',''+url);

sendBroadcast(in);

}

public void onProviderDisabled(String arg0) {

// TODO Auto-generated method stub

}

public void onProviderEnabled(String arg0) {

// TODO Auto-generated method stub

}

public void onStatusChanged(String arg0, int arg1, Bundle arg2) {

// TODO Auto-generated method stub

}

}

Класс RouteScreen

package app.arm.courier;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

public class RouteScreen extends Activity {

EditText Txt;

Button Btn_count;

String url = '';

String API_key;

Float dist;

Float time;

Float lat;

Float lon;

String route;

String response;

double start_lat;

double start_lon;

double finish_lat;

double finish_lon;

String move_type;

MapView mMapView;

MapController mMapController;

PathOverlay myPath;

GridView gridview;

TextView txt_dist;

TextView txt_time;

List <Coord> routeList;

static class Coord {

Float lat;

Float lon;

public Coord(Float lat, Float lon) {

this.lat = lat;

this.lon = lon;

}

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.contacts);

Btn_count = (Button) findViewById(R.id.btn_count);

mMapView = (MapView) findViewById(R.id.openmapview);

txt_dist = (TextView) findViewById(R.id.txt_dist);

txt_time = (TextView) findViewById(R.id.txt_time);

start_lon = 45.174256;

start_lat = 54.184841;

API_key = '56eded06210846ecbb758f29e7c28152';

move_type = 'bicycle';

mMapController = mMapView.getController();

mMapView.setClickable(true);

mMapView.setTileSource(TileSourceFactory.MAPNIK);

mMapView.setBuiltInZoomControls(true);

mMapView.setMultiTouchControls(true);

mMapController.setZoom(13);

mMapController.setCenter(new GeoPoint((int) (start_lat * 1e6),(int) (start_lon * 1e6)));

routeList = new ArrayList<Coord>();

DummyOverlay dumOverlay = new DummyOverlay(this);

List<Overlay> listOfOverlays = mMapView.getOverlays();

listOfOverlays.clear();

listOfOverlays.add(dumOverlay);

startService(new Intent(this,GPS_Service.class));

}

public class DummyOverlay extends org.osmdroid.views.overlay.Overlay {

float Lat;

float Lon;

Context con;

private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

public DummyOverlay(Context ctx) {

super(ctx); // TODO Auto-generated constructor stub

this.con = ctx;

}

protected void draw(Canvas c, MapView osmv, boolean shadow) {

//paint = new Paint(Paint.ANTI_ALIAS_FLAG);

//c.drawCircle(0, 0, 10, this.paint);

}

public boolean onDoubleTap(MotionEvent e, MapView mapView) {

int zoomLevel = mMapView.getZoomLevel();

mMapController.setZoom(zoomLevel);

IGeoPoint point = mapView.getProjection().fromPixels((int)e.getX(), (int)e.getY());

Lat = (float) (point.getLatitudeE6()/1E6);

Lon = (float) (point.getLongitudeE6()/1E6);

final ArrayList items = new ArrayList();

items.add(new OverlayItem('1', '2', new GeoPoint(point.getLatitudeE6(), point.getLongitudeE6())));

ItemizedIconOverlay MyLocationOverlay = new ItemizedIconOverlay(con, items, null);

mMapView.getOverlays().add(MyLocationOverlay);

mMapController.animateTo(point);

routeList.add(new Coord(Lat, Lon));

return true;// This stops the double tap being passed on to the mapview

}

}

public void Btn_count_Click(View v) {

if (routeList.size()>1) {

if (routeList.size()==2) {

start_lat = routeList.get(0).lat;

start_lon = routeList.get(0).lon;

finish_lat = routeList.get(1).lat;

finish_lon = routeList.get(1).lon;

url = 'http://routes.cloudmade.com/'+API_key+'/api/0.3/'+start_lat+','+start_lon+','+finish_lat+','+finish_lon+'/'+move_type+'.js?lang=ru&units=km';

}

if (routeList.size()>2) {

start_lat = routeList.get(0).lat;

start_lon = routeList.get(0).lon;

finish_lat = routeList.get(routeList.size()-1).lat;

finish_lon = routeList.get(routeList.size()-1).lon;

url='';

url = 'http://routes.cloudmade.com/'+API_key+'/api/0.3/'+start_lat+','+start_lon+',%5B';

for (int i=1; i<routeList.size()-1;i++) {

url = url + routeList.get(1).lat+',' + routeList.get(1).lon;

if (i<routeList.size()-2) url = url+',';

}

url = url + '%5D,'+finish_lat+','+finish_lon+'/'+move_type+'.js?lang=ru&units=km';

}

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(url);

try {

ResponseHandler<String> responseHandler = new BasicResponseHandler();

response = httpclient.execute(httppost, responseHandler);

response = response.replace (''', ' ');

Pattern p = Pattern.compile('.*total_distance :(\d+).*total_time :(\d+).*route_geometry :\[([\[\d+\.\d+\,\d+\.\d+\]\,?]+)\].*');

Matcher m = p.matcher(response);

if (m.matches()) {

dist = Float.parseFloat(m.group(1));

time = Float.parseFloat(m.group(2));

route = m.group(3);

}

route = route.substring(1,route.length()-2);

String[] coord_pair = route.split('\],\[');

List <Coord> coordList = new ArrayList<Coord>();

p = Pattern.compile('(\d+\.\d+)\,(\d+\.\d+)');

for (int i=0; i<coord_pair.length; i++) {

m = p.matcher(coord_pair[i]);

if (m.matches()) {

lat = Float.parseFloat(m.group(1));

lon = Float.parseFloat(m.group(2));

coordList.add(new Coord(lat, lon));

}

}

PathOverlay myPath = new PathOverlay(Color.GREEN, this);

myPath.addPoint(new GeoPoint((int) (start_lat * 1e6),(int) (start_lon * 1e6)));

for (int i=0; i<coordList.size();i++) {

myPath.addPoint(new GeoPoint((int) (coordList.get(i).lat * 1e6),(int) (coordList.get(i).lon * 1e6)));

}

myPath.addPoint(new GeoPoint((int) (finish_lat * 1e6),(int) (finish_lon * 1e6)));

mMapController.animateTo(new GeoPoint((int) (start_lat * 1e6),(int) (start_lon * 1e6)));

txt_dist.setText(''+(int)Math.floor(dist/1000)+'км '+(int)(dist%1000)+'м.');

txt_time.setText(''+(int)Math.floor(time/60)+'мин '+(int)(time%60)+'сек.');

mMapView.getOverlays().add(myPath);

} catch (ClientProtocolException e) { } catch (IOException e) { }

}

else{ }

}

}

Класс SettingsScreen

package app.arm.courier;

import org.osmdroid.views.MapView;

import android.app.Activity;

import android.content.Context;

public class SettingsScreen extends Activity {

public static final String APP_PREFERENCES = 'mysettings'; // имя файла настроек

public static final String APP_PREFERENCES_SERVER = 'server'; // тип String

public static final String APP_PREFERENCES_LOGIN = 'login'; // тип String

public static final String APP_PREFERENCES_PASSWORD = 'password'; // тип String

SharedPreferences mSettings;

EditText serverText;

EditText loginText;

EditText passwordText;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.settings);

mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);

serverText = (EditText)findViewById(R.id.editText1);

loginText = (EditText)findViewById(R.id.editText2);

passwordText = (EditText)findViewById(R.id.editText3);

startService(new Intent(this,GPS_Service.class));

if(mSettings.contains(APP_PREFERENCES_SERVER)) {

serverText.setText(mSettings.getString(APP_PREFERENCES_SERVER, ''));

}

if(mSettings.contains(APP_PREFERENCES_LOGIN)) {

loginText.setText(mSettings.getString(APP_PREFERENCES_LOGIN, ''));

}

if(mSettings.contains(APP_PREFERENCES_PASSWORD)) {

passwordText.setText(mSettings.getString(APP_PREFERENCES_PASSWORD, ''));

}

}

public void but_set_Click(View v) {

String strServerText = serverText.getText().toString();

String strLoginText = loginText.getText().toString();

String strPasswordText = passwordText.getText().toString();

Editor editor = mSettings.edit();

editor.putString(APP_PREFERENCES_SERVER, strServerText);

editor.putString(APP_PREFERENCES_LOGIN, strLoginText);

editor.putString(APP_PREFERENCES_PASSWORD, strPasswordText);

editor.commit();

}

}

Класс StatusScreen

package app.arm.courier;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.os.Bundle;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.EditText;

import android.widget.Spinner;

public class StatusScreen extends Activity {

public static final String APP_PREFERENCES = 'mysettings'; // имя файла настроек

public static final String APP_PREFERENCES_STATUS_TEXT = 'status_text'; // тип String

public static final String APP_PREFERENCES_STATUS = 'status'; // тип String

public static final String APP_PREFERENCES_STATUS_ID = 'status_id'; // тип String

public static final String APP_PREFERENCES_SERVER = 'server'; // тип String

public static final String[] status_list = {'Свободен','Выполняю заказ','Перерыв в работе','Авария'};

SharedPreferences mSettings;

Spinner spinner;

EditText statusText;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.status);

mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);

statusText = (EditText)findViewById(R.id.editText1);

spinner = (Spinner) findViewById(R.id.spinner1);

startService(new Intent(this,GPS_Service.class));

ArrayAdapter<String> adapter = new ArrayAdapter<String>(

this, android.R.layout.simple_spinner_item, status_list);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

if(mSettings.contains(APP_PREFERENCES_STATUS_ID)) {

spinner.setSelection(Integer.parseInt(mSettings.getString(APP_PREFERENCES_STATUS_ID, '')));

}

if(mSettings.contains(APP_PREFERENCES_STATUS_TEXT)) {

statusText.setText(mSettings.getString(APP_PREFERENCES_STATUS_TEXT, ''));

}

}

public void but_set_Click(View v) {

String strStatusText = statusText.getText().toString();

String strStatus = spinner.getSelectedItem().toString();

String strStatusID = Integer.toString(spinner.getSelectedItemPosition());

Editor editor = mSettings.edit();

editor.putString(APP_PREFERENCES_STATUS_TEXT, strStatusText);

editor.putString(APP_PREFERENCES_STATUS, strStatus);

editor.putString(APP_PREFERENCES_STATUS_ID, strStatusID);

editor.commit();

}

}

Класс CourierARMActivity

package app.arm.courier;

import android.app.Activity;

import android.location.Location;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

public class CourierARMActivity extends Activity {

/** Called when the activity is first created. */

Button But_nav;

Button But_stat;

Button But_cont;

Button But_book;

Button But_obj;

Button But_set;

Button But_ext;

BroadcastReceiver service;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

But_nav = (Button) findViewById(R.id.but_nav);

But_stat = (Button) findViewById(R.id.but_stat);

But_cont = (Button) findViewById(R.id.but_cont);

But_obj = (Button) findViewById(R.id.but_obj);

But_set = (Button) findViewById(R.id.but_set);

But_ext = (Button) findViewById(R.id.but_ext);

IntentFilter filter = new IntentFilter();

filter.addAction('AppService');

if(service!= null) {

service = new BroadcastReceiver()

{

@Override

public void onReceive(Context context, Intent intent)

{

if(intent.getAction().equals('AppService'))

{

Log.i('AppService',intent.getStringExtra('GPS_Lat'));

Log.i('AppService',intent.getStringExtra('GPS_Lon'));

}

}

};

registerReceiver(service, filter);

//Запуск службы

startService(new Intent(this,GPS_Service.class));

}

}

public void but_nav_Click(View v) {

Intent intent = new Intent();

intent.setClass(this, NavigationScreen.class);

startActivity(intent);

if(service!= null){unregisterReceiver(service);}

stopService(new Intent(this,GPS_Service.class));

}

public void but_stat_Click(View v) {

Intent intent = new Intent();

intent.setClass(this, StatusScreen.class);

startActivity(intent);

if(service!= null){unregisterReceiver(service);}

stopService(new Intent(this,GPS_Service.class));

}

public void but_cont_Click(View v) {

Intent intent = new Intent();

intent.setClass(this, ContactsScreen.class);

startActivity(intent);

if(service!= null){unregisterReceiver(service);}

stopService(new Intent(this,GPS_Service.class));

}

public void but_obj_Click(View v) {

Intent intent = new Intent();

intent.setClass(this, ObjectsScreen.class);

startActivity(intent);

if(service!= null){unregisterReceiver(service);}

stopService(new Intent(this,GPS_Service.class));

}

public void but_set_Click(View v) {

Intent intent = new Intent();

intent.setClass(this, SettingsScreen.class);

startActivity(intent);

if(service!= null){unregisterReceiver(service);}

stopService(new Intent(this,GPS_Service.class));

}

public void but_ext_Click(View v) {

if(service!= null){unregisterReceiver(service);}

stopService(new Intent(this,GPS_Service.class));

android.os.Process.killProcess(android.os.Process.myPid());

}

@Override

protected void onDestroy()

{

super.onDestroy();

if(service!= null){unregisterReceiver(service);}

stopService(new Intent(this,GPS_Service.class));

}

}

Приложение Б

Исходний код программы.

Диспетчерская часть

Receiver.php

<?

/** Имя базы данных */

define('DB_NAME', LOGIN_default');

/** Имя пользователя MySQL */

define('DB_USER', LOGIN_default');

/** Пароль к базе данных MySQL */

define('DB_PASSWORD', 'PASSWORD');

/** Имя сервера MySQL */

define('DB_HOST', '127.0.0.1');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ('Невозможно подключиться к MySQL');

$user = mysql_real_escape_string($_GET['user']);

$password = mysql_real_escape_string($_GET['password']);

$lat = mysql_real_escape_string($_GET['lat']);

$lon = mysql_real_escape_string($_GET['lon']);

$status = mysql_real_escape_string($_GET['status']);

$status_text = mysql_real_escape_string($_GET['status_text']);

mysql_select_db (DB_NAME);

// http://yamashkin.ru/?user=user&password=pass&lat=45.324&lon=54.634345&status='авария'&status_text='отличный день!'

$query = 'SELECT * FROM USERS WHERE USER='$user' AND PASSWORD='$password'';

$aut = mysql_query ($query) or die ('Невозможно добавить');

$row = mysql_fetch_row($aut);

$id = $row[0];

if ($row[0]>=1)

{

mysql_query('SET NAMES 'utf8'');

$query = 'INSERT INTO USER_STATE (ID_USER, LAT, LON, STATUS, STATUS_TEXT) VALUES ('$id','$lat','$lon','$status','$status_text')';

mysql_query ($query) or die ('Невозможно добавить');

}

else

{

}

?>

Dispatcher.php

<html>

<head>

<title>Windrose 2012 Dispatcher</title>

<link rel='stylesheet' href='/leaflet/dist/leaflet.css' />

<link rel='stylesheet' href='/style.css' />

<!--[if lte IE 8]>

<link rel='stylesheet' href='/leaflet/dist/leaflet.ie.css' />

<![endif]-->

<script src='/leaflet/dist/leaflet.js'></script>

<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js'></script>

<script src='/ts/jquery.tablesorter.js'></script>

</head>

<body>

<div id='map' style='height: 600px'></div>

<script>

var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/99558b6adf554346afa9ca70bf6104dc/{styleId}/256/{z}/{x}/{y}.png',

cloudmadeAttribution = 'Windrose 2012 Dispatcher',

cloudmadeOptions = {maxZoom: 18, attribution: cloudmadeAttribution};

var minimal = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 22677}),

midnightCommander = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 999}),

normal = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 1})

var map = new L.Map('map', {

center: new L.LatLng(54.184841, 45.174256),

zoom: 13,

layers: [normal]

});

var baseMaps = {

'Minimal': minimal,

'Night View': midnightCommander,

'Normal': normal

};

var layersControl = new L.Control.Layers(baseMaps);

map.addControl(layersControl);

var last_marker =[0,0,0,0,0,0,0,0,0];

var marker = new Array();

var LeafIcon = L.Icon.extend({

iconUrl: '/img/leaf-green.png',

shadowUrl: '/img/leaf-shadow.png',

iconSize: new L.Point(38, 95),

shadowSize: new L.Point(68, 95),

iconAnchor: new L.Point(22, 94),

popupAnchor: new L.Point(-3, -76)

});

var greenIcon = new LeafIcon(),

redIcon = new LeafIcon('/img/leaf-red.png'),

orangeIcon = new LeafIcon('/img/leaf-orange.png');

blueIcon = new LeafIcon('/img/leaf-blue.png');

function show()

{

$.ajax({

url: 'get_user.php',

cache: false,

dataType: 'json',

success: function(response){

table_content = '<table id='user_table'><thead><tr><th class='th_name'>Имя</th><th class='th_phone'>Контактный телефон</th><th class='th_s'>Статус</th><th class='th_sm'>Статусное сообщение</th><th class='th_tm'>Время</th></tr></thead><tbody>';

for (i=0;i<response.length;i++)

{

if (response[i] != false) {

markerLocation = new L.LatLng(parseFloat(response[i][2]), parseFloat(response[i][3]));

if (last_marker[i] == 0) {

if (response[i][4] == 'Свободен') marker[i] = new L.Marker(markerLocation, {icon: greenIcon});

if (response[i][4] == 'Выполняю заказ') marker[i] = new L.Marker(markerLocation, {icon: blueIcon});

if (response[i][4] == 'Перерыв в работе') marker[i] = new L.Marker(markerLocation, {icon: orangeIcon});

if (response[i][4] == 'Авария') marker[i] = new L.Marker(markerLocation, {icon: redIcon});

map.addLayer(marker[i]);

}

if (last_marker[i] == 1) {

marker[i].setLatLng(markerLocation);

}

last_marker[i] = 1;

marker[i].bindPopup('<b>'+response[i][0]+'</b><br />'+response[i][5]);

table_content += '<tr><td>'+response[i][0]+'</td><td>'+response[i][1]+'</td><td>'+response[i][4]+'</td><td>'+response[i][5]+'</td><td>'+response[i][6]+'</td></tr>';

}

else

{

last_marker[i] = 0;

}

}

table_content += '</tbody></table>';

document.getElementById('test').innerHTML=table_content;

}

});

}

$(document).ready(function(){

show();

setInterval('show()',1000);

});

</script>

<div id='test'></div>

</body>

</html>

Get_user.php

<?

function json_encode_x ($in) {

return html_entity_decode(

preg_replace(

'/\&#x([0-9a-fA-F]{3});/',

'\u0$1',

preg_replace(

'/\u0([0-9a-fA-F]{3})/',

'&#x$1;',

json_encode($in)

)

),

ENT_NOQUOTES,

'utf-8'

);

}

/** Имя базы данных */

define('DB_NAME', LOGIN_default');

/** Имя пользователя MySQL */

define('DB_USER', LOGIN_default');

/** Пароль к базе данных MySQL */

define('DB_PASSWORD', PASSWORD);

/** Имя сервера MySQL */

define('DB_HOST', '127.0.0.1');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ('Невозможно подключиться к MySQL');

mysql_select_db (DB_NAME);

mysql_query ('set names utf8');

$query = 'SELECT * FROM USERS';

$result = mysql_query ($query) or die ('Ошибка');

$id_array = array();

while ($row = mysql_fetch_row($result))

{

array_push ($id_array,$row[0]);

}

$locate_array = array();

foreach ($id_array as $key => $value) {

$query = 'SELECT USERS.NAME, USERS.PHONE, USER_STATE.LAT, USER_STATE.LON, USER_STATE.STATUS, USER_STATE.STATUS_TEXT, USER_STATE.TIME FROM USERS,USER_STATE WHERE USERS.ID_USER=USER_STATE.ID_USER AND USERS.ID_USER = '$value' ORDER BY USER_STATE.TIME DESC LIMIT 1';

$result = mysql_query ($query) or die ('Ошибка');

$row = mysql_fetch_row($result);

array_push ($locate_array,$row);

}

echo json_encode_x($locate_array);

?>

ref.by 2006—2025
contextus@mail.ru