工作流:将栅格数据镶嵌到现有 ST_Raster 值

复杂程度: 中级 数据要求: 使用自己的数据 目标: 使用 SQL UPDATE 语句从 urban_area 表的特定记录的 ST_Raster 值中移除色彩映射表,将栅格镶嵌到这些记录的栅格值中,然后将色彩映射表重新应用于相同的值。

可使用 SQL UPDATE 语句和 ST_Raster mosaic 函数将栅格镶嵌到现有 ST_Raster 值。可将图像文件、包含多幅图像的文件夹或从其他 ST_Raster 列提取的值用作输入,以将栅格镶嵌到现有值。

不过,在将栅格镶嵌到现有值之前,必须从现有 ST_Raster 值中移除色彩映射表(如果存在的话)。执行完镶嵌操作之后,可将色彩映射表添回到 ST_Raster 值中。

本主题中的示例说明如何从 urban_area 表中的特定记录里移除色彩映射表,将栅格添加到这些记录中的栅格值里,然后重新应用色彩映射表。

移除色彩映射表

使用 ST_Raster deleteColormap 函数可从 ST_Raster 值中移除色彩映射表。

必须先执行此操作才能将附加栅格镶嵌到指定表中的栅格值中。

步骤:
  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 语句中使用 mosaic 函数的递归选项,实现在指定文件夹中反复扫描指定类型的文件。在这些示例中,会在 cities 文件夹中以递归方式搜索扩展名为 .tif 的所有文件。然后,将这些文件镶嵌到 urban_area 表中标识为 all_cities 的栅格值中。

步骤:
  1. 使用 mosaic 函数和递归选项将指定文件夹下的所有 .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 表(name 列值为 tokyo)中 raster 列的像素的第一个金字塔等级镶嵌到 name 列值为 all_cities 的 urban_area 表的 raster 列。在这种情况下,ST_Raster getPixelData 函数会从 ST_Raster 值中将 ST_PixelData 值提取到名为 data 的预定义 ST_PixelData 变量中。该变量随后将传递到 ST_Raster 构造函数中,从而转换回 ST_Raster 格式。

步骤:
  1. 使用 getPixelData 函数从 japan 表中的 ST_Raster 值中提取 ST_PixelData 值,然后将该值插入 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 输入影像文件,将色彩映射表添加到含有名称值等于 all_cities 的 urban_area 表中的记录中。

    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