Oracle Spatial中的栅格数据与矢量数据一样,也提供了相应的检测函数。栅格对象和几何对象相比要简单一些,主要的检测函数介绍如下:
这个函数的功能是检查与GeoRaster对象关联的栅格数据表每行的BlockMBR属性是否是该块实际的最小边界矩形。如果是,则返回“TRUE”;如果GeoRaster对象为空,则返回“NULL”;如果不是,则返回Oracle标准错误码;如果是未知错误,返回“FALSE”。如果Geo-Raster是采用MapBuilder创建的,则BlockMBR会自动计算,不需要进行有效性检查。对于OVCIMAGE中的GeoRaster对象,可以采用下列语句检测其有效性:
select mdsys.sdo_geor.validateBlockMBR(georaster)from ovcimage where georid=1;
输出结果为:TRUE。
该函数主要用于检测给定的SDO_GEORASTER对象是否有效,包括它的栅格数据和元数据。如果有效,则返回“TRUE”;如果为空,返回“NULL”;如果无效,则返回一个Oracle标准错误码;如果是未知错误,则返回“FALSE”。为保证数据的有效性,当创建、加载或编辑GeoRaster对象后需要用这个函数进行检查,以确保在进行其他处理前它是有效的。
如果这个函数返回的错误代码为13454,则表示按照GeoRaster的XML Schema对象的元数据是无效的。如果出现这种情况,可以调用SDO_GEOR.schemaValidate函数发现错误的特定位置和其他信息。这个函数不仅针对GeoRaster的XML Schema检查GeoRaster对象的元数据,并且也会强制要求它满足XML Schema中没有描述的当前发行版本的约束和需求。下面是检查过程中的约束条件。
(1)图层数为1~n(图层总数)。
(2)cellRepresentationType的值必须是UNDEFINED。
(3)如果totalBandBlocks或bandBlockSize在元数据中声明了,则它们必须同时都声明。如果只有一个波段,则不允许出现波段分块。
(4)总块数乘以某一维上块的大小必须与该维上的大小加上填充大小匹配,并且每个单元数据BLOB对象的大小必须与元数据描述项即分块或不分块、为空或不为空相匹配。
(5)存储在栅格数据表中的GeoRaster数据块的大小和数目,必须与元数据描述一致。对于单位数据,块的大小和数目都将被检查,但块的内容不被检查。
(6)唯一支持的金字塔类型是NONE和DECREASE。
(7)栅格数据表名称不能包含空格、句号分隔符,或引号字符串中包含大小写混合字符。所有的字母都必须是大写的。
(8)栅格数据表必须是一个SDO_RASTER对象表,并且这个表必须存在。如果GeoRaster不是空的,为使Oracle Workspace Manager或Oracle Label Security(OLS)一起使用GeoRaster,可以定义一个SDO_RASTER类型的对象视图,并以该对象视图作为栅格存储用。
(9)ALL_SDO_GEOR_SYSDATA视图中的GeoRaster对象必须有一个入口。
(10)在栅格数据表中,每个相关位图掩码必须有正确的行数。
(11)任何NODATA值和范围要在由单元格深度表明的有效单元格值范围内。
(12)对于一个未压缩的GeoRaster对象,基于分块大小和单元格深度,每个栅格块的BLOB对象的大小都会被检查;对于压缩的GeoRaster对象,则不会被检查。所以,当一个压缩的GeoRaster对象被解压时,其数据可能是无效的。(www.xing528.com)
(13)对于一个没有压缩的GeoRaster对象,每个位图掩码的栅格块大小将被检查。该检查基于分块大小和1Bit单元格深度进行。
(14)检查所支持的通用函数拟合多项式模型的各项参数限制。
(15)不针对CS_SRS表和自身检查GeoRaster SRS元数据的SRID。
(16)支持地面控制点用于存储函数的地理参考模型。
(17)不支持Rigorous Model地理参考模型。
(18)如果GeoRaster是基于地理空间参考的,空间分辨率可以和仿射变换比例不一致。
(19)虽然在时间参照系统(TRS)和波段参照系统(BRS),可以选择存储开始和结束的日期和时间、光谱分辨率、光谱单元以及相关的描述性信息,但是GeoRaster的时间参照和波段参照不被支持。
(20)只支持一个layerInfo元素。
(21)缩放、统计或直方图等功能函数存放在GeoRaster元数据中需要被检查,并且要针对XML Schema检查,但是这些项的值域范围没有约束。GeoRaster的这些用于元数据的接口将被限制。在使用之前,应用程序需要对这些可选元数据进行有效性验证。
(22)颜色对照表值与灰度映射值的格式没有约束,但是它们必须没有重复值。每个数组中的值必须与GeoRaster对象之间的cellDepth值协调一致,并升序排列。各个分量的值必须在[0,255]之间。
(23)不支持复杂cellDepth。
(24)该函数并不检查在XML元数据中注册的外部表。
(25)该函数不检查外部空间几何对象或这个几何对象与栅格数据之间的空间关系是否正确。如果要检查外部几何对象可以使用2.5中的有效性检查函数。
(26)该函数不检查由栅格数据表中的BlockMBR属性指定的几何对象,或该几何对象是否精确地包裹该栅格数据块。要做这方面的检查,可调用validateBlockMBR函数。
该函数针对GeoRaster对象的XML Schema,验证该对象的元数据有效性。如果Geo-Raster针对XML Schema是有效的,则返回“TRUE”;如果该对象或其他的元数据为空,则返回“NULL”;否则,返回Oracle的标准错误代码并直接停止。该函数一般在validateGeo-Raster函数返回错误码为13454的时候调用。这种情况下,它可以更加明确地指出错误的位置和说明信息,便于查找排除数据有效性错误。
利用上面的函数,可以对数据库中的内容进行有效性检查,以OVCDEMO中的ovcimage为例,见Code_2_4。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。