`
cryolite
  • 浏览: 573268 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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表。
INSERT INTO user_sdo_geom_metadata VALUES (
       'CUSTOMERS',
       'LOCATION',
       SDO_DIM_ARRAY(
            SDO_DIM_ELEMENT(
                'LONGITUDE',
                -180,
                180,
                0.5
            ),
            SDO_DIM_ELEMENT(
                'LATITUDE',
                -90,
                90,
                0.5
            )
       ),
       8307
);



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

通过空间操作符(如SDO_WITHIN_DISTANCE)进行空间查询时需要有空间索引(不过有些空间处理函数可能不需要空间索引,例如叠加分析),如果发现不能为geometry类数据列创建空间索引,错误表现为:
ERROR at line 1:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-06512: at "MDSYS.SDO_INDEX_METHOD_10I", line 10
ORA-06512: at line 1

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

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

参考:Oracle Spatial基本操作,作者:快乐自己做主

  • 大小: 8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics