您的位置:首页 > 数据库 > Oracle

Oracle矢量数据类型ST_Geometry

2016-01-29 14:21 756 查看

一、简介

ArcSDEforOracle提供了ST_Geometry类型来存储几何数据。ST_Geometry是一种遵循ISO和OGC规范的,可以通过SQL直接读取的空间信息存储类型。采用这种存储方式能够更好的利用oracle的资源,更好的兼容oracle的特征,比如复制和分区,并且能够更快的读取空间数据。使用ST_Geometry存储空间数据,可以把业务数据和空间数据存储到一张表中(使用SDENBLOB方式业务数据和空间数据是分开存储在B表和F表中的),因此可以很方便的在业务数据中增加空间数据(只需要在业务表中增加ST_Geometry列)。使用这种存储方式还能够简化多用户的读取,管理(只需要管理一张表)。从ArcGIS9.3开始,新的ArcSDEgeodatabasesforOracle会默认使用ST_Geometry方式来存储空间数据。它实现了SQL3规范中的用户自定义类型(user-defineddatatypes),允许用户使用ST_Geometry类型创建列来存储诸如界址点,街道,地块等空间数据。

二、存储结构

ST_Geometry存储空间数据的结构如下表:NameTypeENTITYNUMBER(38)NUMPTSNUMBER(38)MINXFLOAT(64)MINYFLOAT(64)MAXXFLOAT(64)MAXYFLOAT(64)MINZFLOAT(64)MAXZFLOAT(64)MINMFLOAT(64)MAXMFLOAT(64)AREAFLOAT(64)LENFLOAT(64)SRIDNUMBER(38)POINTSBLOBEntity为要素类型,包括(linestring,multilinestring,multipoint,multipolygon,point,orpolygon)。具体的值对应的类型可以通过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的面积。SELECTname,st_area(geometry)FROMus_statesORDERBYname;

四、构造ST_Geometry对象

ST_LineString,ST_MultiLineString,ST_MultiPoint,ST_MultiPolygon,ST_Point,andST_Polygon全部是ST_Geometry的子类.ST_Geometry和他的子类共享属性和方法.ST_LineString,ST_MultiLineString,ST_MultiPoint,ST_MultiPolygon,ST_PointandST_Polygon的构造函数的定义是相同的,构造函数的名字就是类型名。ST_Point是个有限对象(只有一个点),因此可以使用下面的方法来构造。1,使用xy坐标和SRID来构造ST_Point1,使用xy坐标和SRID来构造ST_PointMETHODFINALCONSTRUCTORFUNCTIONST_POINTRETURNSSELFASRESULTArgumentNameTypeIn/OutDefault?PT_XNUMBERINPT_YNUMBERINSRIDNUMBERINSQL>insertintosample_ptvalues(ST_Point(10,20,1));2,使用xy坐标、高程值(z)和SRID来构造ST_PointMETHODFINALCONSTRUCTORFUNCTIONST_POINTRETURNSSELFASRESULTArgumentNameTypeIn/OutDefault?PT_XNUMBERINPT_YNUMBERINPT_ZNUMBERINSRIDNUMBERINSQL>insertintosample_ptvalues(ST_Point(10,20,5,1));3,使用xy坐标、高程值(z),量测值(m)和SRID来构造ST_PointMETHODFINALCONSTRUCTORFUNCTIONST_POINTRETURNSSELFASRESULTArgumentNameTypeIn/OutDefault?PT_XNUMBERINPT_YNUMBERINPT_ZNUMBERINMEASURENUMBERINSRIDNUMBERINSQL>insertintosample_ptvalues(ST_Point(10,20,5,401,1));

五、用户权限限制

在oracle使用ST_Geometry,用户必须有以下权限:CREATETYPEUNLIMITEDTABLESPACECREATELIBRARYCREATEOPERATORCREATEINDEXTYPECREATEPUBLICSYNONYMDROPPUBLICSYNONYMTheCONNECTandRESOURCErolesincludetheseprivileges.

六、st_geometry操作实例

这是Oracle数据中与矢量数据相关的类型。设置字段类型格式为sde.st_geometry。下面我就例子来讨论它的用途:首先创建一个表geomsCreatetablegeoms(idinteger,geometrysde.st_geometry);然后向里面插入数据:INSERTINTOgeoms(id,geometry)VALUES(1901,sde.st_geometry('point(12)',0));INSERTINTOgeoms(id,geometry)VALUES(1902,sde.st_geometry('linestring(332,343,356)',0));INSERTINTOgeoms(id,geometry)VALUES(1903,sde.st_geometry('polygon((33,46,53,33))',0));查询:
SELECTid,sde.st_astext(geometry)geometryFROMgeoms;

七、st_geometrytype

返回geometry的类型。
sde.st_geometrytype(g1sde.st_geometry)
Varchar(32)包含下面其中之了:ST_PointST_LineStringST_PolygonST_MultiPointST_MultiLineStringST_MultiPolygon

举例:

先构建表和插入数据CREATETABLEgeometrytype_test(g1sde.st_geometry);INSERTINTOgeometrytype_testVALUES(sde.st_geomfromtext('point(10.0220.01)',0));INSERTINTOgeometrytype_testVALUES(sde.st_geomfromtext('linestring(10.0120.01,10.0130.01,10.0140.01)',0));INSERTINTOgeometrytype_testVALUES(sde.st_geomfromtext('polygon((10.0220.01,11.9235.64,25.0234.15,19.1533.94,10.0220.01))',0));INSERTINTOgeometrytype_testVALUES(sde.st_geomfromtext('multipoint(10.0220.01,10.3223.98,11.9225.64)',0));INSERTINTOgeometrytype_testVALUES(sde.st_geomfromtext('multilinestring((10.0220.01,10.3223.98,11.9225.64),(9.5523.75,15.3630.11))',0));INSERTINTOgeometrytype_testVALUES(sde.st_geomfromtext('multipolygon(((10.0220.01,11.9235.64,25.0234.15,19.1533.94,10.0220.01)),((51.7121.73,73.3627.04,71.5232.87,52.4331.90,51.7121.73)))',0));然后从表中查询数据
SELECTUPPER(sde.st_geometrytype(g1))Geometry_typeFROMgeometrytype_test;
结果为
Geometry_type
ST_POINT
ST_LINESTRING
ST_POLYGON
ST_MULTIPOINT
ST_MULTILINESTRING
ST_MULTIPOLYGON
[/code]

八、ST_GeomFromText

sde.st_geomfromtext(wktclob,sridinteger)
[/code]
返回
ST_Geometry

举例

创建表与插入数据
CREATETABLEgeometry_test(gidsmallintunique,g1sde.st_geometry);
[/code]
INSERTINTOgeometry_testVALUES(
1,
sde.st_geomfromtext('point(10.0220.01)',0)
);
INSERTINTOgeometry_testVALUES(
2,
sde.st_geomfromtext('linestring(10.0120.01,10.0130.01,10.0140.01)',0)
);
INSERTINTOgeometry_testVALUES(
3,
sde.st_geomfromtext('polygon((10.0220.01,11.9235.64,25.0234.15,
19.1533.94,10.0220.01))',0)
);
INSERTINTOgeometry_testVALUES(
4,
sde.st_geomfromtext('multipoint(10.0220.01,10.3223.98,11.9225.64)',0)
);
INSERTINTOgeometry_testVALUES(
5,
sde.st_geomfromtext('multilinestring((10.0220.01,10.3223.98,
11.9225.64),(9.5523.75,15.3630.11))',0)
);
INSERTINTOgeometry_testVALUES(
6,
sde.st_geomfromtext('multipolygon(((10.0220.01,11.9235.64,
25.0234.15,19.1533.94,10.0220.01),(51.7121.73,73.3627.04,
71.5232.87,52.4331.90,51.7121.73)))',0)
);
查询
[/code]
SELECTsde.st_astext(g1)FROMgeometry_test;
[/code]

九、ST_MinX

ST_MinY、ST_MinZ等同。
返回最小X坐标。
sde.st_minx(g1sde.st_geometry)
[/code]

举例

创建表
CREATETABLEminx_test(idinteger,geometrysde.st_geometry);
[/code]
插入数据
[/code]
INSERTINTOminx_testVALUES(
1901,
[/code]
sde.st_polygon('polygonzm((110120203,110140223,120130264,110120203))',0)
[/code]
);
INSERTINTOminx_testVALUES(
1902,
sde.st_polygon('polygonzm((00407,04359,543212,50315,00407))',0)
);
[/code]
查询
SELECTid,sde.st_minx(geometry)MinX
FROMminx_test;
结果
[/code]
IDMINX
1901110
19020

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: