Разработка геоинформационной системы

Обзор технологий и систем геоинформационных систем. Системное и функциональное проектирование программного модуля, его разработка с использованием сред программирования Visual C++ 6.0, Qt 3.3.3. Технико-экономическое обоснование данного процесса.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 13.03.2011
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

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

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

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

ГИС хранит информацию о реальном мире в виде набора тематических слоев, которые объединены на основе географического положения.

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

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

Бурное развитие геоинформатики порождает немало приложений, в которых используется та или иная цифровая модель рельефа (ЦМР) земной поверхности. Подавляющее число таких приложений, например, прогноз наводнений, обеспечение безопасности полетов, объемное представление карты на экране компьютера и т.п., требуют по возможности наиболее точных моделей. Зачастую требования по точности ЦМР можно удовлетворить, создавая модели на основе цифровых топографических карт соответствующего масштаба, содержащих информацию о рельефе в виде изолиний, отметок высот, отметок урезов воды и т.п. Процесс создания модели рельефа (в триангуляционном или матричном виде) по цифровым данным такого типа в настоящее время хорошо изучен и реализован во многих ГИС-пакетах.

Цифровая модель рельефа, ЦМР - это средство цифрового представления 3-мерных пространственных объектов (поверхностей, рельефов) в виде трехмерных данных как совокупности высотных отметок или отметок глубин и иных значений аппликат (координаты Z) в узлах регулярной сети с образованием матрицы высот, нерегулярной треугольной сети или как совокупность записей горизонталей (изогипс, изобат) или иных изолиний.

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

В процессе дипломного проектирования решаются следующие задачи:

- обзор технологий и систем ГИС;

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

- разработка программного модуля с использованием сред программирования Visual C++ 6.0, Qt 3.3.3;

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

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

- технико-экономическое обоснование;

- разработка раздела по охране труда.

геоинформационный программирование модуль система

1. Обзор геоинформационных систем

1.1 Понятие о геоинформационных системах и технологиях

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

Основное отличие ГИС от просто информационной системы в том что, ГИС - информационная система, обеспечивающая сбор, хранение, обработку, доступ, отображение и распространение пространственно координированных (пространственных) и атрибутивных данных. ГИС содержит данные о пространственных объектах в форме их цифровых представлений (векторных, растровых), включает соответствующий задачам набор функциональных возможностей ГИС, в которых реализуются операции геоинформационных технологий, поддерживается программным, аппаратным, информационным, нормативно-правовым, кадровым и организационным обеспечением. ГИС различаются предметной областью информационного моделирования, к примеру, городские ГИС, или муниципальные ГИС, природоохранные ГИС, среди них особое наименование, как особо широко распространенные, получили земельные информационные системы. Проблемная ориентация ГИС определяется решаемыми в ней задачами (научными и прикладными), среди них инвентаризация ресурсов (в том числе кадастр), анализ, оценка, мониторинг, управление и планирование, поддержка принятия решений. Интегрированные ГИС совмещают функциональные возможности ГИС и систем цифровой обработки изображений (данных дистанционного зондирования) в единой интегрированной среде. Пространственно-временные ГИС оперируют пространственно-временными данными. Реализация геоинформационных проектов, создание ГИС в широком смысле слова, включает этапы: исследования, технико-экономическое обоснование, оценку соотношения «затраты / прибыль», системное проектирование ГИС, тестирование на небольшом территориальном фрагменте, создание опытного образца, внедрение ГИС в эксплуатацию и использование. Научные, технические, технологические и прикладные аспекты проектирования, создания и использования ГИС изучаются наукой геоинформатикой.

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

Работающая ГИС включает в себя пять ключевых составляющих: аппаратные средства, программное обеспечение, данные, исполнители и методы [1].

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

Программное обеспечение ГИС содержит функции и инструменты, необходимые для хранения, анализа и визуализации географической (пространственной) информации. Ключевыми компонентами программных продуктов являются: инструменты для ввода и оперирования географической информацией; СУБД; инструменты поддержки пространственных запросов, анализа и визуализации (отображения); ГИП для легкого доступа к инструментам.

Данные - это вероятно наиболее важный компонент ГИС. Данные о пространственном положении объектов (географические данные) и связанные с ними табличные данные могут собираться и подготавливаться самим пользователем, либо приобретаться у поставщиков на коммерческой или другой основе. В процессе управления пространственными данными ГИС интегрирует пространственные данные с другими типами и источниками данных, а также может использовать СУБД, применяемые многими организациями для упорядочивания и поддержки имеющихся в их распоряжении данных.

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

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

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

GIS MapInfo - содержит всю информацию (графическую, текстовую и др.) в таблицах. Пользователь управляет процессами создания картографической информации и тематических слоев через графический интерфейс, который выражается в виде меню и системы контекстных подсказок. MapInfo имеет встроенную реляционную СУБД, работающую по SQL-запросам с файлами в различных форматах.

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

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

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

ARC/INFO - профессиональная ГИС для решения задач структурирования и управления данными, ведения базы данных. Работает на разных платформах. ГИС для рабочей группы (уровня отдела или небольшой фирмы, в которых постоянно ведется разработка ГИС проектов). По мере расширения сферы деятельности и усложнения выполняемых задач целесообразно распределить их решение между несколькими продуктами. Такая ГИС обычно базируется на разделяемой базе пространственных данных, поддерживаемой и обновляемой с помощью разных продуктов и обеспечивающей работу «конечных» пользователей на персональных компьютерах в пределах данной рабочей группы или отдела. Конкретное предлагаемое решение зависит от типов используемых данных, выбранной программной среды, аппаратного обеспечения и ряда других факторов. ГИС уровня предприятия (корпоративная ГИС). Обеспечивает всю организацию пространственной информационной поддержкой. В такую ГИС можно встроить сотни специализированных приложений с дополнительными средствами пространственных запросов, расширенного анализа, отображения и представления данных. В качестве компонентов системы такого уровня могут использоваться серверы пространственных данных:

Spatial Database Engine (SDE) - открытая среда управления пространственными данными, ядро корпоративной распределенной ГИС, как правило, вместе с внешней реляционной СУБД;

ГИС широко используется в интернете. Глобальное картографическое решение. ESRI предоставляет два стандартных решения задачи публикации карт в сети Интернет. MapObjects Internet Map Server обеспечивает технологические средства для доступа к базе данных ГИС через Интернет, разработки собственных приложений для создания карт по имеющимся в вашей организации данным, поддержки пространственных запросов к Web серверу с любого места в сети. ArcView Internet Map Server предоставляет в ваше распоряжение готовые средства для распространения картографических материалов через Интернет без необходимости дополнительного программирования.

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

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

- загрузка, отображение цифровой карты местности (ЦКМ), прокрутка и зуммирование изображения загруженной цифровой карты местности (с использованием функций существующей библиотеки картографического обеспечения);

- создание, редактирование и сохранение списка стандартных высот для объектов цифровой карты местности (по видам объектов, согласно классификатора условных знаков);

- расчет матрицы превышений на фоне цифровой карты местности (с учетом списка стандартных высот, соответствующих данному участку местности);

- создание и редактирование матрицы корректировок.

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

- данных о рельефе, гидрографии, растительности;

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

Исходными данными для программного модуля являются:

- несколько файлов цифровой карты местности с расширением UTP;

- файл - классификатор условных знаков объектов местности с расширением KLS;

- файл стандартных высот объектов местности (по видам объектов, согласно классификатора условных знаков);

- файл матрицы высот с расширением BMH;

- файл матрицы превышения с расширением BMH2.

Форматы файлов UTP, KLS, BMH, BMH2 являются внутренними для существующей библиотеки картографического обеспечения. Библиотека содержит все необходимые функции для работы с файлами указанных форматов.

Файлы цифровой карты местности содержат пространственные, количественные, качественные и описательные характеристики объектов. Один из предоставляемых файлов является базовым, т.е. покрывает весь интересующий регион и содержит минимальный набор объектов. Остальные файлы ЦКМ соответствуют листам карт масштаба 1:200000 или 1:500000.

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

Файл классификатора объектов карты содержит данные об их представлении на экране при отображении ЦКМ в зависимости от масштаба отображения.

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

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

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

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

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

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

Разрабатываемый программный модуль должен функционировать в среде операционной системы Microsoft Windows 2000/XP, желательно также предусмотреть при разработке интерфейса возможность функционирования программы в операционной системе RedHat Linux 7.3/8. Поэтому предлагается интерфейс приложения разрабатывать с использованием библиотеки QT (версии 3.1.2/3.3.3).

2. Системное проектирование

2.1 Разработка структуры программного модуля

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

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

· один или несколько файлов цифровой карты местности с расширением UTP;

· файл - классификатор условных знаков объектов местности с расширением KLS;

· файл матрицы высот с расширением BMH.

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

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

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

Обобщенная структурная схема программного модуля представлена на черт. РТДП 5.000.002.

Разработка пользовательского интерфейса программы будет осуществляться с помощью средств библиотеки Qt.

GUI инструментарий, именуемый Qt, предоставляет норвежская компания TrollTech. GUI означает «Графический Пользовательский Интерфейс» («Graphical User Interface»), поэтому базирующиеся на Qt приложения представляются кнопками, окнами и т.п. Такие приложения осуществляют взаимодействие с пользователем, представляя в визуальной форме выполняемые функции. Этот инструментарий необходим для разработки графических приложений, которые используют X-Window интерфейс в Unix системах, потому что X не содержит предопределенного пользовательского интерфейса. И хотя другие наборы инструментов также позволяют создавать пользовательский интерфейс, Qt предоставляет некоторые технические возможности, которые делают разработку приложений очень простой. Кроме того, Qt инструментарий также доступен для Microsoft Windows систем, что позволяет разработчикам выпускать приложения для обеих платформ.

В настоящее время Qt - это библиотека классов C++ и набор инструментального программного обеспечения, предназначенных для построения многоплатформенных приложений с графическим интерфейсом и исповедующих принцип «написав однажды - компилируй в любом месте». Qt представляет собой единую платформу для приложений, которые могут работать под управлением Windows 95/98/Me/2000/XP, Mac OS X, Linux, Solaris, HP-UX и других версий Unix.

Qt предоставляет:

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

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

- набор предопределенных GUI-элементов, называемых «widgets», которые могут быть легко использованы для создания видимых элементов;

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

В качестве языка программирования выбран C++ как язык, наилучшим образом сочетающий в себе поддержку объектно-ориентированной технологии программирования и возможности написания кода на достаточно низком уровне, что позволяет достичь оптимального быстродействия разрабатываемого программного обеспечения. Одним из современных инструментальных средств для разработки Windows-приложений является пакет Microsoft Visual C++ 6.0. Visual C++ предоставляет удобную среду визуального объектно-ориентированного программирования, что и обусловило выбор именно этого пакета в качестве среды разработки.

2.2 Логическая структура библиотеки картографии

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

Программное обеспечение состоит из следующих элементов:

- набор классов и функций, составляющих ядро библиотеки;

- класс MKartaInterface, предоставляющий функции управления картой.

Для хранения карты на диске используются файлы в формате UTP. Формат UTP предполагает наличие utp-файла, а также kls-файл, содержащий классификатор. Также возможно использование bmh-файла с матрицей высот.

Логически карта состоит из паспорта, ссылки на классификатор (в виде термина) и одного или нескольких слоёв, каждый из которых, в свою очередь, состоит из объектов.

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

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

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

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

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

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

- дополнительные сведения о нем (атрибуты).

3. Функциональное проектирование

3.1 Проектирование структуры классов

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

Класс MainWindow - описывает главное окно программного модуля.

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

Класс Tasks - обрабатывает нажатие функциональных клавиш в главном окне программного модуля.

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

Класс EditDialog - описывает работу диалога редактирования стандартных высот.

Класс Matrix - реализует работу с матрицей превышений и матрицей корректировок.

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

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

Взаимодействие всех классов осуществляется с помощью следующих глобальных переменных объявленных в main.cpp как указатели на объекты соответствующих классов:

- MKartaInterface *karta - объект, реализующий функции взаимодействия с картой;

- Matrix *matrix - текущая обрабатываемая матрица превышений;

- Matrix *correctionMatrix - текущая обрабатываемая матрица корректировок;

- MainWindow *window - главное окно приложения;

- Tasks *tasks - объект для обработки нажатия клавиш в главном окне.

Классы, реализующие диалоги программного модуля

Класс MainWindow - с помощью этого класса происходит описание главного окна программного модуля. Основные функции данного класса:

- MainWindow() - конструктор, который вызывается при создании окна;

- bool eventFilter (QObject *o, QEvent *e) - функция обработки движения мыши;

- void onExit() - функция выполняет последовательность операций при закрытии главного окна программы.

Класс EditDialog - с помощью этого класса происходит описание диалога редактирования стандартных высот. Основные функции этого класса:

- EditDialog() - конструктор, который вызывается при создании диалога;

- void addButtonClick() - функция обработки добавления элементов в список;

- void remButtonClick() - функция обработки удаления элементов из списка;

- void listViewClick (QListViewItem *item) - функция обработки выбора раздела классификатора;

- void updateTables (QString zs, QString razd) - функция обновления списка высот для знаков выбранного раздела классификатора;

- void valueChanged (int row, int col) - функция обработки изменения значения высоты в списке.

Класс ComputeDialog - с помощью этого класса происходит описание диалога расчета матрицы превышений для нескольких листов карт местности. Основные функции данного класса:

- ComputeDialog (QWidget* parent = 0, const char* name = «ComputeDialog», bool modal = FALSE, WFlags fl = 0) - конструктор, который вызывается при создании диалога;

- void start() - функция обработки запуска процедуры расчета;

- void stop() - функция обработки остановки процедуры расчета;

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

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

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

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

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

- надпись - используется для подписывания элементов интерфейса - класс QLabel;

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

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

- индикатор прогресса - класс QProgressBar.

Кроме того, использованы некоторые специальные классы Qt:

- QMainWindow - для создания главного окна приложения (класс MainWindow);

- QTable - для организации таблиц с данными;

- QDialog - для организации окон модальных диалогов (классы EditDialog, ComputerDialog).

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

Программа Qt Designer предназначена для разработки и реализации графического пользовательского интерфейса приложения. С ее помощью также можно сгенерировать программный код, обеспечивающий реализацию функций разработанного интерфейса. В отличие от Microsoft Visual Studio, помещающего описание ресурсов диалогового окна в текстовый файл с расширением.rc, среда разработки Qt создает файл с расширением.ui и помещает в него описание диалогового окна в формате, совместимом с XML. Этот файл включается в makefile данного проекта, создающий на его основе соответствующие файлы заготовок и реализации класса диалогового окна.

Вид главного окна приложения с описанием элементов представлен на рисунке 3.1.

Рисунок 3.1. Главное окно программы

Вид диалогового окна для редактирования списка стандартных высот с описанием элементов представлен на рисунке 3.2.

Рисунок 3.2. Диалоговое окно для редактирования списка стандартных высот

Классы, реализующие функции программного модуля

Класс ComputeThread - с помощью этого класса происходит расчет матрицы превышений для нескольких листов карт местности. Основные функции этого класса:

- ComputeThread (QObject *obj) - конструктор, который вызывается при создании объекта;

- void start() - функция запуска процедуры расчета;

- void stop() - функция остановки процедуры расчета;

- void run() - функция выполнения процедуры расчета.

Класс Heights - с помощью этого класса происходит работа со списком стандартных высот. Основные функции этого класса:

- void save (MString name) - функция сохранения в файл;

- bool load (MString name) - функция загрузки из файла;

- void clear() - функция обеспечивающая удаление всех объектов, очистку списка;

- iterator find (const HObj &o) - функция обеспечивающая поиск объекта в списке;

- void insert (const HObj &o) - функция обеспечивающая вставку объекта в список;

- void erase (const HObj &o) - функция обеспечивающая удаление объекта;

Структура HObj реализует объекты составляющие список стандартных высот. Для каждого объекта хранятся код, название и высота (превышение). Конструктор обеспечивает первоначальную инициализацию данных.

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

- mousePressEvent() - функция обработки нажатие мыши при построении матрицы корректировки;

- void zoom (int left, int top, int right, int bottom) - функция обработки процедуры зуммирования;

- void prevView() - функция обработки процедуры возврата к предыдущему виду;

- void defaultView() - функция обработки процедуры отображения всей карты;

- void updateHeights() - функция осуществляющая перерисовку (отображение) матриц превышений и корректировки на текущем отображаемом фрагменте карты;

- void drawMap() - функция обработки процедуры отрисовки карты

Класс Tasks - с помощью этого класса происходит обработка нажатия функциональных кнопок в главном окне программного модуля. Основные функции этого класса:

- void loadMap() - функция, обрабатывающая нажатие кнопки открыть карту;

- void openFolder() - функция, обрабатывающая нажатие кнопки открыть папку;

- void loadKls() - функция, обрабатывающая нажатие кнопки открыть классификатор;

- void loadHeights() - функция, обрабатывающая нажатие кнопки открыть список стандартных высот;

- void loadMatrix() - функция, обрабатывающая нажатие кнопки открыть матрицу превышений;

- void loadCorrectionMatrix() - функция, обрабатывающая нажатие кнопки открыть матрицу корректировок;

- void newHeights() - функция, обрабатывающая нажатие кнопки создать список стандартных высот;

- void newCorrectionMatrix() - функция, обрабатывающая нажатие кнопки создать матрицу корректировок;

- void editHeights() - функция, обрабатывающая нажатие кнопки редактирование списка стандартных высот;

- void saveHeights() - функция, обрабатывающая нажатие кнопки сохранить список стандартных высот;

- void saveMatrix() - функция, обрабатывающая нажатие кнопки сохранить матрицу превышений;

- void calculateMatrix() - функция, обрабатывающая нажатие кнопки расчет матрицы превышений;

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

- void CreateFile (MRect rect, MString filename, double st = STEP, int y = 0, int x = 0) - функция создания матрицы на жестком диске;

- void Create (MRect rect, double st = STEP, int y = 0, int x = 0) - функция создания матрицы в памяти;

- void Destroy() - функция обработки процедуры удаления матрицы;

- void Calculate() - функция расчёта матрицы превышений;

- void Save (MString filename) - функция сохранения в файл;

- bool Load (MString filename) - функция загрузки матрицы в память;

- bool Open (MString filename) - функция открытия матрицы из файла на жестком диске;

- void Clear() - функция заполняющая матрицу нулями;

- MPoint GetPoint (int i, int j) - функция, которая возвращает точку, соответствующую i-ой строке и j-ому столбцу матрицы;

- void GetPos (MPoint point, int &i, int &j) - функция, определяющая позицию клетки матрицы, которая соответствует точке на карте;

- int GetX() - функция, определяющая количество столбцов матрицы;

- int GetY() - функция, определяющая количество строк матрицы;

- double GetStep() - функция, определяющая шаг матрицы;

- short GetHeight (MPoint point) - функция, которая возвращает высоту в точке;

- short GetHeight (int i, int j) - функция, которая возвращает высоту в клетке;

- void SetHeight (MPoint point, short height) - функция, устанавливающая высоту в клетке, соответствующей точке;

- void SetHeight (int i, int j, short height) - функция устанавливающая высоту в клетке;

- void ReadBmhHeader (FILE *file) - функция, которая читает заголовок из файла BMH;

- void WriteBmhHeader (FILE *file) - функция, которая записывает заголовок в файл BMH;

- void Fill (MPtArray *ar) - функция, которая заполняет локальную матрицу обрабатываемого топографического объекта;

- int GetNumFilledPoints() - функция, определяющая количество заполненных клеток;

- void AddHeight (MTopobject *tpo, short height) - функция, добавляющая высоты топографического объекта в матрицу;

- void AddLineObject (MTopobject *tpo, short height) - функция, добавляющая высоты линейного объекта в матрицу;

- void AddPloObject (MTopobject *tpo, short height) - функция добавляющая высоты площадного объекта в матрицу;

- void Expand (int i, int j, int state) - функция распространяющая заливку из клетки до границ объекта.

Последовательность вызова классов во времени представлена на диаграмме последовательностей (см. черт. РТДП 5.000.005).

Описание используемых функции библиотеки картографии

Класс MKartaInterface предоставляет набор функций необходимых для работы с ядром библиотеки картографии.

Основные функции класса MKartaInterface:

- bool LoadMap (MString map_name);

загружает карту (upt-файл) указанную в параметре map_name.

- bool SetKlassifikator (MString kls_name);

загружает классификатор (kls-файл) указанный в параметре kls_name.

- void SetWidget (QWidget* widget);

устанавливает widget на который должна отрисовываться карта.

- void DrawMap (bool toScreen = true);

отрисовывает карту, параметр toScreen определяет, будет ли карта отрисовываться на экран (true), либо в pixmap (false).

- MPoint LogicToGeo (QPoint& lPoint, bool bInMapCoo = false);

- QPoint GeoToLogic (MPoint& gPoint);

пересчитывают точку из логических (экранных) координат в географические и обратно.

- MRect LogicToGeo (QRect& lrect, bool bInMapCoo = false);

- QRect GeoToLogic (MRect& lrect);

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

- MPoint GeoToGauss (MPoint& pt, double meredian = 1000);

- MPoint GaussToGeo (MPoint& pt, double meredian = 1000);

пересчитывают точку из географических координат в зонную систему координат Гаусса-Крюгера и обратно.

- MPoint GeoToGaussStandart (MPoint& pt, double meredian = 1000);

- MPoint GaussToGeoStandart (MPoint& pt, double meredian = 1000);

пересчитывают точку из географических координат в стандартную систему координат Гаусса-Крюгера и обратно.

- MPoint GeoToGaussLocal (MPoint& pt);

- MPoint GaussLocalToGeo (MPoint& pt);

пересчитывают точку из географических координат в местную систему координат Гаусса-Крюгера и обратно.

- void ZoomTo (MRect& rect);

зуммирует карту до заданного в параметре rect прямоугольника охвата.

- void ScrollByGeo (double x, double y);

скроллирует карту на смещение заданное в координатах карты.

- void ScrollByLogic (int x, int y);

скроллирует карту на смещение заданное в координатах окна отрисовки.

- bool SetMatrixFile (MString path);

устанавливает путь к файлу матрицы высот.

- int GetHight (MPoint& pt);

возвращает высоту рельефа в точке, заданной параметром pt.

- int GetHightObjects (MPoint& pt);

возвращает высоту объекта местности относительно рельефа в точке, заданной параметром pt.

Иерархия основных классов библиотеки картографии представлена на плакате (см. плакат РТДП 5.000.004).

4. Разработка программных модулей

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

Алгоритмы ключевых процедур и функций класса MapView

void MapView:drawMap()

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

void MapView:updateHeights()

перерисовка (отображение) матриц превышений и корректировки на текущем отображаемом фрагменте карты производится, только если открыта карта или матрицы превышений и корректировки (используем логические переменные mapOpen и matrixOpen). С помощью класса библиотеки картографии MRect получаем границы карты, которые соответствуют видимой области (MRect bounds = karta->GetZoombounds()), далее вычисляем индексы ячеек матрицы, соответствующие углам карты (matrix->GetPos (MPoint(bounds.left, bounds.bottom), i1, j1); matrix->GetPos (MPoint(bounds.right, bounds.top), i2, j2);). Рассчитываем шаг матрицы double step. В logx и logy - содержится количество пикселей, которым соответствует шаг матрицы (double logx = width() / karta->GetZoombounds().Width() * step; double logy = height() / karta->GetZoombounds().Height() * step;). Матрицу превышений и матрицу корректировок отрисовываем таким образом: если масштаб крупный (шаг матрицы больше 5 пикселей), то рисуем прямоугольник, в противном случае ставим точку.

void MapView:mousePressEvent (QMouseEvent *e)

корректировка в точке матрицы осуществляется только, если была нажата правая клавиша мыши (e->button() == Qt: RightButton) и открыты карта и матрица корректировки (используем логические переменные mapOpen && correctionMatrixOpen). С помощью функций класса MKartaInterface LogicToGeo и GeoToGauss производим преобразование логических координат мыши в географические координаты (MPoint point = karta->LogicToGeo(pos); point = karta->GeoToGauss(point);). Далее проверяем, если точка щелчка мыши находится в области матрицы корректировок, то вызывается диалог, в поле ввода которого вводим значение корректировки высоты. Значение высоты записываем в матрицу корректировок (correctionMatrix->SetHeight (point, height)) и вызываем перерисовку (отображение) матрицы корректировки (updateHeights()).

void MapView:zoom (int left, int top, int right, int bottom)

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

(QPoint first = QPoint (left, top);

QPoint second = QPoint (right, bottom);

MPoint p1 = karta->LogicToGeo(first);

MPoint p2 = karta->LogicToGeo(second);)

Формируем прямоугольник с помощью класса библиотеки картографии MRect (MRect rect = MRect (p1, p2)) и вызываем функцию ZoomTo (в качестве параметра передаем в нее сформированный прямоугольник rect). Для перерисовки карты вызываем функцию drawMap().

Алгоритмы ключевых процедур и функций класса Matrix

void Matrix: CreateFile (MRect rect, MString filename, double st, int y, int x)

создание матрицы на жестком диске осуществляется, если была удалена предыдущая матрица (Destroy()), далее увеличиваем границы матрицы так, чтобы они были кратны шагу (NormalizeRect(rect)), записываем заголовок в файл ВМН (WriteBmhHeader(mem)) и записываем 0 в конец файла, создавая таким образом файл нужного размера, заполненный нулями.

fseek (mem, 48 + cx * cy * sizeof(short) - 1, SEEK_SET);

char c = 0;

fwrite (&c, 1, 1, mem);

short Matrix: GetHeight (MTopobject *tpo)

высота топографического объекта добавляется в матрицу из UTP-файла (MString str = tpo->GetDataPole(1)), если в данных объекта отсутствует значение высоты, оно берется из списка стандартных высот (heights [tpo->m_kkod])

void Matrix: Save (MString filename)

сохранение в файл матрицы осуществляется в случае, если файл успешно создан на диске: FILE *file = fopen (filename, «wb»). Для сохранения матрицы сначала записываем заголовок файла ВМН (WriteBmhHeader(mem)) и сохраняем матрицу или в оперативную память (если memMode == INMEMORY) или в файл на жесткий диск (если memMode == INFILE).

void Matrix: Calculate()

при расчете матрицы первоначально создаем матрицу с размерами равными размерам карты (Create (pKarta->m_geobounds)), далее подсчитываем количество точек у всех топографических объектов, участвующих в расчете (это нужно, чтобы выводить полосу прогресса). Для формирования матрицы превышений, перебирая каждый объект каждого слоя карты, получаем высоту объекта. Если значение высоты не равно нулю, добавляем значение в формируемую матрицу превышений (с помощью функции AddHeight). При этом в матрице заполняются все клетки, покрываемые площадью рассматриваемого объекта.

void Matrix: AddHeight (MTopobject *tpo, short height)

для добавления высоты топографического объекта в матрицу первоначально необходимо проверить тип топографического объекта (tpo->m_pZnak->GetYaz()->GetType()). Если объект площадной, то выполняется добавление высоты площадного объекта в матрицу (AddPloObject (tpo, height)), если объект линейный, то выполняется добавление высоты линейного объекта в матрицу (AddLineObject (tpo, height)), если объект точечный, то сравниваем текущую высоту с высотой в ячейке, если текущая высота больше (height > GetHeight(point), то устанавливаем в ячейке текущую высоту (SetHeight (point, height))

void Matrix: AddLineObject (MTopobject *tpo, short height)

добавление высоты линейного топографического объекта в матрицу осуществляется следующим образом: в цикле по сегментам линейного объекта проверяем покрывает ли ячейка матрицы сегмент, если покрывает, то устанавливаем в ячейке текущую высоту (SetHeight (point, height)), если не покрывает, то рассчитываем количество ячеек покрывающих данный сегмент, и в цикле для каждой ячейки устанавливаем текущую высоту топографического объекта.

void Matrix: AddPloObject (MTopobject *tpo, short height)

добавление высоты площадного топографического объекта в матрицу осуществляется следующим образом: сначала создается локальная матрица топографического объекта (по размеру охватывающего прямоугольника объекта). Затем в локальной матрице площадного объекта заполняются ячейки, покрывающие контур объекта - используется функция AddLineObject (tpo, BORDER). Затем заполняются остальные ячейки локальной матрицы с использованием функции Fill (MPtArray *ar). На последнем этапе в цикле по всем ячейкам сформированной локальной матрицы все «внутренние» (не-OUTSIDE) ячейки заполняются значениями высоты площадного объекта, но только в том случаи если текущее значение высоты больше значения высоты в ячейке

if (height > GetHeight(point))

SetHeight (point, height);

void Fill (MPtArray *ar)

заполнение локальной матрицы обрабатываемого топографического объекта продолжается до тех пор, пока не будут заполнены все точки (GetNumFilledPoints() < numPoints). Первоначально в цикле do while выбираем случайную ячейку со значением высоты EMPTY (не заполненная) и вычисляем соответствующую точку объекта (MPoint pt = GetPoint (i, j)). Затем распространяем вокруг этой клетки значение высоты объекта с помощью функции Expand(), учитывая при этом, является точка внутренней (INSIDE) или наружной (OUTSIDE) по отношению к объекту.

if (PointInRegion (pt, ar)) Expand (i, j, INSIDE);

else Expand (i, j, OUTSIDE);

void Expand (int i, int j, int state)

распространение заливки из клетки до границ объекта происходит следующим образом: сначала устанавливаем значение в клетке (SetHeight (i, j, state)), затем в цикле заполняем соседние клетки, обход осуществляется по кругу, вначале по часовой стрелке, потом - против, после каждой итерации увеличиваем радиус круга. Если после обхода не заполнено ни одной точки, значит распространяться «заливке» уже некуда, выходим из цикла.

5. Программа и методика испытаний

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

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

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

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

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

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

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

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

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

Подготовка к тестированию

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

Подготовка средств

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

В среде функционирования программного модуля требуется:

- установить программное обеспечение модуля, следуя инструкциям п. 6.2 настоящего документа;

- записать в отдельный каталог файлы тестового примера (файл карты m3404.utp, файл классификатора 500-200-HOT_heights.kls, файл стандартных высот heights.txt и файл матрицы высот matrix.bmh).

Файлы тестового примера предоставляет исполнитель.

Ожидаемые результаты

В результате проведения тестирования ожидаются следующие результаты:

- после открытия карты и классификатора, в главном окне программного модуля ожидается отображение цифровой карты местности (ЦКМ);

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

- после использования инструмента скроллирования ожидается отображение в картографическом окне необходимого фрагмента ЦКМ;

- после использования инструмента «предыдущий вид карты» ожидается отображение в картографическом окне предыдущего фрагмента ЦКМ;

- после использования инструмента «отобразить всю карту» ожидается отображение в картографическом окне всей ЦКМ;

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

Порядок выполнения теста

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

- запустить программный модуль Matrix (см. п. 6.3. настоящего документа);

- открыть карту m3404.utp и классификатор 500-200-HOT_heights.kls (см. п. 6.5. настоящего документа);

- создать файл стандартных высот heights.txt (см. п. 6.5. настоящего документа);

- если необходимо, внести изменения в список стандартных высот в диалоге «Редактирование высот» (см. п. 6.5. настоящего документа);

- сохранить файл стандартных высот heights.txt (см. п. 6.5. настоящего документа);

- произвести расчет матрицы превышений (см. п. 6.5. настоящего документа);

- сохранить матрицу превышений matrix_m3404.bmh2 (см. п. 6.5. настоящего документа);

- создать матрицу корректировок correction.bmh2 (см. п. 6.5. настоящего документа);

- если необходимо, внести изменения в матрицу корректировок
(см. п. 6.5. настоящего документа);

- проверить функции инструментов зуммирования, скроллирования, «предыдущий вид» и «отображение всей карты» (см. п. 6.5. настоящего документа);

- завершить работу программного модуля Matrix (см. п. 6.5 настоящего документа).

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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.