на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Программа информационной поддержки создания плана местности

Программа информационной поддержки создания плана местности

СОДЕРЖАНИЕ

  • 1. Постановка и анализ задачи
  • 2. Разработка логической схемы данных
  • 4. Основные алгоритмы
    • 4.1 Описание алгоритма
    • 4.2 Блок-схема алгоритма
  • 5. Программная реализация
    • 5.1 Выбор среды разработки программы
    • 5.2 Работа с таблицами
    • 5.3 Работа с графикой
    • 5.4 Разработка интерфейса
    • 5.5 Некоторые особенности алгоритмов
    • 5.6 Тестирование
  • 6. Описание программы
  • 7. Инструкция по установке
  • 8. Руководство пользователя
    • 8.1 Главное меню
    • 8.2 Панель быстрых кнопок
    • 8.3 Вкладка "Таблица"
    • 8.4 Вкладка "План"
  • 9. Контрольный пример
  • Заключение
  • Список литературы
  • Приложение
1. ПОСТАНОВКА И АНАЛИЗ ЗАДАЧИ

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

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

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

Рассмотрим это задание по пунктам.

Так как мы создаем план местности, подразумевается, что координаты точки плана местности задаются в виде широты и долготы, те в градусах. При этом мы должны учитывать, что широта подразделяется на северную и южную, каждя от 0 до 90 градусов; а долгота - на западную и восточную, от 0 до 180 градусов.

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

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

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

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

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

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

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

2. РАЗРАБОТКА ЛОГИЧЕСКОЙ СХЕМЫ ДАННЫХ

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

Все таблицы хранятся в формате таблиц Paradox Database, в файлах с расширением *.db.

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

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

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

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

Object Type - поле типа-"строка". В нем указывается тип объекта, находящегося в данной точке.

Course - поле типа "целое число". Содержит номер маршрута, к которому принадлежит данная точка.

Comments - поле типа "строка", отведено для комментариев.

Ввод значений в поля Latitude, Longitude и Course обязательно.

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

Она имеет следующие поля:

Object_ID - идентификатор записи. Тип поля - автоинкремент.

Object Type - тип объекта.

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

Эта таблица содержит поля:

Course - номер маршрута. Тип поля - целое число.

Distance - расстояние, в километрах. Тип поля - число с плавающей точкой.

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

Рис.2.1. Схема данных.

3. СТРУКТУРНАЯ СХЕМА ПРОГРАММЫ

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

1)Отображение данных пользователя в виде таблицы и работа с ней.

2)Добавления и удаления типов объектов.

3)Графическое представление плана с возможностью масштабирования.

4)Работа с файлами и вывод результатов на печать.

5)Удобный пользовательский интерфейс.

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

Рис. 3.1. Функциональная структура программы.

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

4. ОСНОВНЫЕ АЛГОРИТМЫ

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

Ниже приведены его блок-схема и описание.

4.1 Описание алгоритма

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

Далее активируем кнопки увеличения масштаба и установки масштаба по умолчанию.

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

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

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

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

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

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

Если номер маршрута равен нулю, тогда выполняется условие рисования координатной сетки - меридианов и параллелей. Сначала выполняется цикл рисования меридианов - мы проходим от 0 до 360 градусов с шагом, зависящим от степени увеличения (15, 6, 3, или 1 градусов), причем возле каждого меридиана подписывается соответствующий ему градус долготы (восточная долгота - со знаком "+", западная - со знаком "-"). Нулевой меридиан изображается черным цветом. Аналогичные действия осуществляются и в цикле рисования параллелей, единственное отличие - цикл проходит от 0 до 180 градусов. Со знаком "+" обозначается северная широта, со знаком "-" - южная.

Меняем толщину линии на 2, для изображения линий маршрутов.

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

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

Задаем цвет линии в зависимости от номера маршрута. И организуем цикл, рисующий линии.

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

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

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

Рассматриваются три случая:

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

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

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

Сначала находим разность долгот точек, как если бы они находились на одной широте, помножаем на поправку cos(f), и вычисляем линейное расстояние между ними по теореме косинусов (другие две стороны треугольника - радиусы Земли). Таким же образом рассчитываем расстояние между точками, как если бы они находились на одной долготе. Эти расстояния обозначим l1 и l2.

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

Рис. 4.1. Пояснение к расчету расстояния на различных широте и долготе.

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

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

Все упомянутые формулы даны в Приложении Д.

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

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

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

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

4.2 Блок-схема алгоритма

Рис. 4.2. Блок-схема алгоритма рисования плана.

5. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

5.1 Выбор среды разработки программы

Как уже говорилось в "Постановке задачи", для создания этой программы была выбрана среда разработки Borland C++Builder 5. Это решение обуславливается тем, что в ней процесс создания интерфейса не представляет труда даже для программиста, столкнувшегося с Builder'ом впервые, и там хорошо поставлена работа с базами данных и графикой, что как раз и нужно для разработки нашей программы.

Страницы: 1, 2, 3



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