<<< предыдущая глава | оглавление | следующая глава >>>
В GRASS 6.0 произведена полная ревизия векторных характеристик. Она включает новый формат векторных данных, в котором сняты ограничения, существовавшие в версии 5.4. Масса подобных интересных нововведений и изменений представлена в этом обзоре.
Геометрия объектов:
Поддержка внешних «простых» форматов данных, таких как SHAPE или PostGIS без предварительного импорта (доступ только для чтения через v.external как «виртуальные карты»);
Импорт и экспорт из GRASS во все векторные форматы поддерживаемые OGR;
Новый «пространственный индекс» для сокращения времени вычислений (например, в v.build для структурирования топологии объектов (первоначально, v.support в версии 5.4);
Управление базой данных:
Хранение атрибутивной информации в СУБД (интерфейс на базе SQL для dBase файлов, PostgreSQL, MySQL and ODBC);
Хранение наборов атрибутов теперь внутренне в dBase-файлах или внешне – в СУБД;
Возможность связи многослойных векторных объектов с одной или более внешними таблицами баз данных;
Возможность создания 3D векторов (например, TIN, схемы CAD) и поддержка их визуализации с помощью NVIZ
Модули:
Поддержка SQL-запросов/выборок с помощью, например, d.vect
,
v.extract
и v.surf.rst
;
Возможность обновления атрибутивной информации с помощью запросов (например, могут быть изменены атрибуты, связанные напрямую с помощью d.what.vect)
Сетевой анализ векторов, основанный на DGLIB (Directed Graph Library);
Новый модуль оцифровки v.digit
с графическим интерфейсом пользователя;
Экспорт файлов в форматах SHAPE, DGN, TIGER, MapInfo and GML2 через библиотеку OGR;
Дружественный интерфейс для работы с модулями с помощью всплывающих меню;
Новый менеджер ГИС (d.m
);
В целях знакомства с использованием новых возможностей объектов последующие главы направлены главным образом на нововведения GRASS 6.0, особенно на управление пространственной и атрибутивной информацией.
Концепция управления геометрией векторных объектов в GRASS 6.0 полностью изменена. Геометрия по умолчанию хранится в новом векторном формате GRASS («родном формате GRASS»). Эта базовая установка без проблем может быть изменена так, чтобы сохранять и обрабатывать геометрию в современных PostGIS, SHAPE и других форматах поддерживаемых OGR.
Рисунок 18: Архитектура GRASS 6.0
Для лучшего понимания будет представлено использование разных форматов векторных данных поддерживаемых в настоящий момент. В качестве примера будут использованы свободных данные проекта FRIDA (см. [17]).
Благодаря новой реализации поддержки OGR стала доступна поддержка множества векторных форматов. Детальный перечень поддерживаемых OGR-форматов помещен в таб. 8 и на странице программного пакета OGR [15].
SHAPE-файлы ESRI могут быть использованы в GRASS напрямую. Для этого
используется новый модуль v.external
, который осуществляет необходимое
соединение между GRASS и источником данных через OGR. Во время этого процесса для данных без
топологии автоматически создается внутренняя псевдотопология GRASS,
таким образом, что сетевой анализ становится возможным и для этих данных.
Учтите, при использовании v.external
GRASS имеет доступ к данным
в режиме только для чтения, который медленнее, чем когда данные импортированы
в родной формат:
# Создать связь с SHAPE-файлом v.external dsn=./gdf/shapes/layer=frida_stras out=frida_stras_ext # Показать SHAPE-файл d.vect frida_stras_ext # Запрос к SHAPE-файлу d.what.vect frida_stras_ext
Для того чтобы изменить данные, данные OGR быть импортированы в родной формат GRASS:
g.copy vect=frida_stras_ext,frida_stras_int v.digit frida_stras_int
Это может быть сделано путем копирования уже собранной карты с помощью модуля
g.copy
или импорта набора данных модулем v.in.ogr
(часть 5.2).
Аналогично, все поддерживаемые форматы OGR могут быть доступны напрямую и/или импортированы в GRASS.
Для соединения с UMN Mapserver может быть использован также PostGIS. Таким образом, легко представить результаты работы GRASS в Интернет с помощью UMN Mapserver и PostGIS.
Карту в GRASS можно создать если данные с парами координат (X/Y)
и атрибутикой доступны как DBF, CSV, MS-Excel,
PostgreSQL и т.д.. Для этого примера используется простая таблица,
сохраненная в базе данных 'mydb
' PostgreSQL:
v.in.db driver=pg database="host=localhost,dbname=mydb,user=postgres" \ table=stations x=east y=north z=quota key=ID output=stations
Если в таблице dBase нет столбца ID, необходимо создать столбец со сквозным номером ID с помощью внешних программ, например Openoffice.org.
2D или 3D карты могут быть созданы из XY или XYZ
координат сохраненых как простой ASCII текст 'coords.txt
':
а) пример для 2D карты:
1664619|5103481 1664473|5095782 1664273|5101919 1663427|5105234 1663709|5102614 # Импорт в GRASS: cat coords.txt | v.in.ascii out=my2dmap # Добавление пропущенных значений для присоединения атрибутивной таблицы v.category in=my2dmap out=my2dmap_final op=add v.category my2dmap_final op=report
б) пример для 3D карты:
1664619|5103481|445.1 1664473|5095782|534.2 1664273|5101919|532.9 1663427|5105234|454.4 1663709|5102614|525.7 #Импорт в GRASS: cat coords.txt | v.in.ascii -z out=my3dmap # Добавление пропущенных значений для присоединения атрибутивной таблицы v.category in=my3dmap out=my3dmap_final op=add v.category my3dmap_final op=report
Имеющаяся атрибутивная таблица может быть присоединена с помощью v.db.connect
.
Управление атрибутивной информацией объектов в GRASS 6.0 полностью изменено. Структура «dig_cats» версии GRASS 5.4 больше не используется. Все атрибуты теперь сохраняются в таблицах баз данных и связаны с геометрией через DBMI (интерфейс управления базой данных). Доступны следующие драйверы DBMI:
DBF (по умолчанию)
База данныхPostgreSQL
База данныхMySQL
Связанная через ODBC реляционная СУБД (Oracle, MySQL, PostgreSQL и т.д.)
Связь векторной карты и атрибутивной таблицы в GRASS определяется во
внутреннем dbln-файле. Это ASCII файл – который хранится
в директории векторного набора данных. Файл генерируется, когда карта
импортируется в GRASS. Если предполагается, что таблица будет
создана позже, то к файлу должна быть добавлена другая связь с помощью модуля
v.db.connect
. Текущее соединение карты может быть
проверено командой v.db.connect -p vectormap
.
Команда v.db.connect
делает возможным соединение между
векторным набором данных и атрибутивной таблицей – каждая таблица, таким образом,
может быть связана с разными наборами данных через разные поля атрибутов.
v.db.connect map=vectormap table=attribute1 layer=2 v.db.connect map=vectormap table=attribute2 layer=3 v.db.connect -p vectormap
Пример применения такой связи описан в главе 11.2.2.
Примечание:
В данном случае критически важно заметить, что
во время удаления векторной карты все атрибутивные таблицы, помеченные в dbln
и соответственно, связанные с картой, будут тоже удалены. Чтобы избежать
этого, рекомендуется сделать копию соответствующей атрибутивной таблицы
и связать с векторной картой копию, а не оригинальную таблицу:
db.copy from_driver=dbf from_table=origtable to_driver=dbf \ to_table=copytable
Для изменения текущих установок базы данных доступны следующие команды:
DBF: driver=dbf database='$GISDBASE/$LOCATION_NAME/$MAPSET/dbf'
ODBC: driver=odbc database=grass60test
PostgreSQL: driver=pg
database='host=pgserver.itc.it,dbname=grass60test,user=name'
mySQL: driver=mysql database=grass60test
В GRASS модули db.*
- полностью независимы от модулей v.*
и в действительности позволяют только модификацию атрибутивных таблиц. По
умолчанию используется формат .dbf. Другой формат можно установить следующей
командой:
db.connect driver=dbf database='$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/'
Управление внешними базами данных с авторизацией (пользователь/пароль).
Управление данными с авторизацией возможно при хранении атрибутивных данных во внешних
базах данных, например в PostgreSQL. Модуль db.login
осуществляет
контроль над базой данных и хранит эту информацию в $HOME/.grasslogin6
.
Таким образом возможна работа в группах. Возможный сценарий может быть описан так:
Location -> database Mapset -> database-scheme UNIX-User -> database-user UNIX-Group -> database-group
Теперь стало возможным предоставлять определенные права группам, соответствующим наборам
и областям. В GRASS для этого используется модуль g.access
.
Пожалуйста, имейте в виду, что пользователи Unix- и баз данных должны быть синхронизированы вручную. Это важно при удалении Unix-пользователя, администратором должен быть удален вручную и соответствующий пользователь баз данных.
Базовый отчет об атрибутах объектов в консоли обеспечивает модуль v.db.select
.
Определив разделитель полей, все атрибуты будут напечатаны с разделителями
# Вывести атрибуты векторного набора данных - дорог v.db.select map=roads fs="|" cat|label 0|no data 1|interstate 2|primary highway, hard surface 3|secondary highway, hard surface 4|light-duty road, improved surface 5|unimproved road
Добавить дополнительные атрибуты векторных объектов можно с помощью модуля
v.to.db
:
четкие значений категорий – если их нет (cat, means IDs)
координаты (coords)
площади полигонов с центроидом (area)
длины линий (length)
количество объектов в категории (count)
категории левой и правой ограничивающих областей (sides)
результаты запроса (query)
Перед добавлением этих значений предварительно в атрибутивную таблицу должен быть добавлен дополнительный столбец (в случае координат точек – 2 столбца). Это можно сделать, используя OpenOffice, или прямо в GRASS:
# создать дополнительное целочисленное поле (в формате dBASE): echo "ALTER TABLE <vectormap> ADD COLUMN <column> integer" | db.execute # Добавить длину линии: v.to.db map=<vectormap> option=length units=meters col1=<column> # Выполнить запрос для проверки: echo "SELECT * FROM <vectormap>" | db.select
GRASS также представляет возможность управления атрибутивной информацией объектов.
Атрибуты могут быть изменены с помощью SQL-команды 'UPDATE
':
# обновить значения для объектов с площадью больше 200: echo "UPDATE <table> SET attribute1 = 2 WHERE area > 200"| db.execute
Если как хранилище атрибутивной информации используется PostgreSQL, через командную строку доступно большее количество SQL-команд. Это дает возможность обновления введенных значений, основываясь на результатах вычислений. Показанный выше пример может быть изменен следующим образом:
# обновить поле площади для объектов с площадью более 200 # по результатам вычислений: echo "UPDATE <table> SET area = (area*1000) WHERE \ area > 200"| psql -d <PG-database>
Управление атрибутикой объектов возможно также и интерактивное. Векторный файл открывается
и запрашивается с помощью модуля d.what.vect
.
Атрибуты отображаются в отдельном всплывающем окне, где они могут быть
выбраны с помощью мышки и отредактированы.
Новый программный модуль GRASS в просмотровщике геоданных QGIS [19] является еще одним средством для изменения атрибутивной информации объектов. Краткое описание этого программного пакета находится в главе 18.
<<< предыдущая глава | оглавление | следующая глава >>>
Обсудить в форуме Комментариев 3
Последнее обновление: September 16 2009
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).