Рабочий процесс: создание мозаики растровых данных для существующего значения ST_Raster
Можно использовать выражение SQL UPDATE с функцией мозаики ST_Raster для создания растровых данных в значении ST_Raster с помощью мозаики. Можно использовать файл изображения, папку с несколькими изображениями или значения, извлеченные из другого столбца ST_Raster в качестве входных данных для создания растров с помощью мозаики для существующего значения.
Однако перед созданием растров с помощью мозаики для существующего значения необходимо сначала удалить цветовую карту, если она присутствует в значении ST_Raster. По завершении операции мозаики можно повторно добавить цветовую карту к значению ST_Raster.
Примеры в этой теме демонстрируют, как удалить цветовую карту из определенных записей в таблице urban_area, добавить растры к значениям растров, содержащимся в этих записях, а затем повторно применить цветовую карту.
Удаление цветовой карты
Для удаления цветовой карты из значения ST_Raster воспользуйтесь функцией ST_Raster deleteColormap.
Это необходимо сделать перед созданием мозаики на основе дополнительных растров для значений растров в указанной таблице.
-
Используйте выражение UPDATE SQL с функцией deleteColormap для удаления цветовой карты из растровых значений в тех строках таблицы urban_area, значения имени которых равно ALL_CITIES.
Oracle
UPDATE URBAN_AREA t SET RASTER = t.raster.deleteColormap() WHERE NAME = 'ALL_CITIES';
PostgreSQL
UPDATE urban_area SET raster = deleteColormap(raster) WHERE name = 'all_cities';
SQL Server
UPDATE urban_area SET raster = deleteColormap() WHERE name = 'all_cities';
После успешного завершения deleteColormap значение растра отображается в оттенках серого, а не в цвете.
Создание мозаики на основе дополнительных растровых данных для существующего значения ST_Raster
Операция мозаики итеративно добавляет дополнительные растровые данные к существующему значению растра. Таким образом, значение растра может превысить несколько терабайтов; значение растра ограничено только емкостью хранилища системы управления базами данных (DBMS).
Пример 1. Добавление всех растров из папки в столбец ST_Raster
Можно использовать рекурсивную опцию функции мозаики в выражении SQL UPDATE, чтобы определенная папка постоянно проверялась на наличие определенного типа файла. В этих примерах выполняется рекурсивный поиск всех файлов с расширением .tif в папке cities. На основе этих файлов создается мозаика в значении растров, определяемом как all_cities в таблице urban_area.
-
Создайте мозаику всех файлов .tif в указанной папке в существующее значение ST_Raster с использованием функции мозаики и опции рекурсии.
Oracle
UPDATE URBAN_AREA t SET RASTER = t.raster.mosaic('E:\cities\*.tif', 'recursive,log=E:\log.txt') WHERE NAME = 'ALL_CITIES';
PostgreSQL
UPDATE urban_area SET raster = mosaic(image,'E:\data\*.tif', 'recursive,log=E:\log.txt') WHERE name = 'all_cities';
SQL Server
UPDATE urban_area SET raster = raster.mosaic('E:\data\*.tif',NULL, 'recursive,log=E:\log.txt') WHERE name = 'all_cities';
Пример 2. Вставка ST_PixelData и добавление этих данных в столбец ST_Raster
Первый уровень пирамидных слоев пикселов в столбце растров таблицы japan, значением столбца имени которого является tokyo, передается как мозаика в столбец растров таблицы urban_area в значение имени столбца all_cities. В этом случае функция ST_Raster getPixelData извлекает значение ST_PixelData из значения ST_Raster в предварительно определенную переменную ST_PixelData, которая называется data. Затем переменная передается в конструктор ST_Raster для преобразования обратно в формат ST_Raster.
-
Используйте функцию getPixelData для извлечения значения ST_PixelData из значения ST_Raster в таблице japan и вставке его в значение растра таблицы urban_area.
Oracle
DECLARE data ST_PIXELDATA; BEGIN SELECT t.raster.getPixelData('level=1') INTO data FROM JAPAN t WHERE NAME = 'TOKYO'; UPDATE URBAN_AREA t SET image = t.raster.mosaic(data,'log=E:\log.txt') WHERE NAME = 'ALL_CITIES'; END; /
PostgreSQL
DROP FUNCTION IF EXISTS mosaic_from_pixeldata(); CREATE OR REPLACE FUNCTION mosaic_from_pixeldata() RETURNS integer AS ' DECLARE data sde.st_pixeldata; BEGIN SELECT getPixelData(image) INTO data FROM japan WHERE name = 'tokyo'; UPDATE urban_area SET raster = mosaic(raster,data,''log=E:\log.txt'') WHERE name = ''all_cities''; END;' LANGUAGE plpgsql; SELECT mosaic_from_pixeldata(); DROP FUNCTION IF EXISTS mosaic_from_pixeldata();
SQL Server
DECLARE @data ST_PIXELDATA; SET @data = (SELECT raster.getPixelData('level=1') FROM japan WHERE name = 'tokyo'); UPDATE urban_area SET raster = raster.mosaic(NULL,@data,'log=E:\log.txt');
Применение цветовой карты к обновленному значению ST_Raster
После завершения обновления значения ST_Raster, можно повторно применить цветовую карту для определения цветов, которые используются для отображения значения растра. Используйте функцию setColormap для повторного применения цветовой карты к растру.
Функция setColormap нуждается во входном файле изображения TIFF. В следующих примерах цветовая карта из файла citycolors.tif используется для добавления цветовой карты в значения растров таблицы urban_area для всех строк, значения имен которых равны all_cities.
-
Используйте выражение UPDATE SQL и входной файл изображения citycolors.tif для добавления цветовой карты в записи таблицы urban_area, содержащей значение имени, равное all_cities.
Oracle
UPDATE URBAN_AREA t SET raster = t.raster.setColormap('/net/gis/gis1/citycolors.tif') WHERE name = 'ALL_CITIES';
PostgreSQL
UPDATE urban_area SET raster = setColormap(raster,'/net/gis/gis1/citycolors.tif') WHERE name = 'all_cities';
SQL Server
UPDATE urban_area SET raster = raster.setColormap('/net/gis/gis1/citycolors.tif') WHERE name = 'all_cities';