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