|
|
|
|

ArcSDE使用ST_Geometry存储空间数据(oracle)

一、简介 ArcSDE for Oracle提供了ST_Geometry类型来存储几何数据。ST_Geometry是一种遵循ISO和OGC规范的,可以通过SQL直接读取的空间信息存储类型。采用这种存储方式能够更好的利用oracle的资源,更好的兼容oracle的特征,比如复制和分区,并且能够更...

作者:yyilyzbc来源:GIS大讲堂|2009年12月22日
一、简介
    ArcSDE for Oracle提供了ST_Geometry类型来存储几何数据。ST_Geometry是一种遵循ISO和OGC规范的,可以通过SQL直接读取的空间信息存储类型。采用这种存储方式能够更好的利用oracle的资源,更好的兼容oracle的特征,比如复制和分区,并且能够更快的读取空间数据。使用ST_Geometry存储空间数据,可以把业务数据和空间数据存储到一张表中(使用SDENBLOB方式业务数据和空间数据是分开存储在B表和F表中的),因此可以很方便的在业务数据中增加空间数据(只需要在业务表中增加ST_Geometry列)。使用这种存储方式还能够简化多用户的读取,管理(只需要管理一张表)。barry
    从 ARCGIS 9.3开始,新的 ArcSDE geodatabases for Oracle 会默认使用ST_Geometry 方式来存储空间数据。它实现了SQL3规范中的用户自定义类型(user-defined data types),允许用户使用ST_Geometry类型创建列来存储诸如界址点,街道,地块等空间数据。
    使用ST_Geometry类型存储空间数据,具有以下优势: 1)通过SQL函数( ISO SQL/MM 标准)直接访问空间数据; 2)使用SQL语句存储、检索操纵空间数据,就像其他类型数据一样。 3)通过存储过程来进行复杂的空间数据检索和分析。 4)其他应用程序可以通过SQL语句来访问存储在geodatabase中的数据。从ARCGIS 9.3开始,新的ArcSDE geodatabases for Oracle 要求所以ST 函数调用的时候前面都要加上 SDE schema名称。例如:要对查询出来的空间数据进行union操作,则SQL函数需要这样写:"sde.ST_Union",在9,2版本之前,可以不加SDE schema名称。

二 存储结构

    ST_Geometry 存储空间数据的结构如下表:
Name    Type
ENTITY NUMBER(38)
NUMPTS NUMBER(38)
MINX     FLOAT(64)
MINY FLOAT(64)
MAXX FLOAT(64)
MAXY FLOAT(64)
MINZ FLOAT(64)
MAXZ FLOAT(64)
MINM FLOAT(64)
MAXM FLOAT(64)
AREA FLOAT(64)
LEN FLOAT(64)
SRID NUMBER(38)
POINTS BLOB

Entity为要素类型,包括(linestring, multilinestring, multipoint, multipolygon, point, or polygon)。具体的值对应的类型可以通过 st_geom_util 存储过程获得。 NUMPTS为坐标点的个数
Minx, miny, maxx, maxy 几何的外包络矩形
Area 几何的面积
Len 几何的周长
SRID 空间参考系ID,对应 ST_Spatial_References 表中的空间参考信息
POINTS 坐标序列

三、操作函数

    下面是一些针对ST_Geometry进行操作的函数,输入为ST_Geometry类型数据,输出为Number型数据、
ST_Area 返回几何的面积。
ST_Len 返回几何的周长。
ST_Entity 返回几何类型.
ST_NumPoints 返回几何坐标点的个数.
ST_MinM, ST_MinX, ST_MinY, ST_MinZ 返回几何不同维度的最小坐标. ST_MaxM, ST_MaxX, ST_MaxY, ST_MaxZ 返回几何不同维度的最大坐标. ST_SRID 返回空间参考系ID.
Get_release 返回版本信息.
如下面例子,在us_states表中查找所有state的名字并计算state的面积。
SELECT name, st_area(geometry)
FROM us_states
ORDER BY name;

四、构造ST_Geometry对象

    ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point, and ST_Polygon 全部是ST_Geometry的子类. ST_Geometry和他的子类共享属性和方法. ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point and ST_Polygon的构造函数的定义是相同的,构造函数的名字就是类型名。
    ST_Point是个有限对象(只有一个点),因此可以使用下面的方法来构造。
1,使用xy坐标和SRID来构造ST_Point
1,使用xy坐标和SRID来构造ST_Point
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name                  Type                    In/Out Default?
PT_X                           NUMBER                  IN
PT_Y                           NUMBER                  IN
SRID                           NUMBER                  IN
SQL> insert into sample_pt values (ST_Point (10, 20, 1) );
2,使用xy坐标、高程值(z)和SRID来构造ST_Point
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name                  Type                    In/Out Default?
PT_X                           NUMBER                  IN
PT_Y                           NUMBER                  IN
PT_Z                           NUMBER                  IN
SRID                           NUMBER                  IN
SQL> insert into sample_pt values (ST_Point (10, 20, 5, 1) );
3,使用xy坐标、高程值(z),量测值(m)和SRID来构造ST_Point
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name                  Type                    In/Out Default?
PT_X                           NUMBER                  IN
PT_Y                           NUMBER                  IN
PT_Z                           NUMBER                  IN
MEASURE                        NUMBER                  IN
SRID                           NUMBER                  IN
SQL> insert into sample_pt values (ST_Point (10, 20, 5, 401, 1) );

用户权限限制


oracle使用ST_Geometry ,用户必须有以下权限:
CREATE TYPE
UNLIMITED TABLESPACE
CREATE LIBRARY
CREATE OPERATOR
CREATE INDEXTYPE
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
The CONNECT and RESOURCE roles include these privileges.

上一篇:ArcSDE 设置DBTUNE参数存储BLOB列

下一篇:为使用ST_Geometry SQL函数配置oracle的…