1

背景: 我的应用程序需要显示存储在 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 中的空间数据是投影还是地理数据。

4

1 回答 1

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.
于 2014-09-12T13:27:32.963 回答