Oracle 中地理数据库 (geodatabase) 内的要素类
要素类是具有相同几何类型(点、线、面、多点、注记、尺寸或多面体)的地理要素集合。例如,可将表示某条铁路沿线所有车站的点存储于一个要素类中。而在另一个要素类中,可存储表示所有铁轨的线。
本主题介绍要素类在目录窗口、数据库管理系统 (DBMS) 和 XML 文档中的显示方式。
ArcGIS Desktop 中的要素类
在 ArcGIS Desktop 中可创建七种要素类:点、多点、线、面、注记、尺寸和多面体。
根据图标可在目录树中看出要素类的类型。下表显示了每种要素类的图标。
要素类图标 |
要素类类型 |
---|---|
点或多点 | |
线 | |
面 | |
注记 | |
尺寸 | |
多面体 |
在 Oracle 中,目录树中显示的要素类名称包括拥有该要素类的用户的名称以及要素类本身的名称。
例如,用户 Perrita 所有的要素类 parcels 将在目录树中以 PERRITA.Parcels 的形式列出。
有关不同类型要素类的说明,请参见要素类基础知识。
Oracle 数据库中的要素类表
Oracle 数据库中的要素类采用以下三种几何存储类型:ST_Geometry(默认)、二进制或 SDO_Geometry。
所有要素类都有一个存储属性信息、对象 ID 和 Shape 字段的基表(又称业务表)。对象 ID 和 Shape 字段可以有不同的名称,但它们必须位于要素类的基表中。
Oracle 数据库中使用 ST_Geometry 类型存储的要素类表
使用 ST_Geometry 用户定义的类型存储的要素类由基表和空间索引组成。对于 ST_Geometry 要素类,ST_Geometry 空间列将在 ST_LineString、ST_MultiPoint 或 ST_Polygon 等子类中存储要素类的几何。几何值直接存储在该空间列中。
ST_Geometry 要素类还包含一个附属的空间索引 (S) 表。在创建要素类的空间索引时,空间索引表命名约定与 ST_GEOMETRY_INDEX 表中生成的标识符相关联。例如,在 ST_GEOMETRY_INDEX 表中,INDEX_ID 的值为 16 的空间索引的名称应为 S16_IDX$。
在表中创建空间索引时,会在 ST_GEOMETRY_COLUMNS 和 ST_GEOMETRY_INDEX 系统表中为该表创建一个条目。信息方案表 ST_GEOMETRY_COLUMNS 用于执行选择和 DML 元数据操作。存储过程用于向 ST_GEOMETRY_COLUMNS 表中插入条目或从其删除条目。
使用 ST_Geometry 存储通过 ArcGIS 创建要素类时,将在所有者的方案中创建带 ST_Geometry 列的业务表。此外,记录还将添加到 sde 用户方案中的 LAYERS、TABLE_REGISTRY、GEOMETRY_COLUMNS、COLUMN_REGISTRY、sde_spatial_references(如果定义了空间参考)和 GDB_ITEMS 表中以追踪要素类信息。sde 用户方案中的 GDB_ITEMTYPES 表定义数据类型,此例中为要素类。
创建包含 ST_Geometry 列的表时不会插入 ST_Geometry 元数据。您(或应用程序)必须注册该元数据信息。
ESRI 不支持手动操作系统表。对于注册到 ArcSDE 或由 ArcSDE 创建的包含 ST_Geometry 空间列的表,不得手动更改这些表的元数据。
View a diagram of a feature class using ST_Geometry storage in Oracle.
需要使用 Adobe Acrobat Reader 才能打开此文件。
虚线表示各列之间的隐含关系;实线表示各列之间明确定义的关系。
Oracle 数据库中使用二进制几何类型存储的要素类表
Oracle 内地理数据库中以二进制格式(ArcSDE 压缩二进制或 OGC 熟知二进制几何表示)存储的要素类由基表和相关联的要素表和空间索引表(如下所述)组成。
- 基表
实施二进制方案时,基表中的空间列包含唯一引用空间数据的要素 ID。要素 ID 可将基表连接到其他两个表:要素表和空间索引表。在空间上可用的非版本化基表中定义数据库触发器可保持基表和要素表中记录之间的关系。所有非版本化的要素类基表都包含级联删除触发器,从而确保同时删除基表和要素表中的空间列。您可以在 Oracle 企业管理器中查看这些触发器。要素类(独立或在要素数据集中)注册为版本时,会自动删除这些触发器。将要素类取消注册为版本时,将重新创建这些触发器。如果对其中一个触发器进行编辑,然后将要素类注册为版本,则会删除该触发器。
- 要素表 (F<layer_id>)
要素表用于存储每个要素的几何形状。该表通过 LAYERS 表的 LAYER_ID 列中的编号进行标识。基表和要素表之间的关系通过要素 ID(或 FID)来管理。此键由 ArcSDE 维护,并且对于空间列是唯一的。
要素表定义字段名
字段类型
描述
是否允许为空
FID
NUMBER(38)
主键;连接要素表和基表的唯一 ID
NOT NULL
NUMOFPTS
NUMBER(38)
定义要素的点数
NOT NULL
ENTITY
NUMBER(38)
存储在空间列中的几何类型(例如点、线或字符串)
NOT NULL
EMINX
FLOAT(64)
要素中的最小 x 值;与 eminy、emaxx 和 emaxy 共同定义要素的包络矩形
NOT NULL
EMINY
FLOAT(64)
要素中的最小 y 值;与 eminx、emaxx 和 emaxy 共同定义要素的包络矩形
NOT NULL
EMAXX
FLOAT(64)
要素中的最大 x 值;与 eminx、eminy 和 emaxy 共同定义要素的包络矩形
NOT NULL
EMAXY
FLOAT(64)
要素中的最大 y 值;与 eminx、eminy 和 emaxx 共同定义要素的包络矩形
NOT NULL
EMINZ
FLOAT(64)
三维要素中的最小 z 值
EMAXZ
FLOAT(64)
三维要素中的最大 z 值
MIN_MEASURE
FLOAT(64)
要素中的最小测量值
MAX_MEASURE
FLOAT(64)
要素中的最大测量值(允许空值)
AREA
FLOAT(64)
几何面积
LEN
FLOAT(64)
几何长度或周长
POINTS
LONG RAW
包含定义几何的点坐标的字节流
插入或更新要素时,会自动重新计算范围和 numofpts 之类的列的值。
基表和要素表之间的关系通过空间列和 FID 列来管理。此键由 ArcSDE 维护,并且是唯一的。保持基表和要素表之间的引用完整性很重要。不应对要素表或空间索引表中的记录进行编辑。已向基表、要素表和空间索引表中添加了若干索引和约束,可确保引用的完整性得到保留。但是,将要素类转换为只加载 I/O 模式(允许将数据快速插入要素类的一种状态)时,会将这些索引和约束移除。
将要素类转换回正常 I/O 模式(允许用户通过 ArcSDE 客户端查询要素类的一种状态)时,会创建索引并启用约束。如果不能在基表的空间列或要素表的 FID 列构建唯一索引,则无法将要素类转换为正常 I/O 模式。如果基表的空间列中存在要素表的 FID 列中所不具有的值,也无法将要素类转换为正常 I/O 模式。这种情况下,会将对引起问题的基表记录的引用加载到 SDE_EXCEPTIONS 表。
要素表会将几何、注记和计算机辅助设计 (CAD) 元素存储在 POINTS 列中。根据 GEOMETRY_STORAGE DBTUNE 存储参数设置的不同,可将 POINTS 列定义为 BLOB 或 LONG RAW。如果想要将压缩二进制空间数据存储在定义为 LONG RAW 的列中,请将 GEOMETRY_STORAGE DBTUNE 存储参数设置为 SDEBINARY;或者,如果想要将压缩二进制空间数据存储在定义为 BLOB 的列中,请将存储参数设置为 SDELOB。
- 空间索引表 (S<layer_id>)
二进制实现的空间索引为空间索引表。它用于存储基于简单规则格网的形状参考。该表通过 LAYERS 表的 LAYER_ID 列中的编号进行标识。
空间索引将为每个形状和格网像元组合设立一个条目,以支持空间查询。分布在三个格网像元中的要素在表中包含三个条目。执行空间查询时,搜索区域内的格网像元会被标识出来,并将用于返回一列备选几何。
空间索引表定义
空间索引表字段名
字段类型
描述
是否允许为空
SP_FID
NUMBER(38)
主键;连接空间索引表和基表的唯一 ID
NOT NULL
GX
NUMBER(38)
空间索引格网 x 值
NOT NULL
GY
NUMBER(38)
空间索引格网 y 值
NOT NULL
EMINX
NUMBER(38)
要素中的最小 x 值;与 eminy、emaxx 和 emaxy 共同定义要素的包络矩形
NOT NULL
EMINY
NUMBER(38)
要素中的最小 y 值;与 eminx、emaxx 和 emaxy 共同定义要素的包络矩形
NOT NULL
EMAXX
NUMBER(38)
要素中的最大 x 值;与 eminx、eminy 和 emaxy 共同定义要素的包络矩形
NOT NULL
EMAXY
NUMBER(38)
要素中的最大 y 值;与 eminx、eminy 和 emaxx 共同定义要素的包络矩形
NOT NULL
空间索引表用于定义格网范围以及 ArcSDE 要素类中所有几何的范围。
- sp_fid - 包含用于连接要素表和基表的唯一 ID
- gx/gy - 定义格网像元中要素的范围
- eminx/eminy/emaxx/emaxy - 定义系统单元中要素的范围
在本例中,WELLS 基表中的 FEATURE-ID 列将引用要素表和空间索引表中的要素:
WELL_ID DEPTH ACTIVE FEATURE-ID 1 30029 Yes 101 2 13939 No 102 3 92891 No 103 … … … FID AREA LEN EMINX,EMINY,… POINTS 101 <compressed feature> 102 <compressed feature> 103 <compressed feature> … … SP_FID GX GY {EMINX,EMINY,EMAXX,EMAXY} 101 70 100 102 70 100 103 71 100 … A business/feature/spatial index key reference
二进制要素类的空间索引表与 LAYERS 表中的 LAYER_ID 值相关联,而 ST_Geometry 要素类的空间索引表与 ST_GEOMETRY_INDEX 表中生成的 INDEX_ID 相关联。
View a diagram of a feature class using binary storage in Oracle.
需要使用 Adobe Acrobat Reader 才能打开此文件。
虚线表示各列之间的隐含关系;实线表示各列之间明确定义的关系。
Oracle 数据库中使用 Oracle Spatial 几何类型存储的要素类表
Oracle Spatial 使用一种空间几何类型 - MDSYS.SDO_GEOMETRY。这些要素类还包含一个基表,但该基表具有一个用于存储要素类几何的 SDO_Geometry 空间列。几何值直接存储在该空间列中。
View a diagram of a feature class using SDO_Geometry storage in Oracle..
需要使用 Adobe Acrobat Reader 才能打开此文件。
虚线表示各列之间的隐含关系;实线表示各列之间明确定义的关系。
XML 文档中的要素类
要素类在 DataElement 元素中进行定义。要素类的 DataElement 标记设置为 esri:DEFeatureClass 类型。要素类 DataElement 中还有定义要素类的其他元素,例如 Field、Domain、ConfigurationKeyword 和 SpatialReference 元素。
以下是 Parcels 要素类的 XML 文档的一小部分内容:
<DataElement xsi:type="esri:DEFeatureClass"> <CatalogPath>/V=SDE.DEFAULT/FC=PERRITA.PARCELS</CatalogPath> <Name>PERRITA.PARCELS</Name> <DatasetType>esriDTFeatureClass</DatasetType> <DSID>21</DSID> <Versioned>false</Versioned> <CanVersion>true</CanVersion> <HasOID>true</HasOID> <OIDFieldName>OID</OIDFieldName> <Fields xsi:type="esri:Fields"> <FieldArray xsi:type="esri:ArrayOfField"> <Field xsi:type="esri:Field"> <Name>OID</Name> <Type>esriFieldTypeInteger</Type> <IsNullable>false</IsNullable> <Length>4</Length> <Precision>10</Precision> <Scale>0</Scale> <Required>true</Required> <Editable>false</Editable> <AliasName>OBJECTID</AliasName> <ModelName>OBJECTID</ModelName> </Field>
用于定义要素类的所有其他元素
</DataElement>