Рабочий процесс: создание мозаики растровых данных для существующего значения ST_Raster

Уровень сложности: Средний Требования к данным: Используйте собственные данные Задача: Используйте выражения SQL UPDATE для удаления цветовой карты из значений ST_Raster в определенных записях таблицы urban_area, создания растровых мозаик в значениях растрах для этих записей и повторного применения цветовой карты к тем же значениям.

Можно использовать выражение SQL UPDATE с функцией мозаики ST_Raster для создания растровых данных в значении ST_Raster с помощью мозаики. Можно использовать файл изображения, папку с несколькими изображениями или значения, извлеченные из другого столбца ST_Raster в качестве входных данных для создания растров с помощью мозаики для существующего значения.

Однако перед созданием растров с помощью мозаики для существующего значения необходимо сначала удалить цветовую карту, если она присутствует в значении ST_Raster. По завершении операции мозаики можно повторно добавить цветовую карту к значению ST_Raster.

Примеры в этой теме демонстрируют, как удалить цветовую карту из определенных записей в таблице urban_area, добавить растры к значениям растров, содержащимся в этих записях, а затем повторно применить цветовую карту.

Удаление цветовой карты

Для удаления цветовой карты из значения ST_Raster воспользуйтесь функцией ST_Raster deleteColormap.

Это необходимо сделать перед созданием мозаики на основе дополнительных растров для значений растров в указанной таблице.

Шаги:
  1. Используйте выражение 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.

Шаги:
  1. Создайте мозаику всех файлов .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.

Шаги:
  1. Используйте функцию 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.

Шаги:
  1. Используйте выражение 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';
    

Связанные темы

5/25/2014