在ISO/IEC国际标准SQL/MM的第三部分定义了空间数据及其相关例程用来存储、管理二维空间数据。
ISO/IEC 13249-3:2003, “Information technology – Database languages – SQL multimedia and application packages – Part 3: Spatial,” http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=31369.
OGC也定义了一套空间数据存储和操作标准。
Oracle为存储空间信息定义数据类型,可以表达点、线、面及其组合的几何体。逻辑上使用一列元素数组实现。如图所示
SDO_GEOMETRY数据类型有两个逻辑部分组成:几何体的空间参考系统(也叫坐标系统)和ElementArray。
ElementArray(或者说元素数组)描述了SDO_GEOMETRY对象的形状和位置。这一元素数组组
DESCRIBE SDO_GEOMETRY;
user type definition TYPE SDO_GEOMETRY AS OBJECT (
SDO_GTYPE NUMBER,
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES SDO_ORDINATE_ARRAY,
MEMBER FUNCTION GET_GTYPE RETURN NUMBER DETERMINISTIC,
MEMBER FUNCTION GET_DIMS RETURN NUMBER DETERMINISTIC,
MEMBER FUNCTION GET_LRS_DIM RETURN NUMBER DETERMINISTIC)
ALTER TYPE SDO_GEOMETRY ADD MEMBER FUNCTION GET_WKB RETURN BLOB DETERMINISTIC,
ADD MEMBER FUNCTION GET_WKT RETURN CLOB DETERMINISTIC,
ADD MEMBER FUNCTION ST_CoordDim RETURN SMALLINT DETERMINISTIC,
ADD MEMBER FUNCTION ST_IsValid RETURN INTEGER DETERMINISTIC,
ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkt IN CLOB,
srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT,
ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkt IN VARCHAR2,
srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT,
ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkb IN BLOB,
srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT
CASCADE
SDO_GTYPE属性表示几何体类型,如点、线、面等
SDO_SRID属性表示空间参考系统的ID
如果几何体是点,最好使用SDO_POINT属性直接表示几何体,这样速度也要快些;
如果是其他类型,使用SDO_ORDINATES和SDO_ELEM_INFO存储坐标信息:
- SDO_ORDINATES属性存储几何体的所有元素的坐标数据;
- SDO_ELEM_INFO属性指定几何体元素在SDO_ORDINATES数组中的起始位置、链接方式(直线还是弧线),它是点还是线或者面。
SDO_GEOMETRY对象自带了GET_WKT()和GET_WKB()方法将几何体转换成标准的WKT和WKB。或者使用SDO_UTIL的TO_WKTGEOMETRY和TO_WKBGEOMETRY方法。
在SQL INSERT语句中直接使用SDO_GEOMETRY构造器生成几何体对象然后插入到数据库表中有诸多问题,第一是速度很慢,第二是插入的坐标数据有限(不能超过1000个)
参考:
Oracle Spatial基本操作