1

背景: 私のアプリケーションは、Oracle に格納されている空間データ (ジオメトリ) の MBR を表示する必要があります。このために、私は現在 Oracle の SDO_AGGR_MBR() 関数を使用していますが、非常に遅いです。少し調べてみると、MBR も計算し、SDO_AGGR_MBR よりもはるかに高速な関数 SDO_TUNE.EXTENT_OF() を見つけました。ただし、2つの問題があります。投影座標の 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 をクエリし、データが地理的なものか投影されたものかを調べます。これには、行が PROJCS または GEOGCS で始まる WKTEXT という名前の列があります。

私はこれをプロトタイプ化することができ、それは機能しているように見えますが、これが正しいアプローチであると完全に確信しています. 上記のクエリは、データの最初の行の SRID をフェッチします。SRID が 1 つの列で異なる可能性があるかどうかはわかりません。私が行っているもう 1 つの仮定は、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 に答える