GIS-LAB

Географические информационные системы и дистанционное зондирование

Учебное руководство по GRASS

10. Обновление структуры векторных данных

<<< предыдущая глава | оглавление | следующая глава >>>

В 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:

  • 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-пользователя, администратором должен быть удален вручную и соответствующий пользователь баз данных.

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.

<<< предыдущая глава | оглавление | следующая глава >>>

Обсудить в форуме Комментариев — 3

Последнее обновление: September 16 2009