基于Oracle中SRID的地理或预测数据

时间:2014-09-12 06:14:30

标签: sql oracle spatial coordinate-systems oracle-spatial

背景 我的应用程序需要显示存储在Oracle中的空间数据(几何)的MBR。为此,我目前正在使用Oracle的SDO_AGGR_MBR()函数,但速度非常慢。在稍微研究一下,我发现了一个函数SDO_TUNE.EXTENT_OF(),它也可以计算MBR并且比SDO_AGGR_MBR快得多。但它有两个问题。它仅适用于投影坐标中的2D数据。为了利用EXTENT_OF的性能优势,我决定将其用于投影数据并回退到SDO_AGGR_MBR以获取地理数据。

问题: 我首先假设SRID在4000到5000之间的所有数据都是地理数据,但这并不完全正确。我找到了一个名为MDSYS.CS_SRS的表/视图,它存储了坐标系信息。

我打算使用查询找到SRID:

select a.COLUMN_NAME.SDO_SRID from TABLE_NAME a where rownum = 1;

然后使用此SRID查询MDSYS.CS_SRS以查明数据是地理数据还是投影数据。它有一个名为WKTEXT的列,其行以PROJCS或GEOGCS开头。

我可以对此进行原型设计并且似乎有效但完全相信这是正确的方法。上面的查询获取数据第一行的SRID。我不知道单个列中的SRID是否可以不同。我正在做的另一个假设是WKTEXT专栏中的文字。如果在所有情况下都不是PROJCS / GEOGCS并且不同版本的Oracle之间的值发生变化,那么我会遇到很多麻烦。事实上,现在,我只是假设PROJCS意味着投影CS和GEOGCS意味着地理CS而且我不确定它是否正确..

我想知道是否有更简单的方法来确定Oracle DB中的空间数据是投影还是地理空间。

1 个答案:

答案 0 :(得分:1)

您没有说出您正在查看的数据库版本。我假设10gR2或更晚。

最简单的方法是检查表SDO_COORD_REF_SYS:

SQL> select srid, coord_ref_sys_kind from sdo_coord_ref_sys where srid in (4326, 4327, 27700, 7405);

      SRID COORD_REF_SYS_KIND
---------- --------------------
      4326 GEOGRAPHIC2D
      4327 GEOGRAPHIC3D
      7405 COMPOUND
     27700 PROJECTED

4 rows selected.