FAQ: 如何创建包括多个ST_GEOMETRY列的表并且同时视图来操作它

文章编号 : 34919
软件: ArcSDE 9.2, 9.3, 9.3.1
操作系统: N/A
已邀请:

EsriSupport

赞同来自:

问题: 如何创建包括多个ST_GEOMETRY列的表并且同时视图来操作它?
回答:
有一些工作流程需要在ArcGIS中操作包含多个ST_GEOMETRY列的表或图层。下面所描述的是如何在Oracle总创建包括多个st_geometry列的,多个空间索引的表和oracle视图,并且如何使用ArcSDE将视图注册成ArcGIS能够访问的数据。 下面的过程演示了一下几个过程,在Oracle中创建一个包括多个st_geometry列的表,针对于每一个st_geometry创建一个空间索引和视图,对每个视图使用ArcSDE将其注册成ArcGIS软件能够访问的数据。 1. 使用SQL*Plus创建一张表。这个例子演示创建一个包括三列st_geometry属性的表。 SQL> CREATE TABLE spatial_objects
2 (objectid NUMBER(38) NOT NULL,
3 shape_pt sde.st_geometry,
4 shape_ln sde.st_geometry,
5 shape_py sde.st_geometry);
Table Created.
2. 下一步使用SQL*Plus向表中添加一行记录,并且更令另外两个geometry属性字段,由于ArcGIS并不直接支持在同一featureclass中包括多个空间字段,因此下一步需要创建Oracle的视图,ObjectID字段必要使用用户维护模式而且在插入语句中必须显示的制定ObjectID值。

SQL> INSERT INTO spatial_objects VALUES
2 (1, sde.st_point(1395735.6, 405588.4,1), NULL, NULL);
1 row created.
接下来shape_In和shape_py字段也使用st_linestring和st_polygon构造符进行更新。

SQL> UPDATE spatial_objects SET
2 shape_ln = sde.st_linestring('linestring (1395735.6 405588.4, 1395767.3 405421.1)',1),
3 shape_py = sde.st_polygon('polygon ((1395652.5 405380.6, 1395652.5 405880.6, 1396152.5 405580.6,
4 1396152.5 405380.6, 1395652.5 405380.6))',1)
5 WHERE objectid = 1;
1 row updated.
SQL> COMMIT;
3. 下一步针对每一个st_geometry字段创建一个索引,这个例子中值为1的空间参考ID已经存在,并使用与三个st_geometry字段上。

SQL> CREATE INDEX shape_pt_idx
2 ON spatial_objects (shape_pt)
3 INDEXTYPE IS sde.st_spatial_index
4 parameters ('st_grids=100 st_srid=1');
Index created.
SQL> CREATE INDEX shape_ln_idx
2 ON spatial_objects (shape_ln)
3 INDEXTYPE IS sde.st_spatial_index
4 parameters ('st_grids=100 st_srid=1');
Index created.
SQL> CREATE INDEX shape_py_idx
2 ON spatial_objects (shape_py)
3 INDEXTYPE IS sde.st_spatial_index
4 parameters ('st_grids=100 st_srid=1');
Index created.
4. 下一步引用ObjectID字段和每个类型为st_geometry字段创建视图,每个视图的名称是唯一的。

SQL> CREATE OR REPLACE VIEW spatial_view_pt AS
2 SELECT objectid, shape_pt
3 FROM spatial_objects;
View created.
SQL> CREATE OR REPLACE VIEW spatial_view_ln AS
2 SELECT objectid, shape_ln
3 FROM spatial_objects;
View created.
SQL> CREATE OR REPLACE VIEW spatial_view_py AS
2 SELECT objectid, shape_py
3 FROM spatial_objects;
View created.
5. 最后一步使用ArcSDE的命令注册每一个视图。注册过程是向ArcSDE的元信息表中添加相关记录,只有这样才能让ArcMap认为视图为一个Featureclass。

D:\> sdelayer -o register -l spatial_view_pt,shape_pt -e p -u tomb -i 5151 -t st_geometry -C objectid,user
ArcSDE 9.2 for Oracle10g Build 508 Thu Apr 17 12:23:18 2008
Layer Administration Utility
-----------------------------------------------------
Successfully Created Layer.
D:\> sdelayer -o register -l spatial_view_ln,shape_ln -e l -u tomb -i 5151 -t st_geometry -C objectid,user
ArcSDE 9.2 for Oracle10g Build 508 Thu Apr 17 12:23:18 2008
Layer Administration Utility
-----------------------------------------------------
Successfully Created Layer.
D:\> sdelayer -o register -l spatial_view_py,shape_py -e a -u tomb -i 5151 -t st_geometry -C objectid,user
ArcSDE 9.2 for Oracle10g Build 508 Thu Apr 17 12:23:18 2008
Layer Administration Utility
-----------------------------------------------------
Successfully Created Layer.
注册过程需要提供视图的名称和shape属性(-l参数),entity类型(-e 参数),表示表包括st_geometry字段(-t 参数 ),以及哪一列被用作sde_row_id属性,该属性石SDE维护还是用户维护。
数据被ArcSDE注册后,他将作为能被ArcCatalog和ArcMap使用的feature class.这个视图不能被注册成geodatabase或者被ArcGIS编辑。




创建时间:2008-06-02
最近更新: 2009-10-03


原文链接
http://support.esrichina.com.cn/2008/0602/855.html

要回复问题请先登录注册