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