访问 ST_Raster 属性

复杂程度: 中级 数据要求: 使用自备的数据 目标: 了解有关哪些函数返回 ST_Raster 值以及如何使用这些值的信息。

ST_Raster 类型包括多个返回 ST_Raster 值属性的函数。在本主题中包括使用这些函数的示例。确保在 SQL 示例中为数据替换适合的值。

使用 describe 函数

使用 describe 函数获取 ST_Raster 值属性的列表。执行不带参数的 describe 函数会返回 ST_Raster 值的常规属性。

栅格值具有一个色彩映射表时,如果要返回有关此表的属性,可将 colormap 参数包含在内。如果在栅格值没有色彩映射表的情况下指定此参数,则会返回错误。若 ST_Raster 值具有一个色彩映射表,则 hasColormap 函数会返回真 (1)。除了 ST_Raster 值的常规属性外,指定 colormap 参数也将返回已应用的色彩映射表索引。

通过将 storage 参数包含在 describe 函数内,可返回有关 ST_Raster 值的存储属性。这还会列出通过金字塔等级排序的存储属性,以及通过栅格波段进行子排序的存储属性。存储属性包括每个波段和金字塔等级内的像素值的最小值、最大值、平均值和标准差。存储属性还包括像素总数的计数,以及通过波段和金字塔等级分解后压缩的大小。

返回 ST_Raster 值的常规属性

如果使用未指定参数的 ST_Raster describe 函数,查询会返回每个 ST_Raster 值的常规属性。

以下示例演示如何将 SELECT 语句和 describe 函数一起使用,从而返回名为 urban_areas 的表中的 ST_Raster 值的常规属性。仅返回满足 WHERE 子句的条件的记录。

步骤:
  1. 使用适合于数据库管理系统 (DBMS) 的 SELECT 语句。

    Oracle

    SELECT t.raster.describe()
    FROM URBAN_AREA t
    WHERE NAME = 'ALL_CITIES';

    PostgreSQL

    SELECT describe(raster)
    FROM urban_area
    WHERE name = 'all_cities';

    SQL Server

    SELECT raster.describe(NULL)
    FROM urban_area
    WHERE name = 'all_cities';

返回 ST_Raster 值的存储属性

带有 storage 参数的 ST_Raster describe 函数会同时返回每个 ST_Raster 值的常规属性及其存储属性。

以下示例显示如何将 describe 函数和 storage 参数结合使用以返回 urban_areas 表的 ST_Raster 的存储属性。

步骤:
  1. 使用适合自己的 DBMS 的 SELECT 语句。

    Oracle

    SELECT t.raster.describe('storage')
    FROM URBAN_AREA t
    WHERE NAME = 'ALL_CITIES';

    PostgreSQL

    SELECT describe(raster,'storage')
    FROM urban_area
    WHERE name = 'all_cities';

    SQL Server

    SELECT raster.describe('storage')
    FROM urban_area
    WHERE name = 'all_cities';

返回 ST_Raster 的色彩映射表索引

带有 colormap 参数的 ST_Raster describe 函数会返回每个 ST_Raster 值的常规属性和色彩映射表索引。如果 ST_Raster 值没有色彩映射表,则会在包含 colormap 参数时返回错误。

步骤:
  1. 使用适合自己的 DBMS 的 SELECT 语句。

    Oracle

    SELECT t.raster.describe('colormap')
    FROM URBAN_AREA t
    WHERE NAME = 'ALL_CITIES';

    PostgreSQL

    SELECT describe(raster,'colormap')
    FROM urban_area
    WHERE name = 'all_cities';

    SQL Server

    SELECT raster.describe('colormap')
    FROM urban_area
    WHERE name = 'all_cities';

使用 hasColormap 函数确定是否存在色彩映射表

使用 hasColormap 函数确定某个 ST_Raster 值是否包含应用到该值的色彩映射表索引。如果存在色彩映射表索引,则 hasColormap 函数将返回布尔值 true;否则,将返回布尔值 false。

如果 ST_Raster 值有色彩映射表,SELECT 子句中的 hasColormap 函数将返回 1;如果没有,将返回 0。

步骤:
  1. Oracle

    SELECT t.raster.hasColormap(), NAME 
    FROM URBAN_AREA t;

    PostgreSQL

    SELECT hasColormap(raster), name 
    FROM urban_area;

    SQL Server

    SELECT raster.hasColormap(), name 
    FROM urban_area;

将返回结果集限制为包含或不包含色彩映射表的记录

可将 hasColormap 函数添加到 WHERE 子句,以返回那些包含或不包含色彩映射表的记录。

步骤:
  1. 使用适合自己的 DBMS 的 SELECT 语句。

    Oracle

    SELECT t.raster.describe('colormap')
    FROM URBAN_AREA t
    WHERE t.raster.hasColormap(raster) = 1;

    PostgreSQL

    SELECT describe(raster,'colormap')
    FROM urban_area
    WHERE hasColormap(raster) = 1;

    SQL Server

    SELECT raster.describe('colormap')
    FROM urban_area
    WHERE raster.hasColormap() = 1;

使用 hasStats 函数确定是否已计算 ST_Raster 统计数据

如果某个 ST_Raster 值已计算其统计数据,hasStats 函数将返回布尔值 true。

提示提示:

要计算统计数据,可使用 ST_Raster buildStats 函数。要从 ST_Raster 删除统计数据,可使用 deleteStats 函数。

在 SELECT 子句中使用 hasStats 函数,以确定是否已经针对 ST_Raster 值计算统计数据。对于包含统计数据的 ST_Raster 值,此函数会返回 1;对于不包含统计数据的值则返回 0。

步骤:
  1. Oracle

    SELECT t.raster.hasStats(),NAME
    FROM URBAN_AREA t;

    PostgreSQL

    SELECT hasStats(raster),name
    FROM urban_area;

    SQL Server

    SELECT raster.hasStats(),name
    FROM urban_area;

可将 hasStats 函数应用到 WHERE 子句,以指定该查询返回那些包含或不包含统计数据的记录。在这些示例中,WHERE 子句仅过滤 ST_Raster 值中包含统计数据的记录。然后,将该统计数据从那些栅格值中删除。

步骤:
  1. Oracle

    UPDATE URBAN_AREA t
    SET raster = t.raster.deleteStats()
    WHERE t.raster.hasStats() = 1;

    PostgreSQL

    UPDATE urban_area
    SET raster = deleteStats(raster)
    WHERE hasStats(raster) = 1;

    SQL Server

    UPDATE urban_area
    SET raster = raster.deleteStats()
    WHERE raster.hasStats() = 1;

返回 ST_Raster 的压缩类型

getCompressionType 返回 raster 的压缩属性。四个可能的压缩类型如下:

大多数情况下都使用 LZ77 压缩。然而,JPEG 压缩用于三波段 8 位数据或高变异性的灰度数据。JPEG 2000 压缩通常为 16 位数据保留。

在这些示例中,通过 describe 函数指定 storage 参数;在 WHERE 子句中使用的 getCompressionType 函数用于仅返回包含 JPEG 压缩的 ST_Raster 值。

步骤:
  1. 使用适合自己的 DBMS 的 SELECT 语句。

    Oracle

    SELECT t.raster.describe('storage')
    FROM URBAN_AREA t
    WHERE t.raster.getCompressionType() = 'JPEG';

    PostgreSQL

    SELECT describe(raster,'storage')
    FROM urban_area
    WHERE getCompressionType(raster) = 'JPEG';

    SQL Server

    SELECT raster.describe('storage')
    FROM urban_area
    WHERE raster.getCompressionType() = 'JPEG';

确定某个 ST_Raster 值的金字塔插值类型

金字塔插值类型是在金字塔构造期间的算法。ST_Raster 类型的 getInterpolationType 函数返回用于构建金字塔的插值类型。如果金字塔不存在,该函数会返回空值。三个可能的插值类型是 NEAREST、BILINEAR 和 BICUBIC。

通常,每当无法使用双线性插值时,将使用最邻近法金字塔插值类型。双线性插值更受欢迎,因为它通常会提供更加平滑的结果。但由于双线性插值不保持前一等级的像素值,因此不适用于应用了色彩映射表的数据和小于 8 位的像素数据。

这些查询会返回所有包含金字塔的 ST_Raster 值的金字塔插值类型。

步骤:
  1. Oracle

    SELECT t.raster.getInterpolationType()
    FROM URBAN_AREA t
    WHERE t.raster.getPyramidLevel() > 0;

    PostgreSQL

    SELECT getInterpolationType(raster)
    FROM urban_area
    WHERE getPyramidLevel(raster) > 0;

    SQL Server

    SELECT raster.getInterpolationType()
    FROM urban_area
    WHERE raster.getPyramidLevel() > 0;

确定某个 ST_Raster 值的波段交叉类型

ST_Raster 类型同时支持顺序 (BSQ) 波段交叉和连续 (BIP) 波段交叉。

注注:

ArcObjects 和基于 ArcObjects 的应用程序(如 ArcGIS Desktop)仅读取已存储为 BSQ 格式的数据。

BIP 交叉仅适用于按照 (r0, g0, b0, r1, g1, b1 … rn, gn, bn) 顺序存储为单波段的三波段、8 位数据;而 BSQ 按照单独的序列顺序 (r0...rn)、(g0...gn)、(b0...bn) 存储波段。

以下查询将为某个表的 ST_Raster 列中每个 ST_Raster 值返回交叉类型。

步骤:
  1. Oracle

    SELECT t.raster.getInterleaveType()
    FROM URBAN_AREA t;

    PostgreSQL

    SELECT getInterleaveType(raster)
    FROM urban_area;

    SQL Server

    SELECT raster.getInterleaveType()
    FROM urban_area;

确定 ST_Raster 的像素类型

getPixelType 函数返回某个 ST_Raster 值的像素类型。ST_Raster 类型支持以下像素类型:

这些 update 语句将为 ST_Raster 列中的所有 ST_Raster 值构建金字塔,但前提是这些 ST_Raster 值的像素类型必须是无符号的 8 位整数。

步骤:
  1. Oracle

    UPDATE URBAN_AREA t
    SET raster = t.raster.buildPyramid('bilinear')
    WHERE t.raster.getPixelType() = 'UINT8';

    PostgreSQL

    UPDATE urban_area
    SET raster = buildPyramid(raster,'bilinear')
    WHERE getPixelType(raster) = 'UINT8';

    SQL Server

    UPDATE urban_area
    SET raster = raster.buildPyramid('bilinear')
    WHERE raster.getPixelType() = 'UINT8';

相关主题


7/10/2012