В практическое использование свободной гис grass 0



Pdf просмотр
страница7/10
Дата11.11.2016
Размер5.01 Mb.
Просмотров2228
Скачиваний0
ТипРеферат
1   2   3   4   5   6   7   8   9   10
11.1.1 Поиск кратчайшего пути
Кратчайшее расстояние между двумя заданными точками может быть определено двумя способами. По умолчанию, стоимость выражается через длину векторов. Другие атрибуты объектов, например информация об ограничении скорости на дороге или информация о статусе
56
дороги, могут также использоваться для вычисления пути. Информация о стоимости может быть назначена для обоих направлений векторов. Кроме того, могут рассматриваться и атрибуты узлов (например, время цикла светофоров на перекрестках). Модуль d.path подсчитывает наименьшее расстояние между двумя точками отображаемыми на мониторе GRASS. Во время этого процесса модуль контролирует координаты курсора и сразу отображает результат на текущей карте.
Данный модуль был разработан для ввода только двух точек – начальной и конечной. Если предполагается, что будут использоваться дополнительные точки и/или результирующую карту необходимо сохранить, необходимо использовать модуль v.net.path. Принцип работы v.net.path похож на d.path, но требует больше параметров. Другим отличием является то, что он создает новую векторную карту с результатами анализа. Таким образом, данный модуль позволяет пользователю сохранять созданные пути по отдельности в векторных наборах данных.
Возможным применением модуля является поиск кратчайшего пути в дорожной сети. В качестве иллюстрации метода используется набор данных проекта FRIDA по городу Оснабрюк. С помощью описанной ниже команды можно найти кратчайший маршрут между точками 40 и 71. echo "1 40 71" | v.net.path mygraph out=mypath
Для получения информации с учетом направлений движения в вычисление могут быть включены колонки «вперед», «назад». В результате работы создается карта mypath, содержащая кратчайший путь между заданными точками.
11.1.2 Подсети внутри сети объектов
Модуль v.net.alloc позволяет рассчитывать подсети внутри заданной сети объектов. Например, границы действия полицейских участков в городе. Подобного рода информация в дальнейшем может быть использована в приложении к конкретной ситуации. В главе 12 данный пример рассматривается подробнее.
11.1.3 Проблема минимального дерева Штайнера
Минимальное дерево Штайнера описывает оптимальное соединение узлов в сети. Помочь понять принцип работы этого метода должен следующий пример:
Между несколькими госпиталями, разбросанных по городу, нужно проложить новые сетевые кабели. Целью анализа является определение оптимального расположения необходимых кабелей вдоль доступных дорог. Под термином «оптимальное расположение» подразумевается необходимость использования наименьшего количества кабелей, с одной стороны, но так, чтобы все госпитали оказались объединены в новую кабельную сеть с другой. Для данной задачи используется модуль GRASS v.net.steiner.
11.1.4 Задача коммивояжера
Здесь задачей является определение наилучшего маршрута между разными точками. К примеру, представитель фармацевтической компании планирует посетить разбросанные по городу госпитали. Модуль GRASS v.net.salesman рассчитывает наилучший маршрут для путешественника – кратчайший путь как по расстоянию, так и по времени. v.net.salesman in=hospital_net out=pharmarepresentative ccats=40-215
11.1.5 Стоимостной анализ
Модуль GRASS v.net.iso проводит стоимостной анализ в сети объектов. Он заключается в вычисление равных расстояний, например через концентрические расстояния вокруг точки.
Таким образом, основываясь на длине объектов или других атрибутах, можно рассчитать
«протяженность серии» (например, для каналов канализационной системы).
57

11.2 Пересечение, наложение, объединение объектов
Операции пересечения, наложения или объединения объектов осуществляются в GRASS модулем v.overlay.
Рисунок 19: Данные VMAP0 по Германии
Для объяснения последовательности шагов будем использовать простые примеры на основе небольшого набора данных VMAP0 по Германии.
Этот набор данных содержит спроектированные и подготовленные для скрипта GDF
Hannover государственные границы, внутренние водные пути, авто- и железные дороги, а также высотные отметки по Германии (набор данных доступен для скачивания на вебсайте: http://www.gdf-hannover.de/download)
Во-первых, необходимые SHAPE-файлы должны быть импортированы в GRASS. Используя информацию о проекции Shape-файлов, для данных автоматически создается новая область.
# создать область из сессии GRASS: v.in.ogr pol_borders.shp out=pol_borders location=germany exit

# перезапустить с по-новому созданной областью: grass60 /home/user/grassdata/germany/PERMANENT v.in.ogr -e dsn=./inlandwaterways .shp out=inlandwaterways v.in.ogr -e dsn=./roads.shp out=roads v.in.ogr -e dsn=./railways.shp out=railways v.in.ogr -e dsn=./heightpoints.shp out=heightpoints
11.2.1 Объединение данных
Объединение данных в GRASS возможно, если в качестве входных данных используются полигональные слои (параметры ainput, binput). В качестве примера, объединим государственные границы с внутренними водными путями: v.overlay ainput=pol_borders binput=inlandwaterways \ output=lakeinborders operator=or
В атрибутивной таблице результирующей карты сохраняются атрибутивные данные обоих входных слоев. Объединенная таблица содержит в названии каждого поля соответствующий
58
префикс (a_ или b_), обозначающий источник данных.
11.2.2 Пересечение данных
При пересечении двух векторных слоев результирующий слой содержит только объекты, которые имеются в обеих входных картах. Все остальные области удаляются: v.overlay ainput=pol_borders binput=inlandwaterways \ output=borderswherelakes operator=and
В данном случае результат показывает, что сохраняются только территории внутренних водных путей.
11.2.3 Вырезание данных
Вырезание данных противоположно объединению данных.
Результат содержит отредактированные объекты из ainput, которые не пересекаются с объектами из binput: v.overlay ainput=pol_borders binput=inlandwaterways \ output=borderswherenolakes operator=not
11.2.4 Наложение данных
Во время наложения объекты из ainput или binput переходят в результирующий слой если ainput не перекрывается binput. Следующий пример показывает, что объекты слоя inlandwaterways и pol_borders образуют новый слой bordersoverlakes, кроме объектов inlandwaterways перекрывающихся с pol_borders. v.overlay ainput=inlandwaterways binput=pol_borders \ output=bordersoverlakes operator=xor
11.3 Получение фрагмента данных
Модуль v.extract позволяет получать фрагмент данных с пространственной и атрибутивной информацией и сохранять их в новом наборе данных. В следующем примере из слоя pol_borders извлекается фрагмент с административными границами штата Нижняя Саксония: v.extract in=pol_borders out=pol_borders_nds type=area new=-1 \ where="nam='NIEDERSACHSEN'"
11.4 Выборки
Слой roads содержит наиболее важные дороги Германии. Допустим, что для проекта интересны дороги только федерального штата Нижняя Саксония. Для того, чтобы извлечь эти дороги пересекающие весь штат Нижняя Саксония, можно выбрать с помощью модуля v.select из слоя roads, основываясь на административных границах Нижней Саксонии (слой pol_borders_nds): v.select ain=roads bin=pol_borders_nds out=nds_roads
11.5 Управление топологией
Для создания, анализа и восстановления топологии векторных данных доступны два модуля: v.build и v.clean.
v.build
Модуль v.build является преемником модуля v.support из GRASS 5.4. Он осуществляет реорганизацию топологии и обычно делает это автоматически. Кроме того, он содержит так называемую функцию DUMP, которая переносит информацию о топологии или
59

«пространственный индекс» в стандартное устройство вывода.
v.clean
Модуль v.clean позволяет пользователю изменять и/или восстанавливать топологию векторных данных. В настоящее время предлагается 12 операций по топологии:
break: разбивает пересекающиеся линии в точках пересечения и создает в этих точках узлы.
rmdupl: удаляет дублирующиеся линии. Необходимо внимательно следить за атрибутивной информацией
rmdangle: удаляет так называемые висящие узлы. Необходимо внимательно следить за пороговым значением.
chdangle: изменяет тип данных висящего из границы в линию. Необходимо внимательно следить за пороговым значением.
rmbridge: удаляет топологически недопустимые соединения между сушей и островом или между двумя островами.
chbridge: изменяет тип данных соединения между сушей и островом или между двумя островами из границы в линию.
snap: в зависимости от пороговой величины, узлы линий объединяются с ближайшими узлами.
rmdac: удаляет центроиды в дублирующихся полигонах.
bpol: топологическая чистка данных, которые не имеют собственной топологии
(например, SHAPE-файлы). Создание новой топологии с корректными переходами вертекс-линия.
prune: в зависимости от указанного порога линий и границ удаляет вертексы, не изменяя или нарушая топологию.
rmarea: в зависимости от указанного порога удаляет полигоны небольшого размера и относит их к ближайшей наибольшей области.
rmsa: удаляет небольшие углы между линиями и узлами.
11.6 Векторизация в GRASS
Во время обновления структуры векторных данных также был переписан и модуль векторизации v.digit. Модуль реализован в виде отдельного графического меню, в котором наиболее важные функции объединены в кнопки.
Рисунок 20: Графический интерфейс модуля векторизации v.digit
Прежде чем приступить к примеру использования нового модуля векторизации, с помощью рисунка
20
кратко опишем слева направо все главные функции модуля и их свойства:
Digitize new point (создать новую точку): используется для создания нового точечного объекта. Опции данной функции: необходимость выбора редактируемого слоя и атрибутивного значения точки. В последнем случае доступны следующие значения: 'нет значения', 'ручной ввод' и ‘следующее неиспользованное'. Если в базе данных доступна
60
подходящая атрибутивная таблица, она автоматически открывается после оцифровки объекта (см. рис. 23). Эти опции применимы также к описанным ниже Созданию новой линии, Созданию новой границы и Созданию нового центроида.
Digitize new line (создание новой линии): используется для оцифровки новой линии.
Digitize new boundary (создание новой границы): используется для создания новой замкнутой границы (линейный объект). Если в базе данных доступна подходящая атрибутивная таблица, она автоматически открывается после создания объекта. Если создается полигон, связанная с ним атрибутивная информация присоединяется не к границе, а к центроиду. Так, что данный центроид помещается внутрь созданного полигона (см. также функцию Векторизация нового центроида). Поэтому, когда используется функция Векторизация новой границы и нужно создать полигон, вам необходимо установить тип категории 'нет категории'.
Digitize new centroid (создание нового центроида): используется для создания нового центроида внутри нового полигона. Если в базе данных доступна подходящая атрибутивная таблица, она автоматически открывается после создания объекта.
Атрибуты связаны с полигоном через центроиды.
Move vertex (переместить вертекс): позволяет пользователям перемещать вертекс. К вертексам не может быть присоединена атрибутивная информация. Необходимо учесть, что вертексы и узлы это разные вещи. Точечные объекты и центроиды полигонов не являются вертексами и не могут быть изменены этой функцией. То же самое относится к
Добавить вертекс, Удалить вертекс.
Add vertex (добавить вертекс): позволяет добавлять вертексы.
Remove vertex (удалить вертекс): позволяет удалять вертексы.
Split line (разбить линию): позволяет разбить линию в любом месте. Для присоединения дополнительных линий или дополнительной атрибутивной информации здесь создается новый узел.
Move point, line, boundary or centroid (переместить точку, линию, границу или центроид): позволяет пользователям переместить точечный объект, линейный объект или центроид. Если область разъединена несколькими узлами, перемещается не весь полигон, а только соответствующая граница.
Delete point, line, boundary or centroid (удалить точку, линию, границу или центроид): позволяет пользователям удалить точечный объект, линейный объект или центроид.
Если область разъединена несколькими узлами, удаляется только соответствующая граница, а не весь полигон.
Zoom in by window (увеличить окном): позволяет увеличивать область, которая будет указана мышкой на экране. Соответственно, значение масштаба, задаваемое кнопкой мыши, изменяется и параллельно отображается в меню. Изменение масштаба мышью действует идентично модулю d.zoom.
Zoom out (уменьшить): этой кнопкой пользователь может уменьшать область на экране через заданный интервал.
Pan (сдвинуть): позволяет пользователю сдвигать карту. Интервал сдвига определен внутреними настройками и не может быть изменен. В настоящее время до сих пор отсутствует связь между модулем сдвига и модулем векторизации. Функция резиновой ленты, позволяющей осуществлять сдвиг при векторизации без вмешательства в процесс, также все еще недоступна.
Zoom to default region (увеличить до стандартного фрагмента): устанавливает охват окна равным стандартному (g.region -d) и перерисовывает карту.
Zoom to region (увеличить до фрагмента): устанавливает масштаб проекта равным заранее сохраненному фрагменту. Сохранить фрагмент можно с помощью команды g.region или опции save=.
Redraw (перерисовать): очищает содержимое окна и перерисовывает его заново. Данная функция необходима, например, при изменении настроек фоновой карты.
61

Display categories (показать категории): показать на экране, а также изменить значения категорий и значения поля layer отдельных выбранных мышкой объектов (точек, линий, границ и центроидов).
Display attributes (отобразить атрибутивную информацию): отобразить на экране, а также изменить атрибутивные значения отдельных выбранных мышкой объектов (точек, линий, границ и центроидов). Значения поля layer и значения категорий, а также значение индексного поля отображаются как дополнительная информация. По желанию при сохранении атрибутов может меняться и кодировка – доступны utf-8, ascii, iso8859-1 и koi8-r.
Open settings (открыть настройки): позволяет произвести различные базовые настройки процесса векторизации, включая изменение цвета символов для отображения на экране
(symbology). Установка порогового значения для сцепления объектов производится в пикселях или единицах карты (settings). Пользователь может также создать атрибутивную таблицу (Table). Установка фоновой карты позволяет определить основу, по которой будет проводиться векторизация, можно использовать несколько разных картах в векторном или растровом формате (background).
Exit (выход): после завершения векторизации, выйти из модуля v.digit можно с помощью кнопки Exit. В карте сохраняются все правки, а также производится автоматическая перестройка топологии.
Пример использования модуля векторизации
В качестве примера будет векторизоваться небольшой участок топографической карты TK
1:24000 (см. рис. 21) из базы данных Spearfish. Топографическая карта с территорией 'Spearfish' была представлена South Dakota Geological Survey (SDGS) специально в целях обучения ГИС
GRASS. Данные подготовленные для работы могут быть загружены с вебсайта http://grass.itc.it/download/data.php
Импорт TK24 в набор данных Spearfish
# Скачать демонстрационный набор данных Spearfish и TK24 wget http://grass.itc.it/sampledata/spearfish_grass57data.tar.gz wget http://grass.itc.it/sampledata/spearfish_toposheet.tar.gz
# Распаковать область Spearfish в формат GRASS и запустить GRASS tar xvzf spearfish_grass57data.tar.gz /home/user/grassdata/ grass60 /home/user/grassdata/spearfish57/PERMANENT
# Импортировать TK24 (GeoTiff) в область tar xvzf spearfish_toposheet.tar.gz r.in.gdal -e in=spearfish_topo24.tif out=tk24
# Проверить изображение g.region rast=tk24 -ap d.mon x0 d.rast tk24
В целях обучения предлагается использовать для работы местную зону отдыха вокруг 'Lookout
Peak' к востоку от Spearfish. Точечная, линейная и полигональная информация по объекту 'Lookout Peak', информация о рельефе и облесенные территории векторизуются в три тематические карты (см. рис. 21).
62

Рисунок 21: Топографическая карта региона Spearfish с информацией о землепользовании
Для сохранения новых векторных данных в отдельных пользовательских наборах вам необходимо выйти из GRASS (чтобы выйти из области PERMANENT) и начать работу заново с новым набором данных:
# Выйти из GRASS exit
# Заново начать GRASS и создать новый набор grass60 (указать название нового набора в графическом интерфейсе пользователя или в консоли)
[STRG][ESC]
Точка обзора 'Lookout Peak'
Для векторизации интересующего объекта 'Lookout Peak' запускается модуль v.digit и с помощью опции -n создается новая карта lookout. В качестве подложки загружена импортированная топографическая карта tk24:
# Запустить модуль векторизации и создать новую пустую карту d.mon x0 g.region rast=tk24 v.digit -n map=lookout bgcmd="d.rast tk24"
Итак, автоматически запускается графический интерфейс пользователя (GUI) модуля v.digit (см. рис. 20) и карта TK24 загружается в монитор GRASS x0 в качестве подложки. Теперь в v.digit создайте новую атрибутивную таблицу с дополнительным столбцом Name, используя кнопки settings -> Table (см. рис. 22).
63

Рисунок 22: Создание атрибутивной таблицы в процессе векторизации
После этого, увеличьте участок карты к востоку от города Spearfish и векторизуйте точку, где находится интересующий объект 'Lookout Peak' (см. рис. 21).Чтобы сделать это, нажмите на кнопку digitize new point, найдите на карте нужную точку и кликните по ней левой кнопкой мыши.
Теперь автоматически открывается графическое окно, в котором в заранее созданные атрибутивные поля можно ввести дополнительную атрибутивную информацию по точке. В данном примере предлагается добавить значение категории согласно названию точки обзора.
Кликните мышкой в окне и введите 'Lookout Peak' в поле Name, после этого кликните по кнопке submit, чтобы добавить введенное значение в атрибутивную таблицу. Успешность будет подтверждена сообщением Record successfully updated.
Теперь закройте модуль v.digit путем нажатия на кнопку Exit. Таким образом, созданная карта lookout автоматически сохраняется и строится ее топология:
Building topology ...
# Построение топологии
1 primitives registered # создан один объект
0 areas built 0%
# построено 0 полигонов
0 isles built
# построено 0 островов
Topology was built.
# Топология построена
Number of nodes : 1 # Количество узлов
Number of primitives: 1 # Количество примитивов
Number of points : 1 # Количество точек
Number of lines : 0 # Количество линий
Number of boundaries: 0 # Количество границ
Number of centroids : 0 # Количество центроидов
Number of areas : 0 # Количество полигонов
Number of isles : 0 # Количество островов
Векторизация изолиний
Следующее упражнение связано с векторизацией 100м изолиний, расположенных вокруг интересующего объекта. Как и в предыдущем примере, запускается модуль v.digit и с помощью опции -n создается новая карта contour_lines. В качестве подложки загружается импортированная топографическая карта tk24:
# Запустить модуль векторизации и создать новую пустую карту d.mon x0 g.region rast=tk24 v.digit -n map=contour_lines bgcmd="d.rast tk24"
Автоматически запускается графический интерфейс пользователя (GUI) модуля v.digit (см. рис.
20) и карта TK24 загружается в монитор GRASS x0 в качестве подложки. Теперь в v.digit создайте новую атрибутивную таблицу с дополнительным столбцом height, используя кнопки settings -> Table (см. рис. 22).
64

Следующим шагом снова увеличьте участок карты к востоку от города Spearfish (см. рис. 21) и начните векторизацию линии, нажав кнопку digitize new line. Далее на экране выберите левой кнопкой мыши исходную линию, которая должна быть отвекторизована. Назначение кнопок мыши описано в графическом интерфейсе пользователя. Здесь же возможно определить значение layer и тип значений категорий.

Рисунок 23: Ввод атрибутивной информации при векторизации
По завершению векторизации линии откроется графическое окно, в котором можно ввести дополнительную атрибутивную информацию в заранее созданные поля атрибутов (см. рис. 23).
В данном примере предлагается добавить значение категории согласно высоте линии. Кликните мышкой в окне и введите высоту, например 4200, в поле height, после этого кликните по кнопке submit, чтобы добавить введенное значение в атрибутивную таблицу. Успешность будет подтверждена сообщением «Record successfully updated».
По завершению векторизации выйдите из модуля v.digit путем нажатия на кнопку Exit. Таким образом, созданный слой contour_lines автоматически сохраняется и строится ее топология:
Building topology ...
825 primitives registered
0 areas built
0 isles built
Topology was built.
Number of nodes : 203
Number of primitives: 249
Number of points : 0
Number of lines : 249
Number of boundaries: 0
Number of centroids : 0
Number of areas : 0
Number of isles : 0
Покрытые лесами территории к востоку от Spearfish
Наконец, приступим к векторизации облесенных территорий, окружающих интересующий нас
65
объект. Здесь тоже запускается модуль v.digit и с помощью опции -n автоматически создается новая карта forest. В качестве подложки загружается импортированная топографическая карта tk24:
# Запустить модуль векторизации и создать новую пустую карту g.region rast=tk24 d.mon x0 v.digit -n map=forest bgcmd="d.rast tk24"
Автоматически запускается графический интерфейс пользователя (GUI) модуля v.digit (см. рис.
20) и карта TK24 загружается в монитор GRASS x0 в качестве подложки. Теперь в v.digit создайте новую атрибутивную таблицу с дополнительным столбцом Name, используя кнопки settings -> Table (см. рис. 22).
Увеличьте участок карты к востоку от города Spearfish (см. рис. 21) и начните векторизацию облесенных территорий, нажав кнопку digitize new boundary и подобрав в окне исходный объект для оцифровки. Назначение кнопок мыши описано в графическом интерфейсе пользователя.
Здесь же возможно определить значение layer и тип значений категорий. Для векторизации облесенных территорий смените тип ‘следующий неиспользованный’ на ‘нет категории’. Это делается, поскольку атрибуты полигональных объектов могут быть связаны с центроидами, но не с границами.
Важно корректно установить пороговое значение для сцепления объектов, чтобы линии были должным образом присоединены друг с другом. Стандартная установка порогового значения для сцепления составляет 10 пикселей экрана, но оно может быть изменено с помощью кнопок settings -> settings (см. рис. 24) согласно вашим потребностям.

Рисунок 24: Установка порогового значения для сцепления объектов при векторизации
При векторизации полигонального объекта, к полигону добавляется центроид, чтобы атрибутивная информация могла быть связана с объектом. Для этого нажмите на кнопку векторизовать новый центроид, измените тип с «нет категории» на «следующий неиспользованный» и для помещения нового центроида найдите на экране подходящую точку внутри только что созданного полигона. После того как левой кнопкой мыши установлен центроид, откроется графическое окно, в котором можно ввести дополнительную атрибутивную информацию о точке в заранее созданные атрибутивные поля (см. рис. 23). В данном примере предлагается добавить значение категории согласно типу землепользования. Кликните мышкой в окне и введите тип землепользования forest в поле Name. Нажмите кнопку submit, чтобы обновить введенное значение в атрибутивной таблице. Успешность будет подтверждена сообщением Record successfully updated.
По завершению векторизации выйдите из модуля v.digit с помощью кнопки Exit. Таким образом, созданная карта forest автоматически сохраняется и строится ее топология:
Building topology ...
478 primitives registered
46 areas built isles built
Topology was built.
Number of nodes : 357
Number of primitives: 478 66

Number of points : 0
Number of lines : 0
Number of boundaries: 367
Number of centroids : 46
Number of areas : 46
Number of isles : 0

67

12 Пример применения: оптимизация зоны обслуживания на
основе векторных данных
В данной главе представлен небольшой пример использования модуля сетевого анализа v.net.alloc, связанный с новыми особенностями векторных данных.
В примере определяются области до которых, в случае чрезвычайной ситуации, могут максимально быстро добраться машины скорой помощи, выезжая из определенных точек
(госпиталей). Обычно для каждого направления или узла (дороги или перекрестка) можно определить набор разных факторов, связанных с движением по данному направлению
(скорость, состояние дорог, улицы с односторонним движением). Но в данном примере ограничивающим фактором является лишь расстояние, которое должно быть преодолено.
12.1 Импорт данных примера
Как и в некоторых предыдущих примерах здесь будут использоваться бесплатные пространственные данные проекта FRIDA по городу
Оснабрюк
(Германия): http://frida.intevation.org/
. Кроме актуальной дорожной сети данные содержат информацию о доступных водных объектах и парках, а также важных объектах (госпитали, школы и т.д.).
Данные представлены в формате Shape-файлов ESRI.
При импорте данных FRIDA в GRASS автоматически происходит создание необходимой области в проекции Гаусса-Крюгера (см. также главу 5.2).
Импорт необходимых SHAPE-файлов осуществляется модулем v.in.ogr (например, для набора данных Spearfish):
# Начать новую сессию GRASS (например, с набором данных Spearfish): grass60
/grassdata/spearfish60/user1/
# Импортировать дорожную сеть с созданием новой области: v.in.ogr dsn=frida-1.0.1-shp-joined/strassen-joined.shp \ output=strassen loc=frida exit
# Перезапустить с новой областью: grass60
/grassdata/frida/PERMANENT
# Импортировать объекты (госпитали, ...): v.in.ogr dsn=frida-1.0.1-shp-joined/poi-joined.shp output=points
68

Рисунок 25: Базовая карта: дорожная сеть и госпитали города Оснабрюк
Проблемы, связанные с топологией, обычно исправляются при импорте данных с помощью команды v.in.ogr. Если же при импорте данных возникают сообщения об ошибках, например, как это может быть в случае с набором полигональных данных (FRIDA V1.0.1), для их устранения используйте модуль v.clean (см. главу 11.5).
Прежде чем перейти к ассоциированию уже доступных узлов дорожной сети с госпиталями, необходимо создать новое поле layer. Это позволит в дальнейшем связывать разные атрибутивные таблицы через это поле:
# Добавление: v.category points out=points_2f layer=2 op=add
# Проверка: v.category points_2f layer=1,2 op=print # -> layer 1 == layer 2
12.2 Получение госпиталей из точечного файла
Следующим шагом из слоя points_2f произведем выборку тех точек, которые обозначены как госпитали:
# Выборка госпиталей: v.extract in=points_2f out=hospitals_pre type=point\ where="poiTypName='Klinik/Hospital'"
69

v.select ainput=points_2f binput=hospitals_pre out=hospitals
# Проверка: v.info hospitals # -> one dblink v.category hospitals layer=1,2 op=print # -> 2 layers d.erase d.vect roads d.vect hospitals disp=attr attr=poiNameID bgcolor=white bcolor=black d.vect hospitals col=red icon=basic/diamond
12.3 Ассоциирование госпиталей с дорожной сетью
На рисунке 25 показана начальная ситуация для вычисления границы зоны оптимизации. Для ассоциирования госпиталей с дорогами необходимо, чтобы они предварительно были интегрированы в дорожную сеть. Также должно быть указано определенное значение, на основе которого с помощью layer 2 затем будут производиться вычисления.
Ассоциирование осуществляется с помощью двух операций. Сначала точечные объекты
(госпитали) hospitals объединяются с линейными объектами roads (дороги) в новую карту roads_hospitals, и атрибутивные таблицы связываются друг с другом посредством поля layer.
# Пересечение данных: v.patch in=roads,hospitals out=roads_hospitals
# Проверка: v.info roads_hospitals # -> dblinks = 0 d.erase d.vect roads_hospitals d.vect roads_hospitals type=point col=red
# определение базы данных (если необходимо) db.connect dr=dbf database='$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/'
# показать на экране атрибутивную информацию объектов db.describe -c roads ncols:7
Column 1: cat
Column 2: strShapeID
Column 3: strID
Column 4: strTypID
Column 5: strSpuren
Column 6: strEbene
Column 7: strName
# -> Столбец 'cat' был добавлен при импорте данных с помощью 'v.in.ogr'.
# Связать атрибутивную информацию линейной темы с новым слоем v.db.connect roads_hospitals dr=dbf \ data='$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/' \ table=roads layer=1 key=cat
# Связать атрибутивную таблицу точечной темы с новым слоем v.db.connect roads_hospitals dr=dbf \ data='$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/' \ table=hospitals layer=2 key=cat
# Проверка: v.db.connect -p roads_hospital
Примечание:
70

Учтите, что если карта roads_hospitals будет удалена, удалятся и все связанные с нею атрибутивные таблицы – атрибутивные таблицы тем hospitals и roads (см. главу 10.3). Избежать этого можно путем копирования атрибутивных таблиц, с которыми производится связывание.
Далее госпитали и дорожная сеть автоматически связываются и сохраняются в новой карте roads_hospitals:
# Создать связывающие линии между госпиталями и дорогами: v.distance -p from=hospitals to=roads output=roads_hospitals_connect\ upload=dist column=dist
# Связать соединяющие линии с самими госпиталями и дорогами: v.patch in=roads_hospitals,roads_hospitals_connect out=hospitals_net_pre
# Корректировать топологию v.clean in=hospitals_net_pre out=hospitals_net tool=break,snap
# Почистить g.remove vect=hospitals_net_pre,hospitals_pre
Итак, создана карта hospitals_net, включающая дорожную сеть, госпитали и связывающие их линии. Кроме того, с помощью layer 2 госпиталям назначена информация о категории. Эти категории используются как отправные точки при вычислении доступности госпиталей.
12.4 Назначение зон оптимальной доступности
После того, как рабочие данные были успешно отредактированы и подготовлены, можно приступать к вычислению зон оптимальной доступности. В зависимости от расстояний по дорожной сети госпитали должны быть доступны максимально быстро.
Как уже было отмечено, мы рассматриваем самый простой способ определения зон оптимальной доступности – без учета дополнительных факторов, таких как скорость или направление движения. В нашем случае возможные дополнительные параметры воображаемы, но могут быть назначены модулю v.net.alloc через дополнительный столбец: v.net.alloc input=hospitals_net output=hospitals_alloc ccats=40-215
Как результат из дорожной сети получаем подсети, назначенные госпиталям из соображений подсчитанной стоимости. Поэтому каждая дорога назначена именно к тому госпиталю, на который, исходя из расстояний вдоль дорожной сети, приходится наименьшая стоимость. Если потребуется, чтобы определить точную границу, внутри вектора могут быть добавлены новые
«узлы».
71

Рисунок 26: Назначение наиболее доступных дорог госпиталям
На рисунке 26 представлена итоговая карта к данному примеру. Этот результат можно отразить интерактивно с помощью d.m или командой d.vect: d.vect map=hospitals_alloc color=red cats=40 d.vect map=hospitals_alloc color=green cats=41 d.vect map=hospitals_alloc color=blue cats=69 d.vect map=hospitals_alloc color=black cats=215
В целом, GRASS предлагает пять разных сетевых модулей, коротко представленных в главе
11.1. Они используются похожим образом, поэтому данный пример показателен и для других модулей v.net.x.

72

13 Конвертация данных
При работе с пространственными данными очень часто возникает задача создания векторных данных на основе растровых. Такая задача может возникать как для линейных, так и для полигональных данных. Кроме того, не менее часто, приходиться сталкиваться с обратной задачей – получения растровых данных на основе векторных. Хорошим примером такой задачи может служить процесс создания цифровой модели рельефа на основе векторного слоя изолиний. ГИС GRASS включает широкую функциональность в области конвертации данных из одного формата в другой.
13.1 Векторизация растровых данных
В ГИС GRASS растровые данных могут быть автоматически сконвертированны в векторную модель представления данных. Конвертировать растровые данные можно как в полигональные векторные слои, так и в линейные. Кроме того, на основе растровых данных пользователь может создавать векторный слой изолиний.
Рисунок 27: Модули конвертации растровых данных в векторные
Векторизация в линии и изолинии
GRASS предлагает два модуля для автоматической конвертации растровых линейных данных в векторный формат. При этом выходной тип векторных данных может быть различным. Это могут быть линии или изолинии. Для каждого типа конвертации разработан соответствующий модуль: r.to.vect и r.contour.
Для конвертации в векторный линейный слой необходимо использовать команду r.to.vect.
Данный модуль поддерживает такие типы геометрии как линии, полигоны и точки. Тип линия установлен по умолчанию. В случае, если линия представленная в растровом слое слишком широка (состоит из группы пикселей), необходимо использовать инструмент r.thin. Этот модуль позволяет получить линейный растровый слой, где ширина линии будет равна одному пикселю: r.thin in=raster out=raster_thin r.to.vect in=raster_thin out=raster_vect feature=line
Создать слой изолиний, например с использованием растра ЦМР, можно с помощью команды r.contour. В таком случае, изолинии будут рассчитаны и отвекторизованы исходя из величины шага (расстояние между изолиниями), устанавливаемого пользователем.
Этот шаг должен быть выбран исходя с одной стороны, от разрешения растра, и с другой стороны - желаемого масштаба выходной карты
Векторизация полигональных объектов
73

Для векторизации растровых данных, представляющих полигоны, можно использовать модуль r.to.vect, который включает параметр feature=area r.to.vect in=raster_thin out=raster_vect feature=area
Сглаживание линейных и полигональных векторных слоев
В процессе конвертации растровых данных в векторные, пользователь практически всегда сталкивается с эффектом «ступенчатости» векторных линий. Эта ступенчатость зависит от разрешения растровых данных. GRASS включает специальный модуль позволяющий сглаживать этот эффект - v.clean . Этот модуль требует задания дополнительного параметра prune, определяющего степень сглаживания.
Рисунок 28: Сглаживание векторных данных
Эффект «ступенчатости» зависит от исходного разрешения растра. Его появление связано с тем, что при конвертации растра в вектор, векторизатор «двигается» не по центрам пикселей, а создает линию по краю каждого пикселя.
На рисунке 28 показан эффект сглаживания линии. В данном случает порог сглаживания установлен достаточно высоким, чтобы лучше продемонстрировать эффект сглаживания.
Исходная линия показана красным цветом, линия сглаженная с использованием модуля v.clean, показана голубым
В данном примере уменьшение количества вертексов (узлов) не нарушает топологию исходных данных. Более того, визуальное представление данных остается в пределах допустимого, а размер файла значительно уменьшается.
Необходимо еще раз отметить, что в процессе векторизации может меняться геометрия объектов. Именно поэтому, использование модуля векторизации должно осуществляться вдумчиво. Часто, определение оптимального порога сглаживания требует нескольких попыток.
Конвертация точечных данных
В силу реорганизации архитектуры представления векторных данных в GRASS 5.4 «точка» как
74
отдельный формат (sites-format) более не существует. Точечные данные теперь обрабатываются библиотекой векторных данных. Конвертация точечных растровых данных в точечные векторные может осуществляться с помощью модуля r.to.vect с параметром feature=point.
13.2 Конвертация векторных данных в растровые
Для конвертации векторных данных (полигональных, линейных и точечных) в растровую модель представления данных необходимо использовать модуль v.to.rast. При конвертации нужно указать ряд параметров, которые будут использованы для представления выходного растра.
Рисунок 29: Модули конвертации в векторных данных в растровые (
5
)
Доступны следующие варианты: attr -> Колонки атрибутивной таблицы cat -> Значения для категорий val -> Заданное значение z -> Z-координата (доступна только для точечных слоев и слоев изолиний)
Для того, чтобы результирующий растр наследовал значения определенной колонки атрибутивной таблицы векторного слоя, нужно использовать параметр attr и указать колонку, значения из которой необходимо использовать. Точность конечного растра будет зависеть от указанного разрешения (задается заранее). Изменить разрешение можно с помощью модуля g.region
GRASS содержит специальный инструментарий для создания растров на основе точечных данных. В таком случае, будут использованы алгоритмы интерполяции, подробно описанные в разделе 14.1.

75

14 Интерполяция данных
Одна из наиболее часто используемых операций для обработки точечных данных является операция интерполяции. Интерполяция может проводиться как на основе регулярной, так и на основе нерегуляной точечной сети. В ГИС поверхности, получаемые в процессе интерполяции, чаще всего используются для моделирования и симуляции.
Наиболее характерным примером интерполяции может служить цифровая модель рельефа, создаваемая на основе точечного слоя отметок высот.
14.1 Интерполяция данных в растровую модель
Доступны два варианта интерполяции полигональных данных:
1. Изменение разрешения растровых данных (пересчет)
2. Заполнения данными пустых областей (собственно интерполяция)
Для интерполяции в GRASS по первой схеме (пересчет) доступны два модуля:
1. Метод ближайшего соседа
2. Сплайн-интерполяция (Regularized Splines with Tension, RST)
Для интерполяции по второй схеме также доступны два модуля:
1. Метод Обратно-взвешенных расстояний (ОВР)
2. Сплайн-интерполяция (Regularized Splines with Tension, RST)
14.1.1 Метод ОВР
Этот тип интерполяции является локальным и основан на следующих допущениях. Чем ближепространственно точка, значение которой необходимо рассчитать, расположена по отношению к точке, значение которой известно, тем более близкое значение эта точка будет иметь по отношению к известной. В первый момент времени рассчитывается расстояние между искомой точкой и всеми окружающими ее точками. Далее рассчитывается среднее значение всех точек, окружающих искомую точку, с учетом расстояния до искомой точки (отношение как
1/d, где d – расстояние до точки). Кроме того, расстояние между точками может быть проэкспоненциированно в зависимости от особенностей моделируемой поверхности (1/d
2
or
1/d
3
).
Для интерполяции необходимо понимать особенности интерполируемой поверхности.
Параметры интерполяции в интерактивном режиме должны быть заданы пользователем.
Выходным файлом интерполяции будет являться растр.
Модули GRASS для ОВР-интерполяции: v.surf.idw (входной файл: векторный формат) r.surf.idw (входной файл: растровый формат)
В GRASS 5.4 модуль s.surf.idw заменен на модуль v.surf.idw , в связи с изменением архитектуры представления точечных векторных данных в GRASS 6.0.
14.1.2 Интерполяция методом сплайнов
Метод сплайнов также может быть использован для интерполяции больших территорий. В процессе интерполяции этим методом создается разреженная поверхность, проходящая через или около точек, содержащих интерполируемые значения. Целью такого метода является максимально точное представление доступных данных, с одной стороны, и заполнение пробелов в данных, с другой. Для того, чтобы достичь приемлемого результата при такой
76
интерполяции, необходимо точно понимать значение отдельных модулей и параметры, используемые в них. Более детально, оптимизация выбора параметров интерполяции описана в главе 7.
При использовании метода интерполяции Splines-with-Tension на основе векторных данных создается растровый слой.
Модули GRASS для RST-интерполяции v.surf.rst v.vol.rst (растровое моделирование объема)
Как уже было отмечено ранее, в связи с переходом на новую архитектуру представления точечных векторых данных в GRASS, модуль RST-интерполяция теперь доступен как v.surf.rst
Другие модули GRASS для интерполяции: r.surf.area r.surf.contour r.surf.fractal r.surf.gauss r.surf.random
14.2 Интерполяция данных с получением векторных данных
Точечные данные (например, значения измерений или наблюдений) могут быть репрезентативны для представления регионов. Такая возможность доступна с помощью алгоритма «Расчет полигонов Тиссена»
Прежде чем рассчитывать полигональный слой с помощью метода ОВР, необходимо вручную внести координату Z (высота) для каждой точки. По мере необходимости разрешение может быть увеличено с помощью g.region v.surf.idw in=[point file] out=[output file(Thiessen)] npoints=1
В таком случае, используются различные методы триангуляции. Более детальная информация доступна в Руководстве модулем (g.manual v.surf.idw).

77

15 Растровая математика в r.mapcalc
Модуль r.mapcalc используется для управления, анализа и создания растровых слоев с помощью арифметических операторов. Модуль может быть запущен из интерфейса или через оболочку GRASS. При работе с ним могут быть использованы существующие растровые слои, константы (целые значения или значения с плавающей точкой), а также векторные объекты. В
GRASS данные “нет значения” и со значением равным нулю могут быть разделены следующим образом:
NULL = NoData, без значения
Zero = 0 (например, точка замерзания по Цельсию)
Использование r.mapcalc предполагает знание форматов изображений, проекций карт и охвата текущего фрагмента (region). Перед использованием модуля рекомендуется ознакомиться с соотверствующей справочной информацией, поскольку модуль включает достаточно большой набор функций.
15.1 Операторы в r.mapcalc
Таблица 12: Операторы в r.mapcalc
Оператор Значение
Тип
Приоритет
Экспонента арифметический 5
%
Пропорция (по модулю) арифметический 4
/
Деление арифметический 4
*
Умножение арифметический 4
+
Сложение арифметический 3
-
Вычитание арифметический 3
== равно логический 2
!=
Не равно логический 2
>
Больше чем логический 2
>=
Больше чем или равен логический 2
<
Меньше чем логический 2
<=
Меньше чем или равен логический 2
&& и логический 1
|| или логический 1
# оператор- разделитель арифметический -
1
результат значение с плавающей точкой, если константа a является значением с плавающей точкой.
2
результат - значение с плавающей точкой.
3
результат - целочисленное значение
78

15.2 Функции в r.mapcalc
Таблица 13: Функции в r.mapcalc
Функция
Описание
Тип
*
1
abs(x) абсолютное значение x
F
2
atan(x) обратный тангенс x (результат в градусах) atan(x,y) обратный тангенс y/x (результат в градусах)
F cos(x) косинус x (x в градусах) F double(x) конвертация x в двойную точность плавающей точки
F eval([x,y,...,]z) оценка результатов перечисленного выражения, направление результатов в z exp(x) экспоненты x
F exp(x,y) x в степень y
F float(x) конвертация x в значение с плавующей точкой
F graph(x,x1,y1[x2,y2..]) конвертация x в y основываясь на точках диаграммы
F if
Условие: * if(x) 1 если x не ноль, иначе 0 if(x,a) a если x не ноль, иначе 0 if(x,a,b) a если x не ноль, иначе b if(x,a,b,c) a если x > 0, b если x = 0, c если
79
x < 0 int(x) конвертация x в целое значение
[округление] isnull(x) проверка если x = NULL
I log(x) натуральный логарифм x
F log(x,b) логарифм x по основанию b
F max(x,y[,z...]) максимальное значение из перечисленных
* median(x,y[,z...]) медиана перечисленных * min(x,y[,z...]) минимальное значение из перечисленных
* mode(x,y[,z...]) мода перечисленных * not(x)
1 if x is zero, 0 otherwise rand(a,b) случайное значение между a и b
I
3
round(x) округление x к ближайшему целому значению sin(x) синус x (x в градусах) F sqrt(x) квадратный корень x
F tan(x) тангенс x (x в градусах) F
1
результат - значение с плавающей точкой, если константа a является значением с плавающей точкой.
2
результат - значение с плавающей точкой.
3
результат - целочисленное значение.
80

15.3 Внутренние переменные в r.mapcalc
Таблица 14: Внутренние переменные в r.mapcalc
Переменная
Значение
row()
Текущий ряд плавающего окна col()
Текущая колонка плавающего окна x()
Текущая x координата плавающего окна y() current y-coordinate of плавающего окна ewres()
Текущее разрешение с востока на запад nsres()
Текущее разрешение с севера на юг null() NULL значение
Для объяснения различной интерпретации инструкций r.mapcalc приведем два простых примера:
# Растровый слой почв минус слой reclass умноженный на 2
New map = soils-reclass * 2
# Растровый слой почв минус слой reclass, результат умножить на 2
New map = "soils-reclass" * 2
15.4 Маскирование
Маскирование диапазона значений изображения – полезная операция для их предварительного анализа. С помощью команды g.copy можно использовать существующие растровые слои в качестве маски. Для того, чтобы слой был представлен в качестве маски, его необходимо назвать MASK (заглавные буквы). В качестве значений маски будут использованы все значения, которые не равны NoData (NULL).
Маски могут быть созданы с помощью модуля r.mapcalc:
# Простое копирование слоя в качестве маски: r.mapcalc "MASK=map"
# Более сложная операция для создания маски,
# назначить маску только значениям 1 и 3: r.mapcalc "MASK=if(map==1 || map==3,null(),map)"
В качестве примера, выполним анализ растровых данных из базы данных Spearfish, только для тех областей слоя geology, где в поле «владелец» есть какое-либо значение:
# Создать маску для областей с определенным значением: r.mapcalc "mask_map=if(fields,1,null())" g.copy rast=mask_map,MASK
# Проверка: d.rast geology
Теперь должны быть видны только геологические районы, где в поле «владелец» есть какое-
81
либо значение (т.е. есть зарегистрированный владелец).
Необходимо принять во внимание, что созданная маска будет использоваться для всех операций анализа растровых данных, но не будет использоваться для анализа векторных. Если маска больше не испольуется, слой MASK может быть удален (см. главу 9.6.2). В случае если маска создана, комментарий в системной оболочки [Raster MASK present] будет об этом напоминать.

82

16 3D визуализация и анимация
Кроме создания двухмерных карт, с помощью GRASS также можно создавать 3D визуализации и анимации. Для этих целей предназначен модуль NVIZ совместимый с таким свободным программным обеспечением как Vis5D и Vis5D+.
16.1 Визуализация 3D карты с помощью NVIZ
Инструмент NVIZ создан на основе модуля SG3d и предназначен для визуализации 3-мерных растровых, векторных и точечных данных, а так же для 3D выборок и анимаций.

Рисунок 30: Окно управления NVIZ
Перед тем как запустить программу, необходимо проверить разрешение текущей области
GRASS, так как оно будет определять максимально возможное разрешение в NVIZ.
Значительные размеры региона, такие как, например 1000 x 1000 (ширина, высота) могут замедлить работу NVIZ.
Модуль может быть запущен с указанием карты, которую необходимо загрузить: nviz elev=elevation_map либо с параметром -q.
Параметры:
-q
Быстрый старт elevation
(опционное) имя растрового слоя GRASS содержащего значения высот (z)
83
vector (опционное) имя векторного слоя GRASS
После запуска NVIZ откроется окно с графической информацией в котором будут показаны объекты, и окно управления. Из окна управления можно вызвать дополнительные меню
(например: выбор цветов, цвет фона или создание анимаций).
Окно управления содержит следующие команды и опции:
Auto Clear
Если включено, окно графики автоматически очищается перед тем как отрисовать поверхность.
Clear:
Очищает содержимое окна и заливает его цветом фона.
Surface:
Показывает загруженную растровую поверхность с текущими настройками.
Vectors:
Показывает загруженные векторные слои на поверхности.
Sites:
Показывает загруженные точечные данные на поверхности.
Volumes:
Показывает загруженные карты объема (объемные поверхности) в трехмерном представлении.
Cancel:
Останавливает перерасчет содержимого окна.
XY position:
Содержит координаты точки наблюдателя.
Расположение наблюдателя может быть изменено нажатием на него.
Height:
Регулирует высоту наблюдателя.
look here:
Позволяет пользователю задать точку на поверхности, которая будет центральной даже если расположение наблюдателя изменено.
look cancel: Отменяет предыдущую возможность.
zexag:
Изменяет вертикальный масштаб поверхности.
Параметры x, y, z по умолчанию равны 1. Если горизонтальные координаты измеряются в метрах, а высота в футах, значение zexag равное .305 покажет истинные размеры поверхности. При увеличении значения zexag > 1.0, поверхность визуально становится выше, что не соответствует действительности, но часто более наглядно.
Perspective: Показывает угол наблюдения.
Twist:
Показывает расположение поверхности.
Reset:
Устанавливает все значения равными значениям по умолчанию.
В следующих меню изменения могут быть внесены в условия освещения, параметры поверхности, цвет фона и другие параметры. Далее могут быть созданы и запрограммированы анимационные ролики. Кнопка 'help' вызывает справочную систему с большим количеством полезной информации о NVIZ.
16.2 Визуализация объемных растровых слоев (VOXEL)
Помимо растровых поверхностей NVIZ также может показывать объемные данные. Для этого служит панель 'Volumes'. Она может быть найдена в меню 'Panel' -> 'Volumes' (рисунок 31).
84


Рисунок 31: Окно Volume-panel для визуализации объема
Примечание:
Данная функция подразумевает наличие специального набора данных c 3D параметрами в наборе. Модуль v.in.ascii GRASS позволяет импортировать 3D точечные данные в формат 3D данных GRASS используя параметр -z.
Кнопка 'Add' добавляет разные уровни трехмерных слоев над поверхностью. Цвет, прозрачность, яркость и другие параметры могут быть настроены для каждого слоя отдельно используя кнопку 'Isosurface Attributes'. Следует избегать больших значений полигонального разрешения ('Polygon Resolution') (<3), так как на устаревшем аппаратном обеспечении это может привести к увеличению времени расчетов.
85


Рисунок 32: Различные уровни осадков над Словакией
Набор данных показанный на примере был создан [4] и может быть загружен как область GRASS готовая к использованию с сайта GDF Hannover bR (см. [9]).
16.3 Создание анимации
Помимо просто визуализации NVIZ так же может быть использован для создания и показа анимированных данных. Это особенно важно для анализа временных периодов. NVIZ предоставляет возможность создать простую анимацию с помощью графического интерфейса или более профессиональную на основе скрипта. В данной главе рассказывается о создании простой анимации.
86


Рисунок 33: Создание простой анимации в NVIZ
Окно управления для создания анимации находится в меню "Panel" -> "Animation" (рис. 33).
Сначала указывается общее количество изображений используемое для анимации. Для создания относительно плавной анимации необходимо использовать по крайней мере 100 изображений.
Далее указывается начальная точка анимации. Нажав на кнопку 'Add' (Добавить) эту точку можно сохранить. После этого, на временной шкале 'Key Frames' выбирается новая точка отсчета и карта перемещается на нее (рис. 30). Вторая точка отсчета тоже может быть сохранена с помощью кнопки 'Add'. Эта процедура повторяется до тех пор, пока временная шкала не будет заполнена. После того, как все настройки определены и проверены, результат может быть сохранен с помощью кнопки 'Run and Save' (Сохранить и запустить). Изображения сохраненные в отдельной директории могут быть объединены в анимированный GIF или видео- ролик в формате mpeg, но для этого понадобится стороннее программное обеспечение (6).

87

17 Визуализация и создание карт готовых к печати
Важная составляющая работы с пространственными данными – их визуализация и презентация как двухмерной бумажной карты, цифровой 3D модели или анимации. Требования к современным ГИС по части выпускной продукции очень высоки и сравнимы с профессиональным программным обеспечением для работы с графикой.
В этой области GRASS предоставляет две возможноcти. Во-первых, можно воспользоваться модулем ps.map для создания простого макета карты в формате постскрипт. Во-вторых, так же существует возможность экспортировать результирующий макет карты в различные графические форматы. Макет экспортированный в один из этих форматов можно потом редактировать в программном пакете для работы с графической информацией.
17.1 Экспорт карт в постскрипт
Создать карту готовую к печати позволяет модуль ps.map. Результатом его работы является карта в формате постскрипт. Интерактивный процесс создания макета может быть сохранен в виде отдельного текстового файла, что позволяется изменить макет без необходимости проходить процесс заново. Пример подобного файла, использованного для создания рисунка 34 показан ниже и скопирован из справки (см. g.manual ps.map): raster soils outline color black width 1 end comments soil.cmt where 1 6 font Helvetica end colortable y where 1 6.5 cols 4 width 4 font Helvetica end setcolor 6,8,9 white setcolor 10 green vlines roads width 2 style 0111 color grey masked n end vlegend where 4.5 0 font Courier fontsize 8 end text 30% 100% SPEARFISH SOILS MAP color red width 1 hcolor black hwidth 1 background white border red size 500 ref lower left end line 606969.73 3423092.91 616969.73 3423092.91 color yellow
88
width 2 end point 40% 60% color purple symbol basic/diamond size 25 masked n end scale 1:125000 scalebar f where 4.5 6.5 length 5000 height 0.05 segment 5 numbers 5 end geogrid 60 s color blue numbers 2 yellow end paper a4 end end

89

Рисунок 34: Пример простой результирующей карты. (Почвенная карта с легендой из базы данных Spearfish)
17.2 Экспорт карт с помощью PNG-драйвера
В GRASS карты на мониторе отображаются с экранным разрешением. PNG-драйвер позволяет отображать карты с более высоким разрешением в полноцветном (24 bit) режиме.
Применение PNG-драйвера практически полностью аналогично использования монитора
GRASS. В данном примере показано создание полноцветного изображения с почвенной картой с наложением слоя дорожной сети из базы данных Spearfish: d.mon start=PNG d.mon select=PNG
Загрузка карт: d.rast soils d.vect roads col=black выгрузка PNG-драйвера и включение монитора GRASS: d.mon stop=PNG d.mon select=x0
Созданная карта map.png появится в текущей директории, просмотреть ее можно любой программой просмотровщиком графических форматов. Задать разрешение PNG файла можно перед его созданием с помощью следующих переменных: export GRASS_WIDTH= export GRASS_HEIGHT=

Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   10


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал