Аннотация
В данной работе представлена разработка классов, позволяющих отображать картографическую информацию о системах дорог, связывающих между собой населённые пункты (города и посёлки). Предусмотрены элементы навигации по карте.
Ключевые слова: класс, наследник, метод класса, конструктор, деструктор, объектно-ориентированное программирование, модульное программирование, визуальные компоненты, обработчик события, концептуальная модель, карта, маршрут, координаты, навигация по карте.
Условие задачи
Введение
Основная часть
Постановка задачи
Анализ и исследование задачи, построение модели
Разработка классов
Формализация расчетов
Алгоритмы методов класса
Алгоритмы, обеспечивающие функциональность приложения
Введение
Геоинформационные системы — системы, предназначенные для сбора, хранения, анализа и графической визуализации пространственных данных и связанной с ними информации о представленных в ГИС объектах. Другими словами, это инструменты, позволяющие пользователям искать, анализировать и редактировать цифровые карты, а также дополнительную информацию об объектах.
Географические Информационные Системы прочно вошли в нашу жизнь. Известно, что лишь 15% всей информации не имеет территориальной привязки, а это значит, что остальные 85% – это информация, которая тем или иным образом связана с ГИС.
Геоинформационные системы позволяют максимально точно учитывать площади различных участков и координаты объектов. Использование ГИС значительно облегчает и делает гораздо более эффективной деятельность людей в самых различных сферах. Особо можно подчеркнуть важность ГИС для деятельности, связанной с управлением. Они облегчают процесс обеспечения и поддержания правопорядка и высокого уровня безопасности, а также применяются во многих областях деятельности.
Реализация геоинформационных проектов, создание ГИС в широком смысле слова, включает этапы:
предпроектные исследования:
изучение требований пользователя,
изучение функциональных возможностей используемых программных средств ГИС,
технико-экономическое обоснование,
оценку соотношения «затраты/прибыль»;
системное проектирование ГИС:
стадию пилот-проекта,
разработку ГИС;
тестирование на небольшом территориальном фрагменте или тестовом участке, прототипирование- создание опытного образца(прототипа);
внедрение ГИС;
эксплуатацию и использование.
Научные, технические, технологические и прикладные аспекты проектирования, создания и использования ГИС изучаются геоинформатикой.
Геоинформатика – наука, технология и производственная деятельность по научному обоснованию, проектированию, созданию, эксплуатации и использованию географических информационных систем, по разработке геоинформационных технологий, по приложению ГИС для практических и научных целей.
Основные задачи геоинформатики
Создание баз геоданных (геокодирование) и управление ими
Анализ и моделирование геоданных
Разработка программного обеспечения для первых двух задач
Постановка задачи
Требуется разработать класс, позволяющий отображать картографическую информацию о системах дорог, связывающих между собой географические объекты двух видов: населенные пункты (города и поселки) и архитектурные сооружения (здания/дома). Предусмотреть элементы навигации по карте.
Анализ и исследование задачи, модели
Поскольку при разработке приложения используется технология проектно-ориентированного программирования, на начальном этапе разработки решения задачи требуется определиться с физическим объектом.
В качестве физического объекта в представленной задаче является физическая карта, представленная множеством населенных пунктов. Для отдельного пункта в данной задаче наиболее подходят для выделения данные свойства:
название,
координаты на карте.
Конечной целью задачи является вывод информации о выбранном маршруте.
Выдача результатов производится в виде списка населенных пунктов и расстояния между ними, а также изображение выбранного маршрута.
Информационная модель, которая описывает отдельный населённый пункт «Множества населенных пунктов» целесообразно описать структурой, которая содержит:
название пункта - включает в себя до 15 символов,
координаты на карте задаются двумя вещественными значениями.
Выделение информационного объекта
Математическим объектом в данной задаче является «Список населенных пунктов» с параметрами: названием и координатами (x;y).
Анализ технических и программных средств
Для реализации приложения наиболее рационально использовать среду C++ Builder, поскольку это позволит разработать интерфейс и реализовать функционирующие расчетные формулы.
Разработка математической модели
Математическая модель – система отношений формул, уравнений, неравенств, которые отражают основные свойства объекта. Для решения поставленной задачи возможно использование векторной алгебры как математической модели для вычисления расстояния между городами, что позволило бы облегчить решение. Применимыми к данной задаче является формула нахождения длины векторы, у которого заданы начало и конец: , где - координаты точки A, а - координаты точки B. В нашем случае роль точек A и B будут играть координаты городов на карте.
Разработка требований к приложению
Требования к приложению следующие: пользователю предоставляется возможность:
Выбрать карту, с которой планирует работать.
Посмотреть координаты городов, находящихся на карте.
Выбрать маршрут из выпадающего списка.
Посмотреть информацию о выбранном маршруте.
Изучить карту маршрута.
Отредактировать (если понадобится) информацию о маршруте
Сохранить в файл информацию о маршруте
Разработка концептуальной модели пользовательского интерфейса
Концептуальная модель: первый важный шаг в проектировании пользовательского интерфейса. В процессе разработки пользовательского интерфейса абстрактные концепты концептуальной модели переводятся в конкретные представления и действия пользователя. Для достижения оптимальных результатов пользовательский интерфейс проектируется после разработки концептуальной модели. Сценарии при этом могут быть переписаны на уровне пользовательского интерфейса.
Вопрос.
Ответ.
Для кого создается программный продукт?
Любитель географии, или, к примеру, для путешественника. Это может быть школьник, студент, офисный работник. В общем, человек любого возраста, любого образования.
Какими знаниями обладает пользователь?
Тут возможны несколько вариантов: программой может пользоваться человек как с высшим образование, так и человек, не имеющий никакого образования.
Цели. Для чего проектируется программный продукт?
Целью работы является программа, которая будет показывать нужную пользователю информацию, будет удобной в использовании.
Для получения информации в целом о стране, городе или посёлки. О достопримечательностях, а также о системах дорог, которые связывают различные географические объекты.
Какие проблемы есть сейчас у пользователей?
Информация не организована. Чтобы получить интересующую информацию, пользователь должен посещать различные сайты в интернете, тратить своё личное время. Также возможно отсутствие нужной информации.
Как пользователи представляют себе данные, которыми будет управлять программа?
Список географических карт со стандартными объектами.
Возможные ситуации, возникающие при использования конкретного сценария
В списке отсутствует нужная карта, город (посёлок). Нет информации о географическом объекте. Отсутствует информация о системах дорог, связывающих населённые пункты, а также может отсутствовать информация о разрушениях некоторых объектов, в результате нештатных ситуаций (к примеру: землетрясения, обвалы дорог и т.п.)
Какая информация может понадобиться участникам сценария для достижения их целей?
Информация о городе (посёлке), информацию о географических объектах, координаты, наименования., информация о дорогах связывающих населённые пункты.
Что пользователь хочет получить на выходе (решение задачи). В каком виде?
Информацию об объектах, расположенных на данном участке карты, также координаты этих физических объектов, информацию о дороге, которая связывает между собой 2 или более городов, посёлков (архитектурных сооружений)
Объекты: карта, страна, список населённых пунктов, архитектурные сооружения, дороги.
Действия: просмотреть карту; добавить карту; удалить карту; получить информацию о системах дорог, выбрать маршрут, просмотреть координаты, просмотреть справочную систему(о программе, об авторе).
Рис.1. Концептуальная схема пользовательского интерфейса программы.
Разработка информационной модели объектов.
На этапе разработки концептуальной модели интерфейса приложения были выделены следующие объекты: города, маршруты, координаты.
Номер
Наименование маршрута
Координаты 1-го города
Координаты 2-го города
1
London-Nottingham
371 397
308 378
2
London-Liverpool
371 397
226 237
3
London-Oxford
371 397
305 376
4
London-Bristol
371 397
237 397
5
London-Leeds
371 397
291 205
6
London-Cambridge
371 397
376 339
7
London-York
371 397
307 385
8
Nottingham-Liverpool
308 278
226 237
9
Nottingham-Oxford
308 278
305 376
10
Nottingham-Bristol
308 278
237 397
11
Nottingham-Leeds
308 278
391 205
12
Nottingham-York
308 278
307 385
13
Nottingham-Cambridge
308 278
376 339
14
York-Liverpool
307 385
226 237
15
York-Oxford
307 385
305 376
16
York-Bristol
307 385
237 397
17
York-Leeds
307 385
291 205
18
York-Cambridge
307 385
376 339
19
Liverpool-Oxford
226 237
305 376
20
Liverpool-Bristol
226 237
237 397
21
Liverpool-Leeds
226 237
291 205
22
Liverpool-Cambridge
226 237
376 339
23
Oxford-Bristol
305 376
237 397
24
Oxford-Leeds
305 376
291 205
25
Oxford-Cambridge
305 376
237 339
26
Bristol-Leeds
237 397
291 205
27
Bristol-Cambridge
237 397
376 339
28
Leeds-Cambridge
391 205
376 339
Разработка классовДля решения задачи на машине нужно перейти от математической модели к программной модели. Такой программной моделью может являться класс. Из описания математического объекта, очевидно, что в поля класса следует поместить массив населенных пунктов, где каждый населенный пункт описывается названием и координатами.
Поскольку для описания отдельного населенного пункта требуется использовать разнородные данные, целесообразно объединить эти данные в одну структуру. Назовем эту структуру именем InfoMap. Интерфейс структуры:
Интерфейс структуры Town:
struct InfoMap
{
AnsiString NamePunkt; // Наименование населённого пункта
Coord PlacePunkt; // координаты
};
И тогда математический объект «Список населенных пунктов» можно будет представить массивом структур типа InfoMap. Такой массив структур характеризуется наименованием (назовем InfoMapNamePunkt) и количеством городов (FCount). Эти две характеристики будут определять поля класса. Также следует упомянуть о переменной, используемой для чтения имени файла (MainNameFile).
Модель поведения - совокупность методов, необходимых для решения, набора задач, определенного в классе. В нашем случае класс должен предоставлять пользователям возможности решать задачи, заявленные в условии:
отображать информацию о маршруте;
определять координаты;
извлекать данные из файла и записывать результаты в файл.
Сформулированные выше возможности будут определять поведение объектов класса и должны быть заложены в методы класса.
Естественно, что кроме заявленных выше методов любой класс, как и другой класс, должен иметь несколько конструкторов и деструктор.
При проектировании классов будем исходить из предположения, что задача со временем может претерпевать изменения, связанные с возрастанием и изменением запросов пользователя. Поэтому необходимо будет предусмотреть механизм, который бы позволял мобильно изменять интерфейсы классов, не затрагивая их реализацию. С этой целью имеет смысл сразу проектировать семейства классов.
Проектируя семейство классов, распределим, какие методы будут реализованы в базовом классе и какие из них будут абстрактными; сколько необходимо потомков и каким набором методов и свойств они должны обладать.
В рамках поставленной задачи целесообразно выделить семейство из трех классов. В базовый класс (назовем его TMap) поместить методы, общие для перечисленных задач, в класс – наследник первой очереди (TCalc) поместить методы решения этих перечисленных задач. В таком представлении два класса будут мобильными, то есть они практически без исправлений могут компилироваться под любой системой программирования: и для C++, и для различных операционных систем.
Описание базового класса
Исходя из вышеизложенного, в базовый класс целесообразно включить следующие методы: три конструктора, деструктор, функция для чтения информации о городах и свойства. Интерфейс базового класса представлен на листинге 2.
Интерфейс базового класса:
class TMap
{
protected: //передать потомкам следующие параметры
InfoMap *InfoMapNamePunkt; //список городов
int FCount; //кол-во городов
AnsiString MainNameFile; //для чтения имени файла
public:
TMap(); //конструктор без параметров
TMap(AnsiString NameFile); //конструктор "привязать к файлу и взять информацию из файла"
~TMap(){}; //деструктор
void PutInfo (TComboBox* aCmb); //функция для вывода информации о городах
__property AnsiString MNF={ read = MainNameFile, write = MainNameFile};
};
Описание методов базового класса
Конструктор без параметров:
TMap ();
Он не имеет параметров. В нем поля класса инициализируются нулевыми значениями.
Алгоритм:
Обнуляется список городов
Обнуляется количество городов
Обнуляется переменная для имени файла
Обнуляется указатель на массив
Описание конструктора представлено на листинге 3.
Конструктор без параметров:
TMap::TMap()
{
NamePunkt=NULL;
FCount=NULL;
MainNameFile=NULL;
}
Конструктор «создать массив по числу городов»:
TMap(int NewCount);
Имеет один входной параметр – число городов. В конструкторе отводится память под массив структур.
Описание конструктора представлено на листинге 4.
Листинг 4. Конструктор «создать массив по числу»
TTowns::TTowns(int NewCount)
{
FCount = NewCount;
TownName = new Town[FCount];
a = new int[FCount];
}
3. Функция, выводящая структурную информацию в ComboBox.
void TTowns::GetInfo(TComboBox*aLisb);
Имеет один входной параметр – указатель на ComboBox. В алгоритме функции используются следующие вспомогательные переменные: aList – для считывания всей информации из файла, Word – для чтения очередного слова, Str[100] – для чтения очередной строки, Ptr – вспомогательная переменная для считывания очередной строки, Size – для вычисления длины строки.
Решение поставленной задачи сводится к выполнению следующих шагов:
описываются вспомогательные переменные
определяется количество пунктов – поле FCount
отводится память под массив структур
выполняется цикл по числу пунктов. В цикле:
считывается очередная строка
копируется строка из переменной типа AnsiString в переменную типа Char
определяется длины строки
добавляется символ пробела и символ окончания строки и перехода на следующую
выделяется первое слово
помещается это слово в структуру
выделяется второе слово
помещается это слово в структуру
выделяется третье слово
помещается это слово в структуру
помещение в ComboBox городов