【问题标题】:Geographic or projected data based on SRID in OracleOracle 中基于 SRID 的地理或投影数据
【发布时间】:2014-09-12 21:27:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案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.
    

    【讨论】:

    • 这正是我想要的。尽管我需要进一步研究以了解 COMPOUND、GEOCENTRIC、VERTICAL 和 ENGINEERING 的含义以及它们与 PROJECTED/GEOGRAPHIC 的区别。
    • VERTICAL 定义了一维垂直系统。例如 5701 是英国的垂直系统。 COMPOUND 系统将水平分量 (PROJECTED) 与 VERTICAL 组合在一起。例如,7405 结合了 27700(英国国家电网)和 5701。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多