Oracle Spatial中的SDO_GEOMETRY

在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为存储空间信息定义数据类型,可以表达点、线、面及其组合的几何体。逻辑上使用一列元素数组实现。如图所示

Oracle Spatial中的SDO_GEOMETRY_第1张图片

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基本操作

你可能感兴趣的:(oracle,sql)