|
В GRASS 6.0 произведена полная ревизия векторных характеристик. Она включает новый формат
векторных данных, в котором сняты ограничения, существовавшие в версии
5.4. Масса подобных интересных нововведений и изменений представлена в этом обзоре.
10.1 Новые возможности GRASS 6.0
Геометрия объектов:
Поддержка внешних «простых» форматов данных, таких как 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,
особенно на управление пространственной и атрибутивной информацией.
10.2 Управление векторной геометрией
Концепция управления геометрией векторных объектов
в GRASS 6.0 полностью изменена. Геометрия по умолчанию хранится в новом векторном
формате GRASS («родном формате GRASS»). Эта базовая установка без проблем может
быть изменена так, чтобы сохранять и обрабатывать геометрию в современных
PostGIS, SHAPE и других форматах поддерживаемых OGR.

Рисунок 18: Архитектура GRASS 6.0
Для лучшего понимания будет представлено использование
разных форматов векторных данных поддерживаемых в настоящий момент. В
качестве примера будут использованы свободных данные проекта FRIDA
(см. [17]).
10.2.1 Работа с форматами OGR
Благодаря новой реализации поддержки 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.
10.2.2 Создание геометрии вне СУБД
Карту в 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.
10.2.3 Создание геометрии с помощью текстовых файлов XY и/или XYZ
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.
10.3 Управление атрибутивной информацией
Управление атрибутивной информацией объектов в GRASS 6.0 полностью изменено.
Структура «dig_cats» версии GRASS 5.4 больше не
используется. Все атрибуты теперь сохраняются в таблицах баз данных и
связаны с геометрией через DBMI (интерфейс управления базой данных).
Доступны следующие драйверы DBMI:
Связь векторной карты и атрибутивной таблицы в 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-пользователя, администратором должен быть удален
вручную и соответствующий пользователь баз данных.
10.3.1 Показ атрибутивной информации
Базовый отчет об атрибутах объектов в консоли обеспечивает модуль 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 |
10.3.2 Добавление атрибутов
Добавить дополнительные атрибуты векторных объектов можно с помощью модуля
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 |
10.3.3 Управление атрибутивной информацией объектов
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.
Обсудить в форуме (Комментариев - 0)
Последнее обновление: March 04 2008 (Наверх)
|