Геоинформационные технологии
 
 
Панорама-Харьков
 
Главная / Обучение / Уроки и примеры

На главную страницу

 

Как создать свою ГИС с помощью GIS ToolKit Active

Автор: Дарья Лунченко

Урок 12. Создание и работа с матрицами качеств и высот

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

Технология "Панорама" поддерживает несколько типов матриц: матрицы высот, матрицы слоев (трехмерные матрицы) и матрицы качеств (также называемые поверхностями), а также растры качеств (это тоже матрицы, только в ячейках хранится значение цвета, а не значение реальной величины). Мы рассмотрим работу с двумя типами матриц: с матрицами качеств MTQ и матрицами высот MTW.

Созданное в этом уроке приложение позволит:

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

Внешний вид приложения представлен на рис. 1.

Рисунок 1 - Внешний вид приложения
 

Скачать рабочий образец программы, ее исходный код, а также примеры данных, используемые в этом уроке, можно на страничке "Дополнительные материалы к уроку 12". Если у вас не установлен GIS ToolKit Active, то для запуска приложения вам потребуется загрузить библиотеки GIS ToolKit, и выполнить их регистрацию. Все необходимые библиотеки и короткая инструкция размещены на этой же странице.

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

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

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

В соответствии со способом получения данных о pH применяется следующая классификация почв по степени их кислотности и щелочности и способ их представления на картах (табл.1).

Для создания матрицы качеств пользователь нашей ГИС будет должен:

1) открыть карту с анализируемой характеристикой;
2) в диалоге параметров создания матрицы заполнить все необходимые поля;
3) нажать кнопку "Выполнить" (рис. 2).

Рисунок 2 - Диалог параметров для создания матрицы качеств
 

Переходим к решению поставленной задачи:

  • создаем новую форму Windows Form CreateMTQParametrs.cs, на которую помещаем стандартные компоненты textBox, comboBox, Button и т.д. (рис.3);

Рисунок 3 - Диалог создания матрицы качеств
 

  • создаем класс CreateMTQ.cs, в котором будем определять функции для работы с матрицами;
  • в классе CreateMTQ.cs, определяем функцию по нажатию на меню главной формы "Файл"->"Создать матрицу качеств", в которой активируем систему поиска, проходим по всем объектам карты и определяем уникальные семантики;

  • определяем семантики, которые имеют числовой тип и запоминаем их код, заполняем на форме CreateMTQParametrs.cs выпадающий список полученными семантиками;

  • вызываем диалог заполнения параметров, для создания матрицы качеств;
  • при нажатии на кнопку выбора имени матрицы, запускаем диалог сохранения файла saveFileDialog1, при успешном выборе файла, запоминаем имя матрицы в переменной MTQName, вставляем его в textBox и устанавливаем флаг "имя матрицы выбрано" mtqNameFl=1;

  • вводим в textBox значение размера элемента матрицы, проверяем является ли введенное значение числом, и с помощью метода Convert.ToDouble переводим его в тип double, устанавливаем флаг "размер задан" elemSizeFl = 1;

  • аналогично проверяем, вводимые пользователем минимальное и максимальное значения характеристики качества MinValue, MaxValue, устанавливаем соответствующие флаги;

  • при выборе семантики для построения, запоминаем номер семантики и устанавливаем флаг "семантика выбрана" semantFl=1;

  • при выборе метода построения поверхности, запоминаем номер метода в соответствующую переменную Method, и устанавливаем флаг "метод выбран" methodFl=1;

  • при выборе области построения матрицы по габаритам карты, определяем его функцией MapView1.GetRegionDFrame, и заполняем переменные начала отсчета матрицы( юго-западный угол), высоту и ширину;

  • при выборе области построения матрицы по прямоугольной области, активируем режим выбора области MapSelectRect1.StopAction(), и на основе координат выбранной области, определяем начало координат матрицы, высоту и ширину;

  • при выборе области построения матрицы по объекту, с помощью MapFind1.FindPoint включаем режим поиска в заданной точке, далее с помощью функции MAPAPI mapObjectFrame определяем габариты объекта и рассчитываем параметры матрицы;

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

  • далее проходим по всем кнопкам, находящимся между первыми двумя цветами и рассчитываем шаг изменения цвета палитры, с помощью функции GetColorF получаем последовательно новые цвета;

  • аналогично поступаем для определения цветов легенды, находящихся между вторым и третьим цветом, выбранным пользователем;

  • при условии, что все поля диалога заполнены, активируем кнопку "Создать";

  • в классе FMapAPI.cs импортируем функцию построения матрицы поверхности mtrBuildMatrixSurface, а также структуру параметров для построения матрицы - BUILDSURFACE;

  • при нажатии на кнопку "Создать", определяем структуру параметров создания матрицы BUILDSURFACE и устанавливаем:

    1) значение флага расширения создаваемого файла FileMtw = 0 (*.mtq);
    2) значения начала матрицы, ширины и высоты, которые ввел пользователь - BeginX, BeginY, Width, Height;
    3) если выбран режим построения матрицы "по объекту", заполняем поле Border идентификатором объекта;
    4) минимальное, максимальное значения MinValue, MaxValue;
    5) метод построения Method;
    6) семантику для построения матрицы SemantCode;
    7) количество цветов в палитре PalleteCount;
    и другие параметры;

  • в структуру также необходимо передать указатель на палитру цветов, массив значений которых мы заполнили при определении легенды, для этого выделяем дескриптор для объекта палитра handle, получаем адрес закрепленного объекта и передаем его в структуру параметров BUILDSURFACE;

  • вызываем функцию для построения матрицы качеств mtrBuildMatrixSurface, добавляем созданную матрицу в проект, с помощью функции mapSetMtqShowRange устанавливаем диапазон отображаемых элементов матрицы, mapSaveMtq - сохраняем изменения матрицы;

 
2. Анализ матрицы качеств распределения показателя кислотности

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

Рисунок 4 - Матрица качеств распределения показателя кислотности почв
 

Теперь рассмотрим, как получать из матрицы качеств данные для решения задач или формирования производных данных. В нашем примере это будет получение новой матрицы качеств, показывающей сколько необходимо внести нейтрализующего вещества на единицу площади для обработки участков с высоким уровнем кислотности. Воспользуемся таблицей норм внесения CaCO3 для известкования кислых грунтов легкого гранулометрического состава по M.В. Козлову, А. А. Плишко, в которой указано, что при показателе кислотности 5.1 -5.5 необходимо внести 2.4 т/га известняка, 4.5 - 5 - 4.5 т/га, <=4.5 - 5.5 т/га.

На основе этих данных, получаем новую матрицу качеств, в ячейках которой записаны значения необходимого количества внесения известняка (рис.5).

Рисунок 5 - Матрица качеств распределения необходимого количества известняка
 

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

Реализация данной функции:

  • создаем новую форму Windows Form MatrixCalculateParam.cs, на которую помещаем textBox, button, ComboBox (рис.6);

Рисунок 6 - Диалог параметров матрицы распределения необходимого известняка
 

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

  • запоминаем введенное пользователем число pH, ниже которого необходимо проводить известкование, значение по умолчанию составляет 5.5;

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

  • инициализируем структуру параметров создания матрицы BUILDMTW, определяем начальную точку матрицы, ширину и высоту по полученным габаритам, устанавливаем размер элемента матрицы, определяем палитру матрицы результата и вызываем функцию MAPAPI mapCreateMtq;

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

  • с помощью функций mapGetMtqWidthInElement, mapGetMtqHeightInElement, запрашиваем высоту и ширину матрицы в элементах, проходим по всем элементам матрицы и получаем их значения функцией MAPAPI mapGetMtqPoint;
  • при условии, что значение элемента ниже порогового значения, установленного пользователем, определяем текущие координаты элемента в метрах, и с помощью функции MAPAPI mapPutMtqValue, записываем в матрицу результата значение количества известняка, в зависимости от попадания в диапазоны распределения pH;

 
3. Создание матрицы высот

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

Рисунок 6 - Матрицы высот
 

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

1) имя матрицы высот (*.mtw);
2) размер элемента матрицы в метрах;
3) единицы измерения высоты: метры, дециметры, сантиметры, миллиметры;
4) метод построения поверхности : средневзвешенная интерполяция по 16 направлениям, по 8 направлениям, средневзвешенная интерполяция по 16 направлениям (сглаживание поверхности), линейная интерполяция по сетке треугольников;
5) тип матрицы высот: по абсолютным высотам, по относительным высотам, по суммарным высотам;
6) высота при попадании в элемент более одного объекта с высоты: заносить среднюю высоту, заносить максимальную высоту, заносить минимальную высоту;
7) флаг формирования экстремумов;
8) ограничение габаритов при создании матрицы: ограничение не выполняется, ограничивается габаритами района, ограничиваются габаритами области расположения объектов;
9) область построения матрицы: по габаритам карты, по выделенной области, по объекту (рис.7).

Рисунок 7 - Диалог параметров построения матрицы высот
 

Для создания матрицы высот:

  • создадим новую форму Windows Form CreateMTWParametrs.cs, и добавим на нее стандартные элементы textBox, comboBox, radioButton, Button;
  • при нажатии на кнопку выбора файла, вызываем диалог сохранения файла saveFileDialog1, при успешном выборе файла, запоминаем имя матрицы и выводим его в textBox;

  • определяем размер элемента матрицы, и устанавливаем флаг "размер элемента выбран";

  • при выборе пользователем из выпадающего списка единиц измерения высоты, запоминаем единицу измерения и устанавливаем соответствующий флаг;

  • при выборе метода построения поверхности, устанавливаем флаг "метод построения выбран", и запоминаем номер метода, который выбрал пользователь;

  • при выборе типа матрицы и высоты при наложении, определяем выбранный пользователем индекс, который соответствует типу матрицы высот или типу занесения высоты;

  • устанавливаем флаги необходимости формирования экстремумов и ограничения габаритов;

  • при выборе области построения матрицы по габаритам карты, по выбранной области, по объекту, аналогично с тем как мы делали это при создании матрицы качеств, рассчитываем значения начала матрицы (юго-западный угол), ширину высоту;
  • при нажатии на кнопку "Создать", определяем структуру параметров создания матрицы высот BUILDMTW, в которую помещаем переменные, которые были заполнены при формировании пользователем параметров матрицы;

  • вызываем функцию MAPAPI mapBuildMtw для построения матрицы высот на заданный участок работ, добавляем матрицу в проект;

 
4. Построение зоны видимости

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

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

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

Исходными данными является матрица высот, которая была построена нами ранее и карта расположения вышек, содержащая в себе абсолютные высоты (рис.8).

Рисунок 8 - Зоны видимости вышек

Реализация данной функции:

  • создадим новую форму Windows Form CreateVisibleZoneParamF.cs для ввода параметров создания матрицы видимости (рис.9);

Рисунок 9 - Диалог параметров построения зоны видимости
 

  • при нажатии на кнопку выбора файла, открываем диалог сохранения файла, запоминаем имя выбранного файла и выводим его в textBox;
  • при выборе из выпадающего списка матрицы высот и карты с объектами по которым строится зона видимости, определяем их идентификаторы;

  • аналогично с построением матриц качеств и высот, определяем размер элемента и радиус зоны видимости в метрах;
  • определяем цвет отображения зоны видимости, вызываем диалог выбора цвета colorDialog1;

  • при нажатии на кнопку "Выполнить", инициализируем структуру параметров построения матрицы зоны видимости BUILDVISIBLE, устанавливаем параметры зоны видимости, и вызываем функцию MAPAPI для построения матрицы видимости mtrBuildVisibleMtq;


 

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

Этот урок завершает цикл учебных материалов по работе с GIS ToolKit Active для начинающих программистов. И, хотя в 12-ти уроках трудно представить весь функционал пакета GIS ToolKit Active, мы надеемся, что смогли показать самые важные функции, необходимые программисту для создания собственного ГИС-приложения.

Смотреть: Дополнительные материалы к уроку 12

 

<< Перейти к уроку 11 Перейти в раздел "Обучение"
 
На главную страницу

Copyright: Касьянов О.В., 2007-2017
e-mail: info@panorama.kharkov.ua

bigmir)net TOP 100