Oracle Spatial中的空间图层

空间图层:Oracle spatial将一张表中单个SDO_GEOMETRY列上的所有对象作为一个空间图层。(例如,customers表中location列内的所有几何对象被作为一个空间图层进行处理。)

描述一个图层的元数据信息包括空间范围和数据采用的坐标系统。或者,换句话说,要想执行与每个空间图层(换句话说,一张表中某个特定的SDO_GEOMETRY列的所有几何对象)有关的验证、索引创建已经空间查询等操作,需要为每个图层指定合适的元数据。它包括以下信息:

  • 1. 维度:the number of dimensions
  • 2. 每个维度的界限:the bounds for each dimension
  • 3. 每个维度的容差:the tolerance for each dimension。例如,如果tolerance指定为0.5,两个点A和B之间的距离如果小于0.5,那么点A和点B就被认为处于同一位置。一般来说,tolerance值得单位与维度界限的单位相同,但是在geodetic坐标系中,tolerance值表示地球表面上两个点之间的最短距离,其单位总是米(因为Oracle需要tolerance在不同维度上具有相同的单位),通常设为0.1或者0.5。
  • 4. 坐标系统,有三种类型的坐标系统:   i)   Geodetic坐标系统:以角度表示的经纬度,Oracle Spatial支持的geodetic坐标系在MDSYS.GEODETIC_SRIDS视图中可以查到;
      ii)  投影坐标系:笛卡尔坐标系统
      iii) 本地坐标系:

Oracle Spatial中,通过查看USER_SDO_GEOM_METADATA试图中的DIMINFO属性,可以知道特定图层信息,包括图层每一维度的信息,包括维度的名称(如经度’Latitude’)、维度的上下限以及维度的tolerance。

Oracle Spatial基本操作中对此有比较详细的介绍,借用一下快乐自己做主的图(thanks you:):

USER_SDO_GEOM_METADATA元数据视图中,每一条记录描述了一个Oracle Spatial空间图层的信息,包括图层的空间信息(空间坐标范围)和空间坐标系统(SRID)。

因此,创建一个带有地理信息的数据库表后,还需要将其元数据信息记录在元数据表中。
例如customers表中会有字段记录每个顾客的地址信息,在创建customer表后,还要在USER_SDO_GEOM_METADATA视图中插入该表地理相关的元数据,该视图是可修改的,基于MDSYS schema的SDO_INDEX_METADATA_TABLE表。

Pl/sql代码
复制代码
 收藏代码
  1. INSERT INTO user_sdo_geom_metadata VALUES (   
  2.        ‘CUSTOMERS’,   
  3.        ‘LOCATION’,   
  4.        SDO_DIM_ARRAY(   
  5.             SDO_DIM_ELEMENT(   
  6.                 ‘LONGITUDE’,   
  7.                 –180,   
  8.                 180,   
  9.                 0.5  
  10.             ),   
  11.             SDO_DIM_ELEMENT(   
  12.                 ‘LATITUDE’,   
  13.                 –90,   
  14.                 90,   
  15.                 0.5  
  16.             )   
  17.        ),   
  18.        8307  
  19. );  

为空间图层设置元数据信息使得我们可以进行验证、空间索引、空间查询和空间分析等操作。此外为空间图层设置元数据也使得Oracle中地图可视化和网络/路径分析等操作成为可能。

通过空间操作符(如SDO_WITHIN_DISTANCE)进行空间查询时需要有空间索引(不过有些空间处理函数可能不需要空间索引,例如叠加分析),如果发现不能为geometry类数据列创建空间索引,错误表现为:

Plsql代码
复制代码
 收藏代码
  1. ERROR at line 1:   
  2. ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine   
  3. ORA-13203: failed to read USER_SDO_GEOM_METADATA view   
  4. ORA-13203: failed to read USER_SDO_GEOM_METADATA view   
  5. ORA-06512: at “MDSYS.SDO_INDEX_METHOD_10I”, line 10  
  6. ORA-06512: at line 1  

那是因为你没有为它在USER_SDO_GEOM_METADATA中设置元数据。

在空间索引创建时,Oracle会自动检查每个geometry对象的SDO_SRID是否符合USER_SDO_GEOM_METADATA元数据视图中为相应空间图层指定的坐标系。如何不符合,会抛出ora-13365错误。

转载自:https://blog.csdn.net/wanglipo/article/details/7306193

You may also like...