Рабочий процесс: создание каталога растров с помощью SQL
Каталог растров — это компонент ArcObjects, в котором хранятся наборы растровых данных с пространственной привязкой. Каталог растров можно создать и заполнить в SQL, используя тип ST_Raster, с помощью рабочего процесса, описанного в этом разделе.
В каждом из следующих разделов содержатся примеры для выполнения задачи создания каталога растров в системе управления базами данных. Указанные примеры можно изменить в соответствии с вашими данными.
Создание таблицы со столбцом ST_Raster
- Откройте редактор SQL, например, SQL*Plus для Oracle, pgsql или pgAdminIII для PostgreSQL или окно Query Editor в Microsoft Management Studio для SQL Server.
-
Используйте выражение CREATE TABLE для создания таблицы со столбцом ST_Raster и строковым столбцом.
В этих примерах создается таблица urban_area. Таблица содержит два столбца: name и raster.
Oracle
CREATE TABLE urban_area (name varchar2(255), sde.st_raster raster);
PostgreSQL
CREATE TABLE urban_area (name varchar(255), sde.st_raster raster);
SQL Server
CREATE TABLE urban_area (name varchar(255), dbo.st_raster raster);
Инициализация столбца ST_Raster для хранения растровых значений
Используйте функцию ST_Raster_Util для инициализации столбца ST_Raster. Данная функция добавляет ссылку на растровый столбец в таблицы метаданных растра ArcSDE и создает таблицу растровых блоков и вспомогательную таблицу растров, а также триггеры добавления, обновления и удаления растрового столбца. После выполнения этой функции растровый столбец регистрируется в ArcSDE, а его функциональность становится доступной. Запись добавляется в системные таблицы table_registry, column_registry и raster_columns. Однако столбец не будет доступен как объект каталога растров ArcGIS до его регистрации в базе геоданных.
-
Используйте утилиту ST_Raster для инициализации столбца ST_Raster в таблице urban_area.
Oracle
BEGIN SDE.ST_RASTER_UTIL.INITIALIZE ('urban_area','raster',4326,'defaults'); END; /
PostgreSQL
SELECT st_raster_util_initialize ('urban_area','raster',4326,'DEFAULTS');
SQL Server
EXEC ST_Raster_Util.Initialize 'sde','bobby','urban_area','raster',4326,NULL,'DEFAULTS'
Добавление растрового значения в столбец ST_Raster
Выражение INSERT добавляет строку в таблицу.
В этих примерах столбец name заполняется строкой "MILWAUKEE", а конструктор ST_Raster преобразует файл GeoTIFF в тип ST_Raster.
-
Используйте SQL-выражение INSERT, чтобы добавить изображение в столбец ST_Raster. Используйте собственный TIFF-файл вместо milwaukee.tif.
Oracle
INSERT INTO URBAN_AREA ('MILWAUKEE',SDE.ST_RASTER('C:\milwaukee.tif')); COMMIT;
PostgreSQL
INSERT INTO urban_area ('milwaukee',sde.st_raster('C:\milwaukee.tif'));
SQL Server
INSERT INTO urban_area ('milwaukee',dbo.ST_Raster::construct('C:\milwaukee.tif'));
Внимание:
Убедитесь, что указанный путь к TIFF-файлу является допустимым для сервера, на котором хранится база данных и файл.
-
Используйте SQL-выражение UPDATE для сохранения мозаики в существующем растровом столбце.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.MOSAIC('C:\milwaukee2.tif') WHERE NAME = 'MILWAUKEE'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = mosaic(RASTER,'C:\milwaukee2.tif') WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = raster.mosaic('C:\milwaukee2.tif') WHERE name = 'milwaukee';
Построение пирамид
После загрузки исходных данных создаются пирамидные слои с помощью функции ST_Raster buildPyramid. Создайте пирамидные слои для всех растровых значений или используйте выражение WHERE для выбора растровых значений, для которых требуется построить пирамидные слои.
Все пирамидные слои создаются с использованием билинейной интерполяции.
-
Используйте функцию buildPyramid.
В этих примерах выражение WHERE используется для выбора растровых значений, для которых необходимо построить пирамидные слои, с помощью интерполяции ближайшего соседа или билинейной интерполяции.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDPYRAMID('nearest,level=-1') WHERE NAME = 'MILWAUKEE'; COMMIT; UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDPYRAMID('bilinear,level=-1') WHERE NAME = 'TOKYO'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = buildpyramid(raster,'nearest,level=-1') WHERE name = 'milwaukee'; UPDATE urban_area SET raster = buildpyramid(raster,'bilinear,level=-1') WHERE name = 'tokyo';
SQL Server
UPDATE urban_area SET raster = raster.buildPyramid('bilinear,level=-1') WHERE name = 'milwaukee'; UPDATE urban_area SET raster = raster.buildPyramid('nearest,level=-1') WHERE name = 'tokyo';
Построение статистики растра
Некоторые растровые данные должны быть растянуты методом отображения, чтобы сделать их различимыми. В противном случае они будут отображаться как черный, серый или белый цвет. Для этого типа данных должна быть создана статистика растра. Это осуществляется с помощью функции ST_Raster buildStats в выражении UPDATE.
Используйте выражение WHERE, если необходимо указать, для каких строк таблицы необходимо сформировать статистику.
-
Используйте функцию buildStats в SQL-выражении UPDATE.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDSTATS() WHERE NAME = 'MILWAUKEE'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = buildstats(raster) WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = raster.buildStats(NULL) WHERE name = 'milwaukee';
По умолчанию статистика вычисляется на базовом уровне растрового значения, что позволяет получить наиболее точные статистические результаты. Однако точностью можно пожертвовать для экономии времени, вычислив статистику на определенном уровне пирамидного слоя. Чем более высокий уровень пирамидного слоя используется, тем быстрее вычисляется статистика, но при этом ухудшается статистическая точность. Конечно, указанный уровень пирамидного слоя нужно построить до вычисления статистики для него.
-
Используйте функцию buildStats и укажите уровень для вычисления статистики.
В этих примерах статистика вычисляется на шестом уровне пирамидного слоя.
Подсказка:
Если уровень не указан, по умолчанию используется базовый уровень, который можно задать как значение 0.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDSTATS(6) WHERE NAME = 'MILWAUKEE';
PostgreSQL
UPDATE urban_area SET raster = buildstats(raster,6) WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = buildStats.raster(6) WHERE name = 'milwaukee';
Регистрация таблицы в базе геоданных
Любая таблица, которая содержит один растровый столбец с пространственной привязкой, может быть преобразована в каталог растров ArcObjects. Функция ST_Raster_Util регистрирует растровый столбец в ArcSDE и после ее выполнения таблицу можно преобразовать в каталог растров, зарегистрировав ее в базе геоданных. Так как растровый столбец в этом примере уже инициализирован, его можно зарегистрировать в базе геоданных.
Используйте ArcGIS for Desktop для регистрации таблицы в базе геоданных, тем самым создав каталог растров.
- Запустите ArcMap и откройте окно Каталога или запустите ArcCatalog.
-
Подключитесь к базе геоданных, содержащей таблицу urban_area.
Подключения к базе геоданных создаются в папке Подключения к базам данных (Database Connections) в дереве Каталога (Catalog). Подключитесь к базе геоданных, как владелец таблицы urban_area.
- Щелкните правой кнопкой на таблице urban_area и выберите Зарегистрировать в базе геоданных (Register with Geodatabase).
-
Нажмите кнопку Да (Yes) в диалоговом окне, сообщающем о том, что столбец ObjectID будет добавлен в таблицу.
Для базы геоданных требуется наличие ObjectID — столбца уникальных значений (также не NULL).
Значок таблицы изменится на значок каталога растров, что говорит о том, что таблица преобразуется в каталог растров.
Обновление статистики базы геоданных
Для обеспечения оптимальной производительности ArcSDE использует стоимостную оптимизацию СУБД для выбора наилучшего плана выполнения задачи при выполнении обновлений или запросов. Стоимостная оптимизация в свою очередь использует обновленную статистику СУБД для определения наилучшего плана выполнения задачи.
Самый простой способ обновления статистики СУБД в базе геоданных — использовать ArcGIS. Используйте инструмент геообработки Анализировать наборы данных (Analyze Datasets), открываемый с помощью команды Анализировать (Analyze) в ArcGIS for Desktop, для обновления статистики.
- Запустите ArcCatalog или ArcMap и откройте окно Каталог (Catalog).
- Подключитесь к базе данных, содержащей каталог растров urban_area.
Убедитесь, что вы подключились как владелец каталога растров.
- Щелкните правой кнопкой мыши на каталоге растров urban_area.
- Выберите пункт Управление (Manage) и щелкните Анализ (Analyze).
- Убедитесь, что каталог растров urban_area выбран в списке Наборы данных для анализа (Datasets to Analyze) и щелкните мышью за пределами списка.
- Выберите опцию Анализировать исходные таблицы (Analyze Base Tables) для обновления исходной таблицы растра.
- Нажмите ОК.