Научно-производственный центр Интелтек Плюс

Геоинформационные cистемы, объектно-ориентированный подход к проектированию

(Объектные ГИС, "Геодезия и картография", 1995 г., N9)

Авторы:

Андреев А.М. Березкин Д.В. Куликов Ю.В. Смагин А.Ю. Смелов А.В.

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

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

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

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

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

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

- отображение на карте одним цветом;

- представление на карте одинаковыми графическими примитивами( линиями, точками, полигонами) и т.д.

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

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

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

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

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

Рассмотрим более подробно применение объектно-ориентированного подхода при создании "ГИС-95" (разработка НТЦ "Интелтек"). В качестве примера пространственного объекта возьмем реку.

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

Про объекты программы, которые имеют одинаковый набор свойств и схожее поведение будем говорить, что они относятся к одному классу. Искусство объектного проектирования состоит в том, чтобы наиболее удачным образом выделить из модели реального мира объекты и сгруппировать их в классы. Мы выполняем такое разбиение в зависимости от графических характеристик объектов, что позволяет ограничиться небольшим количеством классов : CPoint (точка), CLine (линия), CPolygon (полигон), CText (текст), CBitmap (растровое изображение).

Как между объектами существуют отношения схожести, позволяющие отнести их к одному классу, так и классы могут быть похожи друг на друга. Очевидно, что CLine и СPoint обладают общим свойством иметь цвет и могут быть отрисованы; но с другой стороны для CLine определена толщина, а для CPoint нет. Схожие классы мы относим к одной иерархии и объясняем их схожесть тем, что они унаследовали одинаковый набор свойств и поведение от одного общего класса, который называется по отношению к ним родительским. Для констатации факта близости между собой введенных классов, мы делаем их родителем класс Сprimitive, получая такую иерархию:

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

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

Сделаем некоторые обобщения. Пространственные объекты реального мира должны быть трансформированы в объекты программы. Свойства последних могут быть разбиты на две группы: свойства первой из них назовем атрибутами, они отвечают за визуальное представление объектов на карте и определяют их поведение при ее преобразованиях; вторая группа объединяет свойства, передающие характеристики ГИС-объектов как моделей объектов реального мира; назовем их семантическими. Основой построения классов для ГИС-объектов мы выбираем атрибуты, тем самым значительно упрощая структуру ГИС, как отмечалось выше; семантические же свойства абстрагируются от объектов и переносятся в объект слой - Clayer.

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

Итак, структуру объектной ГИС можно представить в следующем виде. В ее базе данных хранятся объекты Cmap, каждый из которых реализует некоторую карту (или ее фрагмент). Объект Cmap есть упорядоченный список Clayer'ов. Каждый Clayer включает в себя список объектов, относящихся к иерархии классов, производных от Cprimitive. Семантические свойства последних определяют параметры таблицы - объекта Ctable, используемого Clayer'ом а, следовательно, и тематику самого слоя.

Продемонстрируем удобства такой организации данных. Над Cmap можно выполнить операцию "отобразить". В терминах объектного подхода выполнение такой операции над объектом называется посылкой ему (объекту) сообщения. Но это же сообщение понимает и объект Clayer. Тогда для отображения карты Cmap достаточно переадресовать это сообщение каждому из Clayer'ов, которыми владеет Cmap. Посылая это сообщение только части Clayer'ов или изменяя порядок посылки, мы можем вызывать те или иные эффекты при послойном изображении карты. Сmap ничего не знает об элементах, включенных в Clayer; единственные объекты, с которыми Cmap имеет дело - это объекты-слои. В результате послойное отображение карты может быть произведено на высоком логическом уровне, Cmap'у не требуется знать, как Clayer отрисовывает себя. В свою очередь, Clayer получая сообщение "отобразить", переадресовывает его объектам, которыми он владеет, не задумываясь как конкретно они это делают. И объектам самого нижнего уровня не требуется знать как из них сложится карта, единственное, что от них требуется, так это визуализироваться при получении соответствующего сообщения".

Еще один фактор в пользу объектного подхода - хранение данных, используемых в ГИС. Слой содержит графические образы, таблицы, числа, строки. Такая неоднородность существенно затрудняет применение обычных систем управления базами данных (СУБД), рассчитанных на жесткую логическую структуру хранящейся информации, представленной в виде записей. Очевидно, что это условие для ГИС напрямую выполнено быть не может. Обходной путь лежит в разбиении данных на однородные группы с последующим размещением в различных файлах, что отрицательно сказывается на эффективности работы. Кроме того, усложняется введение новых типов данных и модернизация существующих. Но проектируя ГИС в виде совокупности взаимосвязанных объектов, мы имеем возможность воспользоваться объектной базой данных (ОБД). Для "ГИС-95" выбрана ОБД, разработанная в НТЦ "Интелтек". В такой базе информация размещается не в виде записей, а в виде объектов, и ограничения на их тип не накладываются. Таким образом, мы можем не только сопоставить объектам реального мира объекты программы, но и хранить их в естественной форме. Если потребуется добавить в ГИС новые элементы, отражающие изменения в запросах пользователей или технологии обработки данных, например, средства поддержки multimedia, нам не нужно модернизировать саму базу, а достаточно зарегистрировать новый тип в некотором справочнике, который в нашей системе называется словарем. Словарь содержит информацию об используемых объектах, которые можно разделить на простые и сложные. Последние представляют из себя множество других сложных, а также простых объектов. Например, слой и таблица, это сложные, а координата точки - простой объект. Для простых объектов (плавающее и целое числа, строка и т.д.) используются форматы представления, принятые в языке С++.

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

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

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

ИНТЕЛТЕК ИЗДАТЕЛЬСТВО Обьектные технологии


© НПЦ "ИНТЕЛТЕК ПЛЮС", 1997-2006, E-mail: publish@inteltec.ru