Файл: Замай С.С_Якубайлик О.Э_ПО и технологии ГИС_Красноярск_КГУ_1998.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.02.2024

Просмотров: 768

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Расчет дренажной сети и оптимального пути по поверхности.

Генерация профилей поперечных сечений.

Вычисление объемов относительно заданной плоскости.

Прочие функции

Логические операции с множеством карт.

Генерация случайной пространственной сети опробования.

Работа с базами атрибутивной информации.

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

Средства ввода/вывода пространственной информации

Функционирование аналитических процедур обеспечивается наличием в ГИС средств ввода/вывода информации. Такие средства могут включать модули работы с дигитайзерами, сканерами, электронными геодезическими приборами, обеспечивать автоматическую или ручную векторизацию растровых изображений. Необходимо поддерживать средства геометрической коррекции, преобразования картографических проекций и контроля качества баз пространственной информации. Обязательный элемент ГИС – редактор графической информации. В некоторых системах предусматривают алгоритмы геометрической генерализации.

Средства преобразования форматов

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

51

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

5.Инструментальные средства разработки ГИС-прило-

жений: GeoConstructor™

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

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

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

Слой. Слои в карте подразделяются на два основных вида: растровые и векторные.

Векторные слои – это совокупность простых геометрических объектов (точка, дуга, полигон), которые представляют те или иные объекты на

52


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

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

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

5.1. GeoConstructor™ как инструмент для создания ГИСприложений

Сначала немного истории. Начиная с 1992 года Центр геоинформационных исследований Института географии Российской Академии наук распространяет ГИС собственного производства GeoGraph. Эта ГИС обладает множеством достоинств и является законченным программным продуктом. В силу ряда причин, в GeoGraph не были включены средства создания пользовательских приложений (как, например, MapBasic в MapInfo), а формат данных закрыт для большинства пользователей. Разработчики решили не создавать нового языка программирования, поскольку в этом случае пользовательские приложения смогли бы работать только в среде GeoGraph, что затрудняло бы их создание, отладку и использование. В то же время широкое распространение получили средства визуального про-

граммирования для MS Windows (Microsoft Visual Basic, Borland Delphi), а

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

лиотеки классов – Microsoft Foundation Classes (MFC) и Borland Object Windows (OWL). Это и послужило решающим толчком для создания GeoConstructor.

53

Итак, что же такое GeoConstructor. Прежде всего – это динамически подключаемая библиотека (DLL) Windows, созданная по протоколу рас-

ширений Visual Basic/OLE Control (VBX/OCX). GeoConstructor предостав-

ляет классы объектов для создания и редактирования картографических композиций, которые вы можете многократно использовать в своих приложениях (рис. 15). Если вы знакомы с GeoGraph, то вы можете рассматривать GeoConstructor как программируемый функциональный аналог картографической части GeoGraph'а.

Другими словами, получив GeoConstructor, вы приобретаете значительную часть вашей, еще не написанной, программы!

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

5.2.Внедрение GeoConstructor в среду разработки

Протокол VBX был изначально разработан для Visual Basic (VB), поэтому VB – это единственная среда, которая не требует практически никаких дополнительных шагов для внедрения объектов VBX. Однако, в силу несовершенства самого протокола VBX, существуют определенные сложности при создании достаточно нетривиальных объектов, каким является, например, GeoConstructor. Поэтому вместе с GeoConstructor поставляются адаптирующие модули для трех наиболее распространенных платформ программирования, в которых его можно использовать.

Если вы еще не определились, в какой среде программирования вы собираетесь работать, то сделайте это сейчас.

54


Рис. 15. Использование GeoConstructor в среде программирования Visual Basic: ГИС создается с помощью стандартной среды разработки. На участке городского плана – Академгородок г. Красноярска

После установки GeoConstructor на ваш компьютер, в подкаталоге \DELPHI1, вы можете найти пример программы на языке Object Pascal, демонстрирующий основные приемы программирования с использованием

GeoConstructor.

Delphi имеет интерактивную поддержку для внедрения VBX-объек- тов. Однако для установки GeoConstructor, мы не рекомендуем ею пользоваться. Вместо этого добавьте файл GEOCONST.PAS в ваш проект или в библиотеку компонентов. Этот файл описывает класс gisMap, непосредственно наследуемый от класса TVbxControl. Заметьте, что синтаксис свойств, методов и событий в документации соответствует объявлению их в этом файле. Мы настоятельно рекомендуем включать этот файл во все

55

ваши проекты, использующие GeoConstructor.

Если вы добавили GEOCONST.PAS в палитру компонентов, то дальше вы можете использовать его точно так же, как и другие компоненты Delphi. Если же вы добавили этот файл непосредственно в ваш проект, то вам необходимо написать несколько строк кода, прежде чем вы сможете свободно обращаться к свойствам и методам GeoConstructor'а. Далее приведены пошаговые инструкции для динамического создания объекта класса gisMap:

unit MyForm; interface uses

..................

GeoConst; // 1. Добавляем ссылку на модуль

//GEOCONST.PAS

type

TMyForm = class(TForm)

..................

private

{Private declarations } public

{Public declarations }

gcMap: gisMap; // 2. Добавляем объявление объекта

//

класса

gisMap

end;

var

MyMain: TMyMain;

56


implementation {$R *.DFM}

procedure TfrmMain.FormCreate(Sender: TObject); begin

try

gcMap := gisMap.Create(Self); // 3. Создаем

// объект класса gisMap

with gcMap do begin

Parent := Self; // 4. Указываем родительскую end; // форму

except

on E:EVBXError do begin

with Application do begin

ShowException(E);

Terminate;

end;

end;

end;

end;

5.3.Создание картографических композиций

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

57

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

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

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

Если в дальнейшем у вас отпадет необходимость в каком-либо слое, Вы можете спокойно удалить его с помощью свойства mRemoveLayer. При этом, конечно же, слой будет удален только из конкретного окна с картой. Файлы слоя удаляться с диска не будут. Для удаления за один раз всех слоев установите свойство mImport равным пустой строке (например, mImport="").

58


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

Если вы являетесь пользователем ГИС GeoGraph, то Вам будет приятно узнать, что GeoConstructor позволяет импортировать композицию, созданную в GeoGraph версии 1.5. Для этого присвойте свойству mImport строку, содержащую полный или относительный путь к файлу карты на диске. Но при этом имейте в виду, что GeoConstructor не предназначен для непосредственной работы с mp-файлами GeoGraph'а. Это связано с тем, что подходы к раскраске слоев в GeoGraph'е и GeoConstructor'е довольно различны. Поэтому не ждите, что GeoConstructor будет сохранять свои композиции в MP-файлы. Вам придется создать собственный формат хранения картографических композиций, наиболее подходящий для нужд конкретного приложения.

5.4.Управление набором слоев и изображением карты

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

Прежде всего, необходимо усвоить, как GeoConstructor осуществляет доступ к свойствам каждого слоя в отдельности. Для этого введено понятие активного слоя, название которого определяется свойством mActiveLayer. Все действия со свойствами, имеющими префикс "l", будут относиться ТОЛЬКО к активному слою. В описании они объединены в раздел «Свойства слоя».

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

59

что в карте нет двух слоев с одинаковыми названиями, даже если один и тот же слой загружен более одного раза. Учтите также, что именование слоев чувствительно к регистру символов, поэтому названия "Реки","РЕКИ" и "реки" считаются различными. Получить и установить имя слоя можно через свойство lName.

Далее вы можете свободно переставлять слои местами, устанавливая нужный порядковый номер (индекс слоя) в свойстве lIndex. Для контроля этого номера пользуйтесь свойством mCountLayers, возвращающим общее количество слоев в карте. Помните, что слои всегда индексируются и рисуются от нуля, т.е. слой с нулевым индексом будет виден в карте как самый нижний.

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

Следующий пример демонстрирует, как слой Admin поставить первым для отображения (т.е. самым нижним на карте) и присвоить ему имя «Административное деление»:

MyForm.gisMap1.mActiveLayer = "Admin";

MyForm.gisMap1.lIndex = 0;

MyForm.gisMap1.lName(0) = "Административное деление";

MyForm.gisMap1.lflVisible = True;

MyForm.gisMap1.Refresh;

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

60