访问 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 子句的条件的记录。
-
使用适合于数据库管理系统 (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 的存储属性。
-
使用适合自己的 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 参数时返回错误。
-
使用适合自己的 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。
-
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 子句,以返回那些包含或不包含色彩映射表的记录。
-
使用适合自己的 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。
-
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 值中包含统计数据的记录。然后,将该统计数据从那些栅格值中删除。
-
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 的压缩属性。四个可能的压缩类型如下:
- NONE:存储数据时不使用压缩。
- LZ77:LZ77 使用的长度压缩是无损压缩,并且最适用于低变异性的数据,也适用于无法使用其他压缩算法的数据。
- JPEG:JPEG 是 Joint Photographic Experts Group(联合图像专家组)的缩写,该委员会开发了此压缩标准。JPEG 是一种有损压缩类型。JPEG 压缩仅适用于不包含色彩映射表索引的 8 位数据。
- JP2:这是 JPEG 2000 小波压缩类型。可将此压缩类型应用于 8 位数据或 16 位数据。
大多数情况下都使用 LZ77 压缩。然而,JPEG 压缩用于三波段 8 位数据或高变异性的灰度数据。JPEG 2000 压缩通常为 16 位数据保留。
在这些示例中,通过 describe 函数指定 storage 参数;在 WHERE 子句中使用的 getCompressionType 函数用于仅返回包含 JPEG 压缩的 ST_Raster 值。
-
使用适合自己的 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 值的金字塔插值类型。
-
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 for Desktop)仅读取已存储为 BSQ 格式的数据。
BIP 交叉仅适用于按照 (r0, g0, b0, r1, g1, b1 … rn, gn, bn) 顺序存储为单波段的三波段、8 位数据;而 BSQ 按照单独的序列顺序 (r0...rn)、(g0...gn)、(b0...bn) 存储波段。
以下查询将为某个表的 ST_Raster 列中每个 ST_Raster 值返回交叉类型。
-
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 类型支持以下像素类型:
- 1bit:1 位数据
- 4bit:4 位数据
- uint8:8 位无符号整数
- int8:8 位有符号整数
- uint16:16 位无符号整数
- int16:16 位有符号整数
- uint32:32 位无符号整数
- int32:32 位有符号整数
- float:单精度浮点数
- double:双精度浮点数
这些 update 语句将为 ST_Raster 列中的所有 ST_Raster 值构建金字塔,但前提是这些 ST_Raster 值的像素类型必须是无符号的 8 位整数。
-
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';