6 座標系(空間参照システム)

この章では、Oracle Spatial and Graphの座標系のサポートの詳細を示します。

このサポートについては、「座標系」で紹介しています。様々な座標系でSDO_GEOMETRYオブジェクトを格納および操作できます。

MDSYS.SDO_CSパッケージに含まれる座標系の変換ファンクションおよびプロシージャについては、「SDO_CSパッケージ(座標系変換)」を参照してください。

トピック:

6.1 用語および概念

このトピックでは、Oracle Spatial and Graphでの座標系のサポートに関連する重要な用語および概念について説明します。

トピック:

6.1.1 座標系(空間参照システム)

座標系(空間参照システム)は、座標を位置に割り当て、そのような座標間の関連を確立するための手段を提供します。これによって、実際の空間における位置表現として、座標を変換することが可能になります。

座標参照系という用語の意味は、Spatial and Graphでの「座標系」と同じであり、この2つの用語は区別なく使用されます。European Petroleum Survey Group(EPSG)の規格とドキュメントでは、通常は、座標参照系という用語が使用されています。(EPSGでは、「座標系」という用語に独自の意味があります。詳細は、「SDO_COORD_SYS表」を参照してください。)

6.1.2 デカルト座標

デカルト座標は、指定した基点からの点の位置を、2次元または3次元空間の相互に直交する軸を関連付けて測定する座標です。

6.1.3 測地座標(地理座標)

測地座標(地理座標)は、角度を持つ座標(経度および緯度)であり、球体の極点の座標と密接に関連し、また、地球上の特定の測地データに関連付けて定義されます(「測地データ」を参照)。測地座標のサポートの詳細は、「測地座標のサポート」を参照してください。

6.1.4 投影座標

投影座標は、地表の点を平面に数学的にマップした結果である平面的なデカルト座標です。このような数学的マッピングは、それぞれ異なる目的に使用されます。

6.1.5 ローカル座標

ローカル座標は、非地球(非地理参照)座標系のデカルト座標です。Spatial and Graphでのローカル座標のサポートについては、「ローカル座標のサポート」を参照してください。

6.1.6 測地データ

測地データ(データ)は、楕円体をシフトおよび回転し、通常は地表を部分的または全体的に近似する扁平回転楕円体として、地球の形を表現する手段で、測地座標系の基準になります。

それぞれの測地座標系は、データに基づきます。

6.1.7 変換

変換は、ある座標系から別の座標系へ座標を変換します。

座標系が地理参照座標系である場合、変換はデータ変換を伴う場合があります。データ変換は、ある測地データから別の測地データへ測地座標を変換します。通常、参照する楕円体の形、方向および中心が変化します。

6.2 測地座標のサポート

Oracle9i以上のSpatial and Graphでは、測地座標の合理的かつ完全な処理が提供されます。

Oracle9iより前の空間計算は、ジオメトリのレイヤーに対して指定された座標系に関係なく、平面(デカルト)座標のみに基づいていました。したがって、測地座標系のデータの計算では、常に座標が平面上にある場合と同様に処理され、表面の曲率が考慮されないため、計算が不正確でした。

現在は、指定された測地座標系での地球の曲率を考慮して楕円体の表面が計算されるため、正確な結果が得られます。そのため、空間問合せは常に正しい回答を戻します。

トピック:

6.2.1 測地および2次元のジオメトリ

2次元のジオメトリは面ジオメトリですが、を正確に定義しておくことが必要です。平らな面(平面)は、デカルト座標によって正確に表現されます。ただし、デカルト座標は、ソリッドの表面の表現には適していません。一般的に使用される空間ジオメトリの表面は地表面ですが、地表面でのジオメトリの法則は平面での法則とは異なります。たとえば、地表面に平行線はなく、線は測地線であり、すべての測地線は交差します。そのため、デカルト・ジオメトリでは閉曲面の問題を正確に処理できません。

Spatial and Graphでは、データを平面上に投影せずに、座標系または関連する地域のサイズに関係なく正確な結果を提供します。問合せが地表面上のどの部分を対象にしているかに関係なく、極などの特殊な地域でも、正確な結果が得られます。そのため、選択した任意のデータおよび投影に座標を格納し、座標系に関係なく正確な問合せを実行できます。

6.2.2 測地座標系または投影座標系の選択

地表面を処理するアプリケーションでは、データは、測地座標系または投影平面座標系を使用して表現できます。どちらの方法を使用するかは、次の精度およびパフォーマンスに関連するすべての要件を考慮してください。

  • 精度

    多くの空間アプリケーションは、非常に小さい地域を対象としているため、ローカル投影のデカルト座標上で正確な計算を行うことができます。たとえば、New Hampshire州平地のローカル投影では、その州のデータを使用するほとんどの空間アプリケーションで適切な精度が得られます。

    ただし、カナダやスカンジナビアなどの広い地域については、平面投影上でのデカルト計算では正確な結果を得られません。たとえば、スウェーデンのストックホルムおよびフィンランドのヘルシンキが、指定した距離内にあるかどうかの問合せを実行した場合、指定した距離が実際の距離に近い値である場合は、不適切な結果が戻される場合があります。広い地域に関係する計算を行う場合または非常に高い精度を必要とする場合は、地表面の曲率を考慮する必要があります。

  • パフォーマンス

    球体の計算は、デカルトの計算より多くの計算リソースを使用します。測地座標を使用する一部の操作では、同じ操作をデカルト座標を使用して行う場合よりも、完了までに時間がかかることがあります。

座標系の種類は浮動小数点演算に関連する異形が表示される可能性がある点に影響するため、適切な種類の座標系を選択することが重要です。

6.2.3 非楕円体高または楕円体高の選択

この項では、3次元データ(非楕円体または楕円体)の高さについて、その適切なタイプを選択するためのガイドラインを説明します。楕円体高は幅広く使用される、多くのGPSアプリケーションのデフォルトです。また、楕円体計算ではパフォーマンスのオーバーヘッドはあまり発生しません。ただし、アプリケーションの中には、非楕円体高の方が適切であったり、あるいは必須であるものもあります。

高さ基準のタイプは、最初の指定から変更することもできます。これは、異なる高さ基準間での変換がサポートされているためです。

トピック:

6.2.3.1 非楕円体高

非楕円体高は、準拠楕円体以外のある地点から測定されます。非楕円体における高さの一般的な測定値は、地表面、平均海水面(MSL)または基準のジオイドからのものです。

  • 地表面: 地表面からの高さの測定は、概念的には最も簡単な方法であり、非常にローカルなアプリケーションあるいは非公式のアプリケーションで一般的です。たとえば、1つのビルや1つのビル群をモデル化する場合、地表レベルで十分であることがあります。

    さらに、ローカルの地表高さをグローバルな高さデータと統合する必要がある場合は、ローカルの一定の基準の高さを追加するという変換(EPSG method 9616)を介して行うことができます。ローカルの地形のうねりをモデル化する必要がある場合は、オフセット・マトリックス(EPSG method 9635)を使用した変換を介して行います。これは、ジオイドと楕円体の間での変換と同じように行うことができます。

  • 平均海水面(MSL): MSLは、海面を示すものとしては一般的であり、概念的には単純です。これは、海面におけるローカルでの相違や、時間経過による変化を無視します。また、陸地で覆われている領域に対しても推定できます。

    MSLとの相対的な高さは、洪水の危険性、重力ポテンシャル、空気の希薄さを扱う場合など、様々なアプリケーションで役立ちます。MSLは、一般に、航空機の飛行中の高度を示すために使用されます。

  • ジオイド: ジオイドは、MSLに最も近い等ポテンシャル面です。これは、気候変動や地殻変動などを考慮しているため、重力の点から考えると、高さについて最も正確な測定値となります。ジオイドとMSLとの差は、おおよそ(プラスまたはマイナス) 2mになります。

    その時点での局所的な海面よりも、重力の方がアプリケーションにとって影響が大きいときは、MSLではなくジオイドを基準に使用します。MSL、ジオイドまたは楕円体の間で変換を行う場合は、EPSG method 9635と、適切なタイムスタンプが設定されたオフセット・マトリックスを使用できます。

多くの非楕円体の高さ基準には規則性がなく、表面にはうねりがあるため、非楕円体高の間での変換は、楕円体高の場合よりも複雑になります。1つの方法として、オフセット格子ファイルを使用して変換を定義することもできます。この方法は、EPSG method 9635に実装されています。格子ファイルは、入手する必要がありますが、政府機関のWebサイトから公的に入手できる場合があります。さらに、このような非楕円体高データ(ジオイド、海水面、ローカルの地形を含む)のほとんどは、時間とともに変化するため、その変化が大きくはないとしてもオフセット・マトリックスのタイムスタンプが重要になることがあります。(当然、長期的に考えると楕円体は静的ではないため、同じことが楕円体にも当てはまります。結局のところ、楕円体は、変化し続けるジオイド、MSLまたは地形の近似値を表すことになります。)

EPSG method 9635でのパフォーマンスおよびメモリー使用量を考慮すると、実行時には、データセットの変換前に格子をロードしておく必要があります。このロード操作によって、メイン・メモリー内にフットプリントが一時的に増え、1回のみのロード・オーバーヘッドが発生します。1つのデータセット全体を変換してもオーバーヘッドはそれほど大きくありませんが、個々のジオメトリに対して変換を頻繁に行うと、その累積オーバーヘッドが大きくなる場合があります。

6.2.3.2 楕円体高

楕円体高は、参照する楕円体のある地点から測定されます。楕円体は、地球を簡便かつ比較的忠実に表現した近似的なものです。地球を表現するために楕円体を使用すると、球体を使用する場合よりも複雑になりますが、ほとんどのアプリケーションでは、楕円体の使用は、ジオイドまたは局所的な高さを使用する場合よりも簡単です(ただし、精度の低下は多少あります)。さらに、ジオイド高および海水面高は、数学的な分析に適さない場合があります。これは、うねりがあり不規則な形状が、特定の計算を非常に複雑かつ高コストにするためです。

多くのGPSアプリケーションは、楕円体高を基準として想定し、デフォルトとして使用しています。その楕円体は、ジオイド(およびこれに近い海水面)と一致するように選択されるため、楕円体高とMSL高との差は大きくありません。たとえば、ジオイドとNAD83楕円体との差は、最大でも50メートルです。特定の国との一致がより正確になるとして、他の楕円体が選択されることがあります。

様々な団体が異なる楕円体を使用していても、WKTではその相違点を簡単に記述できます。単純なデータ変換は、楕円体間で効率的かつ正確に変換を実行できます。オフセット・マトリックスが含まれないため、ロード・オーバーヘッドは不要です。したがって、将来の要件または分析に、MSL、ジオイドまたは他の非楕円体高データの使用が必要になることがあっても、楕円体高を使用すると相互運用性が高くなります。

6.2.4 測地MBR

測地データに対する特定の操作の問合せウィンドウを作成するには、SDO_ETYPE値に1003または2003(最適化された矩形)を指定し、SDO_INTERPRETATION値に3を指定して、MBR(最小境界矩形)を使用します(「SDO_ELEM_INFO」表2-2を参照)。測地MBRは、SDO_FILTERANYINTERACT maskを指定したSDO_RELATESDO_ANYINTERACTおよびSDO_WITHIN_DISTANCEの演算子で使用できます。

例6-1では、測地MBRと空間的に相互作用するすべてのコーラのマーケットの名前が得られます。

例6-1 測地MBRの使用

SELECT c.name FROM cola_markets_cs c WHERE
   SDO_FILTER(c.shape, 
       SDO_GEOMETRY(
           2003,
           8307,    -- SRID for WGS 84 longitude/latitude
           NULL,
           SDO_ELEM_INFO_ARRAY(1,1003,3),
           SDO_ORDINATE_ARRAY(6,5, 10,10))
       ) = 'TRUE';

例6-1の出力は次のとおりです(「座標系変換の例」で定義されたデータを使用するものとします)。

NAME
--------------------------------
cola_c
cola_b
cola_d

測地MBRを使用する場合は、次のことを考慮してください。

  • データベースに格納されている空間オブジェクトには、測地MBRを使用しないでください。問合せウィンドウを作成するためにのみ使用します。

  • 左下のY座標(minY)は、右上のY座標(maxY)より小さい値である必要があります。左下のX座標(minX)が右上のX座標(maxX)より大きい場合、ウィンドウは、日付変更線(本初子午線と「逆」の子午線、または経度180度(-180度))をまたぐと想定されます。たとえば、経度/緯度データ(-10,10, -100, 20)のMBRは、(日付変更線をまたいで)地球の4分の3周に渡り、緯度線10から20度に渡っています。

  • 最適化された矩形の範囲が経度で119度を越えている場合、内部的に3つの矩形に分割され、結果として、これら3つの矩形は、そこで共通する境界であるエッジを共有します。このような最適化された矩形のジオメトリを検証すると、内部矩形に共有エッジがあるため、エラー・コード13351が戻されます。問合せにこのような最適化された矩形を使用できるのは、SDO_ANYINTERACT演算子、ANYINTERACTマスクを指定したSDO_RELATE演算子またはANYINTERACTマスクを指定したSDO_GEOM.RELATEファンクションでのみです。(他の問合せをこのような最適化された矩形に対して行うと、誤った結果が戻されることがあります。)

次の例では、特殊なケースを示し、測地MBRの緯度/経度データを解釈する方法を説明します。

  • (10,0, -110,20)は、日付変更線をまたいで地球をほぼ一周し、赤道から緯度20度に渡っています。

  • (10,-90, 40,90)は、経度10から40度の間で、南極から北極までの帯域を示します。

  • (10,-90, 40,50)は、経度10から40度の間で、南極から緯度50度までの帯域を示します。

  • (-180,-10, 180,5)は、地球を一周する南緯10度から北緯5度の帯域を示します。

  • (-180,-90, 180,90)は、地球全体を示します。

  • (-180,-90, 180,50)は、緯度50度から下の地球全体を示します。

  • (-180,50, 180,90)は、緯度50度から上の地球全体を示します。

6.2.5 距離: 測地データでの球体対楕円体

測地座標系を使用する場合、空間オブジェクト間の距離は球体または楕円体として計算されます。

楕円体の距離は球体の距離より正確ですが、計算に時間がかかります。以前のリリース(12.1以前)の測地データでは、Spatial and Graphは常に点および複数点には楕円体の距離を使用し、他のジオメトリ・タイプには球体の距離を使用していました。

リリース12.2以降、ジオメトリ・タイプに関係なく楕円体の距離を指定できます。デフォルトの距離測定動作はリリース12.1での動作のままです。ただし、ジオメトリ間の距離、最も近くにあるジオメトリ、またはジオメトリが特定の距離内にあるかどうかを決定する空間演算子およびファンクションの場合、楕円体の距離が必要かどうかを指定できます。ellipsoidal: trueというキーワードまたはパラメータを使用すると、ジオメトリ・タイプに関係なく楕円体の距離が返されます。false(デフォルト)では12.2より前の動作(点および複数点には楕円体の距離、他のジオメトリ・タイプには球体の距離)が適用されます。

リリース12.1から12.2へのアップグレード後にアプリケーションで異なる距離結果が返される懸念がある場合、デフォルト値であるfalseを使用すると、それを防ぐことができます。

6.2.6 測地データでのその他の考慮事項および要件

測地座標系を使用する場合または変換を行う場合は(ある投影座標系から別の投影座標系への変換であっても)、次のジオメトリは使用できません。

  • 円弧

測地座標系は、点または測地線(楕円体上の線)で構成されるジオメトリのみにサポートされます。投影座標系に円または円弧を含むジオメトリがある場合、それらのジオメトリを測地座標に変換する前に、SDO_GEOM.SDO_ARC_DENSIFYファンクション(「SDO_GEOMパッケージ(ジオメトリ)」を参照)を使用してジオメトリを稠密化してから、結果のジオメトリに対して空間操作を実行することができます。

測地データを使用する場合、次のサイズ制限が適用されます。

  • ポリゴン要素は、地表面の半分以上の面積を持つことはできません。また、2つのポリゴンの和集合の結果が地表面の半分より大きい場合、操作によって正しい結果が生成されません。たとえば、AとBの和集合の結果が地表の領域の半分より大きいポリゴンの場合、AとBの差集合演算、AとBの積集合演算およびAとBのXOR演算はサポートされず、これら2つのポリゴン間でANYINTERACTマスクを指定したRELATE演算のみがサポートされます。

  • 1つの線上の隣接する座標間の距離を、地球の外周(大円)の長さの半分以上にすることはできません。

これらの制限より大きい要素を使用する必要がある場合は、まず、これらの要素をより小さい複数の要素に分割してから使用します。たとえば、地球のすべての海洋面を表現するジオメトリは作成できませんが、それぞれが海洋面全体の一部を表現する複数のジオメトリ要素を作成することはできます。長さが地球外周の半分以上の線ストリングを処理する場合は、その線上に1つ以上の中間点を追加して、隣接する座標が地球の外周の半分未満になるようにします。

測地レイヤーでは、許容差がm単位で指定されます。通常、非測地データに使用される許容差を使用する場合、測地データでは、これらの値がm単位で解釈されます。たとえば、測地データに0.05の許容差を指定した場合、この値は5cmまでの精度で解釈されます。この値の精度がアプリケーションで必要とされる精度より高い場合、指定した精度の実装に必要な内部計算操作のために、パフォーマンスに影響を与える場合があります。(許容差の詳細は、「許容差」を参照してください。)

測地レイヤーでは、索引メタデータの次元のエクステントを、経度に対しては-180,180、緯度に対しては-90,90に指定する必要があります。次の文(「座標系変換の例」からの抜粋)では、測地データ・レイヤーにこれらの上下限(および各次元に10メートルの許容差)を指定します。

INSERT INTO user_sdo_geom_metadata
    (TABLE_NAME,
     COLUMN_NAME,
     DIMINFO,
     SRID)
  VALUES (
  'cola_markets_cs',
  'shape',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),  -- 10 meters tolerance
    SDO_DIM_ELEMENT('Latitude', -90, 90, 10)  -- 10 meters tolerance
     ),
  8307   -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
);

測地データに関する注意事項および制限事項については、「座標系サポートでの注意事項および制限事項」を参照してください。

6.3 ローカル座標のサポート

Spatial and Graphでは、ローカル座標系に対してあるレベルのサポートが提供されます。

ローカル座標系は、多くの場合、CADシステムで使用されます。また、調査対象地とそれ以外の地域の関係が重要でない現地測量にも使用できます。

Spatial and Graphでは、いくつかのローカル座標系が事前定義され、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)に含まれています。これらのローカル座標系は、名前が「Non-Earth」で始まり、様々な測定単位(mmmインチなど)に基づいて非地球デカルト座標系を定義します。

今回のリリースでは、ローカルと地表基準の座標系間での座標系変換は実行できません。ジオメトリまたはジオメトリのレイヤーをローカル座標系の間で変換する場合は、ローカル座標系の座標を1つの測定単位から別の測定単位にのみ変換できます(たとえば、インチからmmへの変換など)。ただし、SDO_RELATESDO_WITHIN_DISTANCEなどを使用した他のすべてのSpatial操作は、ローカル座標系で実行できます。

6.4 EPSGモデルとSpatial and Graph

Oracle Spatial and Graph座標系のサポートは、European Petroleum Survey Group (EPSG)のデータ・モデルおよびデータセットに基づいています(ただし、常に同じとはかぎりません)。

詳細は、http://www.epsg.orgを参照してください。また、EPSG測地パラメータ・データセットのダウンロードには、「README」が含まれており、エンティティ関連(E-R)ダイアグラムが示されています。Oracle Spatial and Graphによる方法では、標準化、サポートの拡張、柔軟性などの面で、次のようなメリットがあります。

  • EPSGモデルは、包括的で広く受け入れられているデータ表現用の標準であるため、このモデルを扱い慣れているユーザーは、Spatial and Graphの記憶域と操作を容易に理解できます。

  • サポートされる座標系と、それに関連するデータ、楕円体および投影図が増加しています。たとえば、EPSGの一部の測地座標系および投影座標系については、それに対応する座標系が以前のリリースのSpatial and Graphではサポートされていませんでした。このような座標系が追加されたことで、サポートされる座標系が拡大しました。

  • データ変換が柔軟になりました。あるソースとターゲット座標系間で使用可能な変換パスはOracle定義の1種類のみではなく、代替パスを、特定の領域に対して適用するように指定したり(ユースケース)、システム全体のデフォルトとして指定できます。

    この項の後半では、この柔軟性について説明します。

データ変換(ある座標系のデータを別の座標系に変換)に適用する変換ルールを指定できるようになりました。以前のリリースおよび今回のリリースのデフォルトでは、指定されたソースとターゲットの座標系のみに基づいて、事前定義済の中間変換手順を使用して変換が行われます。このデフォルトの処理は、正しい変換連鎖(優先する変換連鎖)が1つしか存在しないことを前提としています。

デフォルトでは、ソース座標系とターゲット座標系間でサポートされている変換ごとに、特定の変換メソッドが適用されます。たとえば、ある座標系からWGS 84 (経度/緯度)座標系への変換メソッドは500種類以上サポートされています(WGS 84のEPSG SRID値は4326)。たとえば、SRID 4605からSRID 4326に変換する場合は、COORD_OP_ID値が1445の変換メソッドを使用できます(この値は、座標系間の変換操作ごとに1つの行が含まれるSDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)に示されます)。

ただし、任意のソース/ターゲットSRIDの組合せに対して別のメソッドを指定(Oracleから提供されているメソッドの中から選択)すると、デフォルトの変換を無視できます。ある変換をシステム全体のデフォルトとして新しく指定することもできます。また、名前付きのユースケースに変換を関連付け、空間ジオメトリのレイヤーを変換する際にそのユースケースを指定することもできます。(ユースケースは、単に、使用例や適用範囲に対して付けられる「Project XYZ」、「Mike's Favorite Transformations」などの名前です。ユースケースはデータベース・ユーザーやスキーマとは関係しません。)

ある変換を、システム全体のデフォルトに指定する場合、またはユースケースに関連付ける場合は、SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャを使用します。以前に指定したプリファレンスを削除する場合は、SDO_CS.REVOKE_PREFERENCE_FOR_OPプロシージャを使用します。

Spatial and Graphで座標系を変換する場合、使用する変換は、一般に次の手順によって決定されます。

  1. ユースケースが指定されている場合は、そのユースケースに関連付けられている変換が適用されます。

  2. ユースケースが指定されていない場合、指定されたソース/ターゲット座標系のペアに対して作成されたユーザー定義によるシステム全体の変換が存在すると、その変換が適用されます。

  3. ユースケースが指定されておらず、指定されたソース/ターゲット座標系のペアに対するユーザー定義の変換も存在しない場合の動作は、SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャなどによってEPSGルールが作成済かどうかによって異なります。

    • EPSGルールが作成済で、この変換に対してEPSGルールが定義されている場合は、そのEPSG変換が適用されます。

    • EPSGルールが作成されていないか、または作成されていてもこの変換に対してEPSGルールが定義されていない場合は、Oracle Spatial and Graphのデフォルトの変換が適用されます。

Spatial and Graphで使用されるEPSGデータセットのバージョン番号を返すには、SDO_CS.GET_EPSG_DATA_VERSIONファンクションを使用します。

6.5 3次元の座標参照系のサポート

Oracle Spatial and Graphの3次元座標参照系のサポートはEPSGモデルに準拠しています。

EPSGモデル(「EPSGモデルとSpatial and Graph」を参照)では、次の種類の座標参照系を使用できます。

  • 地理2D

  • 投影2D

  • 地理3D(地理2Dおよび楕円体高で構成され、経度、緯度および高さは同じ楕円体とデータに基づく)

  • 複合(地理2Dおよび重力に関係する高さで構成されるか、または投影2Dおよび重力に関係する高さで構成される)

したがって3次元の座標参照系は、楕円体高に基づく座標参照系(地理3D (「地理3D座標参照系」を参照))と、重力に関係する高さに基づく座標参照系(複合(「複合座標参照系」を参照))の2つに分類されます。

3次元での計算結果は2次元での計算結果より正確で、とりわけ変換連鎖の場合の精度は2次元より3次元の方が高くなります。たとえば、ソースおよびターゲットのCRSやジオメトリには関係なく、内部的なデータ変換は常に3つの次元で行われます。2次元ジオメトリが含まれる場合は、次の項目が1つ以上発生する可能性があります。

  1. 入力または出力ジオメトリおよびCRSが2次元の場合、内部的に行われる3次元の計算では、(指定されない)高さの入力値はデフォルトでゼロ(楕円体の上、CRSに依存)になります。このことは、高さが厳密にゼロであると意図されている場合を除き、変換が不正確になる潜在的な原因となっています。(高さの値はもともと使用できないか重要ではないため、データは2次元となる可能性があります。これは、高さが正確にゼロであるとわかっているために、データが2つの次元で表現されることとは異なります。)

  2. 高さの変換結果が内部的にはゼロ以外になる場合があります。ターゲットCRSが2次元の場合、高さの値を扱うことができないため、高さの値は切り捨てられ、さらに不正確な結果になります。

  3. さらに変換が続く場合は、高さの値が繰り返し切り捨てられることにより、結果はさらに不正確になります。不正確な高さの値を入力すると、高さの変換結果だけではなく経度および緯度の変換結果にも影響を与える可能性があることに注意してください。

ただし、ソースおよびターゲットCRSが3次元の場合は、高さの切り捨てが繰り返されることはありません。したがって、とりわけ変換連鎖の場合に、精度が高くなります。

Spatial and Graphでの3次元ジオメトリのサポートの概要は、「3次元の空間オブジェクト」を参照してください。

トピック:

6.5.1 地理3D座標参照系

地理3D座標参照系は、経度および緯度の他に楕円体高に基づきます。楕円体高とは、(実際の地球を近似的に表現した)参照する楕円体に関連する高さのことです。CRSの3つの次元はすべて同じ楕円体に基づいています。

楕円体高を使用することにより、数学的な規則性および効率性に優れた内部操作をSpatial and Graphで行うことが可能です。一方、複合座標参照系では、オフセット・マトリックスに基づいて、さらに複雑な変換が要求されることがよくあります。そのような一部のマトリックスは、ダウンロードして構成する必要があります。さらに、これらのマトリックスでは、ディスク上およびメイン・メモリー内で大きなフットプリントを使用する可能性もあります。

サポートされる地理3D座標参照系は、SDO_CRS_GEOGRAPHIC3Dビューに表示されます。

6.5.2 複合座標参照系

複合3次元座標参照系は、地理2Dまたは投影2Dに加えて重力に関係する高さに基づきます。 重力に関係する高さは、地球の重力の影響を受ける高さのことです。この場合、通常、基準となる高さ(ゼロ)は等ポテンシャル面であり、海面より上または下として定義されます。

重力には次に示すような不規則性があるため、重力に関係する高さの表現は楕円体高より複雑です。

  • 正標高

    正標高は、ジオイド上の高さとも呼ばれます。ジオイドは等ポテンシャル面で、正確ではありませんが、平均海水面とほぼ一致します。等ポテンシャル面は、各点が同じ重力ポテンシャル・レベルにある面です。地球は場所によって密度が異なるので、このような面には、多少のうねりが存在します。地球の密度の不規則性により、複数の等ポテンシャル面が存在し、相互に平行ではないことがあります。

  • 平均海水面、特定の場所における海抜、または複数の検潮所を適合させるためにゆがめられた垂直ネットワークに対する相対的な高さ(NGVD 29など)

    平均海水面はジオイドに近いですが、ジオイドと同一ではありません。ある特定地域の平均海水面の多くは、特定の港の平均海水面を基に定義されます。

サポートされる複合座標参照系は、SDO_CRS_COMPOUNDビュー(「SDO_CRS_COMPOUNDビュー」を参照)に表示されます。

水平CRSと垂直CRSを組み合せて、カスタマイズした複合座標参照系を作成できます。(水平CRSにはXおよびYまたは経度および緯度などの2つの次元が含まれ、垂直CRSにはZ、高さ、標高といった3番目の次元が含まれます。)複合CRSの作成方法は、「複合CRSの作成」を参照してください。

6.5.3 3次元の変換

Spatial and Graphでは、SDO_GEOMETRYオブジェクトの3次元座標変換が直接サポートされますが、点群およびTINは間接的にサポートされます。(たとえば、点群はSDO_GEOMETRY列を含む表に変換する必要があります。)サポートされる変換は次のとおりです。

  • 3次元データの変換

  • 楕円体高と重力に関係する高さとの間の変換

3次元データ変換の場合、2つの楕円体間のデータ変換は、2次元座標参照系の場合と基本的に同じで、3つ目の次元が無視されずに使用される点が異なります。高さの値が無視されないため、特に変換連鎖の場合に変換結果の精度が高くなります。

楕円体高と重力に関係する高さの間の変換の場合、等ポテンシャル面および他の重力に関係する面にはうねりがあることから、どのような楕円体と比較しても、相互に比較しても計算は複雑になります。変換は、高次多項式関数または共1次内挿法に基づいて行われることになります。いずれの場合も、変換の定義には大きなパラメータ・マトリックスが必要です。

重力に関係する高さと楕円体高の間で変換される場合、変換の手順には、通常、オフセット・マトリックスに基づくジオイド高と楕円体高の間の変換が含まれます。ソースまたはターゲットのオフセット・マトリックスの定義に従って、共通するデータ変換を後か前に追加する必要があります。

例6-2 3次元のデータ変換

例6-2に、3次元のデータ変換を示します。

set numwidth 9
 
CREATE TABLE source_geoms (
  mkt_id NUMBER PRIMARY KEY,
  name VARCHAR2(32),
  GEOMETRY SDO_GEOMETRY);
 
INSERT INTO source_geoms VALUES(
  1,
  'reference geom',
  SDO_GEOMETRY(
  3001,
  4985,
  SDO_POINT_TYPE(
     4.0,
    55.0,
    1.0),
  NULL,
  NULL));
 
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
  'source_geoms',
  'GEOMETRY',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
    SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
    SDO_DIM_ELEMENT('Height',   -1000,1000, 10)),
  4985);
 
commit;
 
--------------------------------------------------------------------------------
 
CALL SDO_CS.TRANSFORM_LAYER(
  'source_geoms',
  'GEOMETRY',
  'GEO_CS_4979',
  4979);
 
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
  'GEO_CS_4979',
  'GEOMETRY',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
    SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
    SDO_DIM_ELEMENT('Height',   -1000,1000, 10)),
  4979);
 
set lines 210;
 
--------------------------------------------------------------------------------
 
CALL SDO_CS.TRANSFORM_LAYER(
  'GEO_CS_4979',
  'GEOMETRY',
  'source_geoms2',
  4985);
 
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
  'source_geoms2',
  'GEOMETRY',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
    SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
    SDO_DIM_ELEMENT('Height',   -1000,1000, 10)),
  4985);
 
--------------------------------------------------------------------------------
 
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'GEO_CS_4979';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS2';
 
drop table GEO_CS_4979;
drop table source_geoms;
drop table source_geoms2;

例6-2の変換の結果、(4, 55, 1)は(4.0001539, 55.0000249, 4.218)に変換されます。

例6-3 ジオイド高と楕円体高の間の変換

例6-3では、ジオイド高と楕円体高の間の変換を、オフセット格子Hawaiiを使用して構成します。SDO_CS.CREATE_PREF_CONCATENATED_OPプロシージャを使用して先にルールを作成しないと、格子は使用できないことに注意してください。

-- Create Sample operation:
insert into mdsys.sdo_coord_ops (
  COORD_OP_ID,
  COORD_OP_NAME,
  COORD_OP_TYPE,
  SOURCE_SRID,
  TARGET_SRID,
  COORD_TFM_VERSION,
  COORD_OP_VARIANT,
  COORD_OP_METHOD_ID,
  UOM_ID_SOURCE_OFFSETS,
  UOM_ID_TARGET_OFFSETS,
  INFORMATION_SOURCE,
  DATA_SOURCE,
  SHOW_OPERATION,
  IS_LEGACY,
  LEGACY_CODE,
  REVERSE_OP,
  IS_IMPLEMENTED_FORWARD,
  IS_IMPLEMENTED_REVERSE)
values (
  1000000005,
  'Test Bi-linear Interpolation',
  'CONVERSION',
  null,
  null,
  null,
  null,
  9635,
  null,
  null,
  'Oracle',
  'Oracle',
  1,
  'FALSE',
  null,
  1,
  1,
  1);
 
--Create sample parameters, pointing to the offset file
--(in this case reusing values from an existing operation):
insert into mdsys.sdo_coord_op_param_vals (
    coord_op_id,
    COORD_OP_METHOD_ID,
    PARAMETER_ID,
    PARAMETER_VALUE,
    PARAM_VALUE_FILE_REF,
    PARAM_VALUE_FILE,
    PARAM_VALUE_XML,
    UOM_ID) (
  select
    1000000005,
    9635,
    8666,
    PARAMETER_VALUE,
    PARAM_VALUE_FILE_REF,
    PARAM_VALUE_FILE,
    PARAM_VALUE_XML,
    UOM_ID
  from
    mdsys.sdo_coord_op_param_vals
  where
    coord_op_id = 999998 and
    parameter_id = 8666);
 
--Create a rule to use this operation between SRIDs 7406 and 4359: 
call sdo_cs.create_pref_concatenated_op(
    300,
    'CONCATENATED OPERATION',
    TFM_PLAN(SDO_TFM_CHAIN(7406, 1000000005, 4359)),
    NULL);
 
 
-- Now, actually perform the transformation:
set numformat 999999.99999999
 
-- Create the source table
CREATE TABLE source_geoms (
  mkt_id NUMBER PRIMARY KEY,
  name VARCHAR2(32),
  GEOMETRY SDO_GEOMETRY);
 
INSERT INTO source_geoms VALUES(
  1,
  'reference geom',
  SDO_GEOMETRY(
  3001,
  7406,
  SDO_POINT_TYPE(
    -161,
      18,
     0),
  NULL,
  NULL));
 
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
  'source_geoms',
  'GEOMETRY',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
    SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
    SDO_DIM_ELEMENT('Height',    -100, 100, 10)),
  7406);
 
commit;
 
SELECT GEOMETRY "Source" FROM source_geoms;
 
--------------------------------------------------------------------------------
 
--Perform the transformation:
CALL SDO_CS.TRANSFORM_LAYER(
  'source_geoms',
  'GEOMETRY',
  'GEO_CS_4359',
  4359);
 
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
  'GEO_CS_4359',
  'GEOMETRY',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
    SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
    SDO_DIM_ELEMENT('Height',    -100, 100, 10)),
  4359);
 
set lines 210;
 
SELECT GEOMETRY "Target" FROM GEO_CS_4359;
 
--------------------------------------------------------------------------------
 
--Transform back:
CALL SDO_CS.TRANSFORM_LAYER(
  'GEO_CS_4359',
  'GEOMETRY',
  'source_geoms2',
  7406);
 
INSERT INTO USER_SDO_GEOM_METADATA VALUES (
  'source_geoms2',
  'GEOMETRY',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
    SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
    SDO_DIM_ELEMENT('Height',    -100, 100, 10)),
  7406);
 
SELECT GEOMETRY "Source2" FROM source_geoms2;
 
--------------------------------------------------------------------------------
 
--Clean up (regarding the transformation):
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'GEO_CS_4359';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS2';
 
drop table GEO_CS_4359;
drop table source_geoms;
drop table source_geoms2;
 
 
--Clean up (regarding the rule):
CALL sdo_cs.delete_op(300);
 
delete from mdsys.sdo_coord_op_param_vals where coord_op_id = 1000000005;
 
delete from mdsys.sdo_coord_ops where coord_op_id = 1000000005;
 
COMMIT;

例6-3の構成を使用すると、変換結果は次のようになります。

  • ルールを使用しない場合、データ変換のみに基づいて、(-161.00000000, 18.00000000, .00000000)が(-161.00127699, 18.00043360, 62.03196364)に変換されます。

  • ルールを使用する場合は、(-161.00000000, 18.00000000, .0000000)が(-161.00000000, 18.00000000, 6.33070000)に変換されます。

6.5.4 異なる次元間の変換

2次元ジオメトリから3次元ジオメトリへなど、異なる次元間の変換は、SDO_CS.TRANSFORMファンクションまたはSDO_CS.TRANSFORM_LAYERプロシージャを使用して直接行うことはできません。ただし、SDO_CS.MAKE_3Dファンクションを使用して2次元ジオメトリを3次元ジオメトリに変換したり、SDO_CS.MAKE_2Dファンクションを使用して3次元ジオメトリを2次元ジオメトリに変換することができます。また、変換されたジオメトリを使用して、目的の次元数のジオメトリに変換することができます。

たとえば、2次元ジオメトリを3次元ジオメトリに変換するには、SDO_CS.MAKE_3Dファンクションを使用します。このファンクション自体は座標変換を行わず、単に高さの値を追加し、ターゲットSRIDの設定のみを行います。ターゲットSRIDは適切なものを選択する必要があり、ソースSRIDと等価の3次元の値にする必要があります。たとえば、3次元のWGS 84 (4327)は、2次元のWGS 84 (4326)に相当します。必要に応じて、戻されたジオメトリに含まれる頂点の高さの値を変更します。

SDO_CS.MAKE_3Dファンクションの使用方法には多数の選択肢がありますが、次の方法が最も簡単です。

  1. 2次元のソースSRIDを、2次元のWGS 84 (4326)に変換します。

  2. SDO_CS.MAKE_3Dをコールしてジオメトリを3次元のWGS 84 (4327)に変換します。

  3. 3次元のWGS 84 (4327)を、3次元のターゲットSRIDに変換します。

例6-4では、SRIDが27700の2次元の点を2次元のSRID 4326に変換し、変換結果をSRIDが4327の3次元の点に変換し、変換された点を3次元のSRID 4327に変換します。

例6-4 異なる次元間の変換

SELECT
  SDO_CS.TRANSFORM(
    SDO_CS.MAKE_3D(
      SDO_CS.TRANSFORM(
        SDO_GEOMETRY(
          2001,
          27700,
          SDO_POINT_TYPE(577274.984, 69740.4923, NULL),
          NULL,
          NULL),
        4326),
      height => 0,
      target_srid => 4327),
    4327) "27700 > 4326 > 4327 > 4327"
FROM DUAL;
 
27700 > 4326 > 4327 > 4327(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INF
--------------------------------------------------------------------------------
SDO_GEOMETRY(3001, 4327, SDO_POINT_TYPE(.498364058, 50.5006366, 0), NULL, NULL)

6.5.5 WGS 84に相当する3D

WGS 84座標系に相当する3Dは何か(WGS 84座標系とは2D Oracle SRID 8308またはEPSG SRID 4326)の質問に対する回答には、次の2つが考えられます。

  • 4979 (多くの場合またはほとんどの場合)、または

  • (地表面より上、海面より上または下など)高さをどうとらえるかによって異なります。

多くの異なる高さ基準があります。高さは次の基準に関連付けることができます。

  • 楕円体(SRID値4327、43229および4979がOracle Spatial and Graphで事前定義されるGEOGRAPHIC3dという座標系の種類を使用する必要があります)。

  • 非楕円体高基準(通常、カスタムSRIDを定義する必要があるCOMPOUNDという座標系の種類を使用する必要があります)。非楕円体高は、ジオイド、一部の局所的な海面や平均海水面(または局所的な海面網)、または高さの他の定義(地表面より上など)と関連させて指定できます。

2次元のWGS 84座標系に基づいて複合座標系(「複合座標参照系」を参照)を定義するには、最初に事前定義またはカスタムの垂直座標参照系(「垂直CRSの作成」を参照)を選択する必要があります。使用可能な垂直座標参照系を検索するには、次の文を入力します。

SELECT srid, COORD_REF_SYS_NAME from sdo_coord_ref_sys 
  WHERE COORD_REF_SYS_KIND = 'VERTICAL' order by srid;
 
      SRID COORD_REF_SYS_NAME
---------- ---------------------------------------------------------------------
      3855 EGM2008 geoid height
      3886 Fao 1979 height
      4440 NZVD2009 height
      4458 Dunedin-Bluff 1960 height
      5600 NGPF height
      5601 IGN 1966 height
      5602 Moorea SAU 1981 height
      . . .
      5795 Guadeloupe 1951 height
      5796 Lagos 1955 height
      5797 AIOC95 height
      5798 EGM84 geoid height
      5799 DVR90 height
 
123 rows selected.

垂直座標参照系を選択してから、次の形式で文を入力して複合SRIDを作成します。

INSERT INTO sdo_coord_ref_system (
  SRID,
  COORD_REF_SYS_NAME,
  COORD_REF_SYS_KIND,
  COORD_SYS_ID,
  DATUM_ID,
  GEOG_CRS_DATUM_ID,
  SOURCE_GEOG_SRID,
  PROJECTION_CONV_ID,
  CMPD_HORIZ_SRID,
  CMPD_VERT_SRID,
  INFORMATION_SOURCE,
  DATA_SOURCE,
  IS_LEGACY,
  LEGACY_CODE,
  LEGACY_WKTEXT,
  LEGACY_CS_BOUNDS,
  IS_VALID,
  SUPPORTS_SDO_GEOMETRY)
values (
  custom-SRID,
  'custom-name',
  'COMPOUND',
  NULL,
  NULL,
  6326,
  NULL,
  NULL,
  4326,
  vertical-SRID,
  'custom-information-source',
  'custom-data-source',
  'FALSE',
  NULL,
  NULL,
  NULL,
  'TRUE',
  'TRUE');

次の形式で文を入力することによって、生成されたWKTに基づいて定義を確認することができます。

SELECT wktext3d FROM cs_srs WHERE srid = custom-SRID;
 
WKTEXT3D
------------------------------------------------------------------------------
COMPD_CS[
  "NTF (Paris) + NGF IGN69",
  GEOGCS["NTF (Paris)",
    DATUM["Nouvelle Triangulation Francaise (Paris)",
      SPHEROID[
        "Clarke 1880 (IGN)",
        6378249.2,
        293.4660212936293951,
        AUTHORITY["EPSG", "7011"]],
      TOWGS84[-168.0, -60.0, 320.0, 0.0, 0.0, 0.0, 0.0],
      AUTHORITY["EPSG", "6807"]],
    PRIMEM["Paris", 2.337229, AUTHORITY["EPSG","8903"]],
    UNIT["grad", 0.015707963267949, AUTHORITY["EPSG", "9105"]],
    AXIS["Lat", NORTH],
    AXIS["Long", EAST],
    AUTHORITY["EPSG", "4807"]],
  VERT_CS["NGF IGN69",
    VERT_DATUM["Nivellement general de la France - IGN69", 2005,
      AUTHORITY["EPSG", "5119"]],
    UNIT["metre", 1.0, AUTHORITY["EPSG", "9001"]],
    AXIS["H", UP],
    AUTHORITY["EPSG", "5720"]],
  AUTHORITY["EPSG","7400"]]

異なる高さ基準間で変換する場合は、VERTCONマトリックスを使用できます。たとえば、WGS 84楕円体とジオイドの間では、高さの変換を可能にするオフセット・マトリックスがあります。詳細は、次を参照してください。

6.6 TFM_PLANオブジェクト型

オブジェクト型TFM_PLANは、SDO_CSパッケージのいくつかのサブプログラムで変換計画を指定する際に使用します。

たとえば、2つの操作をTFM_PLAN型のパラメータで指定し、それらの操作で構成される連結操作を作成するには、SDO_CS.CREATE_CONCATENATED_OPプロシージャを使用します。

Oracle Spatial and Graphでは、TFM_PLANオブジェクト型を次のとおり定義します。

CREATE TYPE tfm_plan AS OBJECT (
 THE_PLAN SDO_TFM_CHAIN); 

SDO_TFM_CHAIN型は、VARRAY(1048576) OF NUMBERとして定義されます。

SDO_TFM_CHAIN配列の要素の意味は、次のとおりです。

  • 最初の要素は、ソース座標系のSRIDを示します。

  • 最初の要素に続くそれぞれの要素ペアは、操作IDとターゲット座標系のSRIDを示します。

6.7 座標系のデータ構造

座標系ファンクションおよびプロシージャは、Oracle Spatial and Graphで提供される表とビューの情報を使用します。この表とビューはMDSYSスキーマの一部ですが、パブリック・シノニムが定義されているため、表およびビューの名前の前にMDSYS.を指定する必要はありません。

この表とビューの定義およびデータは、EPSGのデータ・モデルとデータセットに基づいています(「EPSGモデルとSpatial and Graph」を参照)。

座標系の表は、いくつかの一般的なカテゴリに分類されます。

  • 座標系の一般的な情報: SDO_COORD_SYS、SDO_COORD_REF_SYS

  • 座標系定義の要素または様相: SDO_DATUMS、SDO_ELLIPSOIDS、SDO_PRIME_MERIDIANS

  • データ変換のサポート: SDO_COORD_OPS、SDO_COORD_OP_METHODS、SDO_COORD_OP_PARAM_USE、SDO_COORD_OP_PARAM_VALS、SDO_COORD_OP_PARAMS、SDO_COORD_OP_PATHS、SDO_PREFERRED_OPS_SYSTEM、SDO_PREFERRED_OPS_USER

  • 座標系定義に関連する他の項目: SDO_COORD_AXES、SDO_COORD_AXIS_NAMES、SDO_UNITS_OF_MEASURE

座標系の表と同じビューまたはサブセットのビューがいくつか提供されています。

  • SDO_COORD_REF_SYSTEM: このビューには、SDO_COORD_REF_SYS表と同じ列が含まれています。挿入、更新、削除の操作を行う場合は、COORD_REF_SYS表ではなく、SDO_COORD_REF_SYSTEMビューを使用してください。

  • SDO_DATUMSのサブセット(DATUM_TYPE列の値を基に選択): SDO_DATUM_ENGINEERING、SDO_DATUM_GEODETIC、SDO_DATUM_VERTICAL。

  • SDO_COORD_REF_SYSのサブセット(COORD_REF_SYS_KIND列の値を基に選択): SDO_CRS_COMPOUND、SDO_CRS_ENGINEERING、SDO_CRS_GEOCENTRIC、SDO_CRS_GEOGRAPHIC2D、SDO_CRS_GEOGRAPHIC3D、SDO_CRS_PROJECTED、SDO_CRS_VERTICAL。

この項の残りの大半を使用して、これらの表とビューをアルファベット順に説明します。(列の説明の多くは、EPSGの説明の翻案または転載です。)「座標系の表とビューとの関係」では表とビューの関係を説明し、EPSGの表名とそれらの表に対応するOracle Spatial and Graphの名前を示します。「EPSGベースの座標系に関する情報の検索」では、EPSGベースの座標系に関する情報の検索方法を説明し、いくつかの例を紹介します。

Spatial and Graphでは、この項の表とビューの他に、レガシー表もいくつか提供しています(その表の定義とデータは、以前のリリースで使用されていた特定のSpatial and Graphシステム表と対応しています)。レガシー表の説明は、「レガシー表およびビュー」を参照してください。

注意:

座標系のサポートに使用されるすべての表およびビューでは、Oracleが提供するどのような情報も変更または削除しないでください。

ユーザー定義の座標系を作成する場合は、「ユーザー定義の座標参照系の作成」を参照してください。

トピック:

6.7.1 SDO_COORD_AXES表

SDO_COORD_AXES表には、座標系の軸の定義ごとに1つの行が含まれます。この表に含まれる列を、表6-1に示します。

表6-1 SDO_COORD_AXES表

列名 データ型 説明

COORD_SYS_ID

NUMBER(10)

この軸が適用される座標系のID番号です。

COORD_AXIS_NAME_ID

NUMBER(10)

座標系の軸名のID番号です。SDO_COORD_AXIS_NAMES表(「SDO_COORD_AXIS_NAMES表」を参照)のCOORD_AXIS_NAME_ID列の値と一致します。例: 9901 (Geodetic latitudeの場合)

COORD_AXIS_ORIENTATION

VARCHAR2(24)

座標系軸の方位の向きです。例: east

COORD_AXIS_ABBREVIATION

VARCHAR2(24)

座標系軸の方位の略称です。例: E

UOM_ID

NUMBER(10)

軸に関連付けられている測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。

ORDER

NUMBER(5)

座標系内のこの軸の位置です(1、2または3)。

6.7.2 SDO_COORD_AXIS_NAMES表

SDO_COORD_AXIS_NAMES表には、座標系の定義で使用可能な軸ごとに1つの行が含まれます。この表に含まれる列を、表6-2に示します。

表6-2 SDO_COORD_AXIS_NAMES表

列名 データ型 説明

COORD_AXIS_NAME_ID

NUMBER(10)

座標軸の名前のID番号です。例: 9926

COORD_AXIS_NAME

VARCHAR2(80)

座標軸の名前です。例: Spherical latitude

6.7.3 SDO_COORD_OP_METHODS表

SDO_COORD_OP_METHODS表には、座標系の変換メソッドごとに1つの行が含まれます。この表に含まれる列を、表6-3に示します。

表6-3 SDO_COORD_OP_METHODS表

列名 データ型 説明

COORD_OP_METHOD_ID

NUMBER(10)

座標系の変換メソッドのID番号です。例: 9613

COORD_OP_METHOD_NAME

VARCHAR2(50)

メソッドの名前です。例: NADCON

LEGACY_NAME

VARCHAR2(50)

レガシーWKT文字列でのこの変換メソッドの名前です。この名前は、EPSGで使用される名前と構文が異なる場合があります。

REVERSE_OP

NUMBER(1)

各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現できる場合は1、逆変換を行うために別の操作を定義する必要がある場合は0です。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: US Coast and geodetic Survey - http://www.ngs.noaa.gov

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

IS_IMPLEMENTED_FORWARD

NUMBER(1)

順方向操作が実行される場合は1、実行されない場合は0です。

IS_IMPLEMENTED_REVERSE

NUMBER(1)

逆方向操作が実行される場合は1、実行されない場合は0です。

6.7.4 SDO_COORD_OP_PARAM_USE表

SDO_COORD_OP_PARAM_USE表には、使用可能な変換メソッドと変換操作パラメータの組合せごとに1つの行が含まれます。この表に含まれる列を、表6-4に示します。

表6-4 SDO_COORD_OP_PARAM_USE表

列名 データ型 説明

COORD_OP_METHOD_ID

NUMBER(10)

座標系の変換メソッドのID番号です。COORD_OP_METHODS表(「SDO_COORD_OP_METHODS表」を参照)のCOORD_OP_METHOD_ID列の値と一致します。

PARAMETER_ID

NUMBER(10)

変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(「SDO_COORD_OP_PARAMS表」を参照)のPARAMETER_ID列の値と一致します。

LEGACY_PARAM_NAME

VARCHAR2(80)

パラメータのOpen GeoSpatial Consortium (OGC)名です。

SORT_ORDER

NUMBER(5)

このメソッドにおける一連のパラメータのうち、このパラメータの位置を示す番号です。例: 2 (2番目のパラメータの場合)

PARAM_SIGN_REVERSAL

VARCHAR2(3)

各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現できる場合はYes、逆変換を行うには別の操作を定義する必要がある場合はNoです。

6.7.5 SDO_COORD_OP_PARAM_VALS表

SDO_COORD_OP_PARAM_VALS表には、座標系の各変換メソッドのパラメータ値に関する情報が含まれます。この表に含まれる列を、表6-5に示します。

表6-5 SDO_COORD_OP_PARAM_VALS表

列名 データ型 説明

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。SDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID列の値と一致します。

COORD_OP_METHOD_ID

NUMBER(10)

座標操作メソッドのIDです。この値は、SDO_COORD_OP_METHODS表(「SDO_COORD_OP_METHODS表」を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。

PARAMETER_ID

NUMBER(10)

変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(「SDO_COORD_OP_PARAMS表」を参照)のPARAMETER_ID列の値と一致します。

PARAMETER_VALUE

FLOAT(49)

この操作のパラメータの値です。

PARAM_VALUE_FILE_REF

VARCHAR2(254)

値のデータが含まれている(元のEPSGデータベースに指定された)ファイルの名前です(パラメータ値が1つでは不十分な場合)。

PARAM_VALUE_FILE

CLOB

PARAM_VALUE_FILE_REF列で指定されたASCII形式のファイルの内容です。格子ファイルのパラメータ(NADCON、NTv2および高さの変換(Geographic3DからGeographic2D+GravityRelatedHeight))にのみ使用されます。

PARAM_VALUE_XML

XMLTYPE

PARAM_VALUE_FILE_REF列で指定されたファイルの内容のXML表現です。(オプション、現在はドキュメントにのみ使用。)

UOM_ID

NUMBER(10)

操作に関連付けられている測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。

6.7.6 SDO_COORD_OP_PARAMS表

SDO_COORD_OP_PARAMS表には、変換操作で使用可能なパラメータごとに1つの行が含まれます。この表に含まれる列を、表6-6に示します。

表6-6 SDO_COORD_OP_PARAMS表

列名 データ型 説明

PARAMETER_ID

NUMBER(10)

パラメータのID番号です。例: 8608

PARAMETER_NAME

VARCHAR2(80)

操作の名前。例: X-axis rotation

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: EPSG guidance note number 7

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

6.7.7 SDO_COORD_OP_PATHS表

SDO_COORD_OP_PATHS表には、連結操作の最小単位の手順ごとに1つの行が含まれます。この表に含まれる列を、表6-7に示します。

表6-7 SDO_COORD_OP_PATHS表

列名 データ型 説明

CONCAT_OPERATION_ID

NUMBER(10)

連結操作のID番号です。この値は、COORD_OP_TYPE値がCONCATENATIONであるSDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID値と一致する必要があります。

SINGLE_OPERATION_ID

NUMBER(10)

連結操作内のこの手順(最小単位の操作)に対応する1つの座標操作のID番号です。この値は、SDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID値と一致する必要があります。

SINGLE_OP_SOURCE_ID

NUMBER(10)

この手順の1つの座標操作に対するソースの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID値と一致する必要があります。

SINGLE_OP_TARGET_ID

NUMBER(10)

この手順の1つの座標操作に対するターゲットの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID値と一致する必要があります。

OP_PATH_STEP

NUMBER(5)

この連結操作内のこの手順(最小単位の操作)の順序番号です。

6.7.8 SDO_COORD_OPS表

SDO_COORD_OPS表には、座標系間の変換操作ごとに1つの行が含まれます。この表に含まれる列を、表6-8に示します。

表6-8 SDO_COORD_OPS表

列名 データ型 説明

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。例: 101

COORD_OP_NAME

VARCHAR2(80)

操作の名前。例: ED50 to WGS 84 (14)

COORD_OP_TYPE

VARCHAR2(24)

操作のタイプ。CONCATENATED OPERATIONCONVERSIONTRANSFORMATIONのいずれかです。

SOURCE_SRID

NUMBER(10)

変換を実行する際の変換元の座標系のSRIDです。例: 4230

TARGET_SRID

NUMBER(10)

変換を実行する際の変換先の座標系のSRIDです。例: 4326

COORD_TFM_VERSION

VARCHAR2(24)

EPSGによって座標変換に割り当てられた名前です。例: 5Nat-NSea90

COORD_OP_VARIANT

NUMBER(5)

COORD_OP_METHOD_IDに指定されている一般的なメソッドの変数です。例: 14

COORD_OP_METHOD_ID

NUMBER(10)

座標操作メソッドのIDです。この値は、SDO_COORD_OP_METHODS表(「SDO_COORD_OP_METHODS表」を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。1つのメソッドを複数の操作で使用できます。例: 9617

UOM_ID_SOURCE_OFFSETS

NUMBER(10)

ソース座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。

UOM_ID_TARGET_OFFSETS

NUMBER(10)

ターゲット座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: Institut de Geomatica; Barcelona

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

SHOW_OPERATION

NUMBER(3)

(現在は使用されていません。)

IS_LEGACY

VARCHAR2(5)

操作が、リリース2 (10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2 (10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSG座標変換操作と同じ意味を持つレガシー操作が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー座標変換操作のCOORD_OP_ID値です。

REVERSE_OP

NUMBER(1)

各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現可能と定義されている場合は1、逆変換を行うには別の操作を定義する必要がある場合は0です。REVERSE_OPが1の場合、実際に実行される操作は、IS_IMPLEMENTED_FORWARDとIS_IMPLEMENTED_REVERSEの値で示されます。

IS_IMPLEMENTED_FORWARD

NUMBER(1)

順方向操作が実行される場合は1、実行されない場合は0です。

IS_IMPLEMENTED_REVERSE

NUMBER(1)

逆方向操作が実行される場合は1、実行されない場合は0です。

6.7.9 SDO_COORD_REF_SYS表

SDO_COORD_REF_SYS表には、座標参照系ごとに1つの行が含まれます。この表に含まれる列を、表6-9に示します。(SDO_COORD_REF_SYS表は、EPSG座標参照系の表を基にしています。)

注意:

挿入、更新、削除の各操作を実行する場合は、SDO_COORD_REF_SYSTEMビューで実行する必要があり、このビューには、SDO_COORD_REF_SYS表と同じ列が含まれています。SDO_COORD_REF_SYSTEMビューの説明は、「SDO_COORD_REF_SYSTEMビュー」を参照してください。

表6-9 SDO_COORD_REF_SYS表

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。例: 8307

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。例: Longitude / Latitude (WGS 84)

COORD_REF_SYS_KIND

VARCHAR2(24)

座標系のカテゴリです。例: GEOGRAPHIC2D

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。投影座標系の場合はNULLです。測地座標系の場合は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_ID値と一致する必要があります。例: 10115

GEOG_CRS_DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。投影座標系の場合は、その投影座標系の基になっている測地座標系のDATUM_ID値(「SDO_DATUMS表」のSDO_DATUMS表を参照)と一致する必要があります。測地座標系の場合は、DATUM_ID値と一致する必要があります。例: 10115

SOURCE_GEOG_SRID

NUMBER(10)

投影座標系の場合は、関連付けられている測地座標系のID番号です。

PROJECTION_CONV_ID

NUMBER(10)

投影座標参照系の場合は、その投影座標系とソース地理座標系との間の変換に使用する変換操作のCOORD_OP_ID値です。

CMPD_HORIZ_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatial and Graphでは使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。)

CMPD_VERT_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatial and Graphでは使用しません。EPSGの説明は、「複合CRSの垂直要素のコード(複合CRSの場合のみ)」です。)

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

IS_LEGACY

VARCHAR2(5)

座標系定義が、リリース2 (10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2 (10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSG座標参照系と同じ意味を持つレガシー座標系が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー座標系のSRID値です。

LEGACY_WKTEXT

VARCHAR2(2046)

IS_LEGACYがTRUEの場合は、座標系に関する説明が含まれます。例: GEOGCS [ "Longitude / Latitude (WGS 84)", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137, 298.257223563]], PRIMEM [ "Greenwich", 0.000000 ], UNIT ["Decimal Degree", 0.01745329251994330]]

LEGACY_CS_BOUNDS

SDO_GEOMETRY

レガシー座標系の場合は、次元境界です(存在する場合)。

IS_VALID

VARCHAR2(5)

座標参照系のEPSGレコードの定義が完全な場合はTRUE、完全でない場合はFALSEです。

SUPPORTS_SDO_GEOMETRY

VARCHAR2(5)

COORD_REF_SYS_KIND列にENGINEERINGGEOGRAPHIC2DまたはPROJECTED CRSが含まれる場合はTRUE、他の値が含まれる場合はFALSEです。

COORD_REF_SYS_KIND列の値に基づいて定義される次のビューも参照してください。

6.7.10 SDO_COORD_REF_SYSTEMビュー

SDO_COORD_REF_SYSTEMビューには、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)と同じ列が含まれています。ただし、SDO_COORD_REF_SYSTEMビューには、トリガーが定義されており、このビューに対して挿入、更新または削除操作が実行されると、関連するすべてのSpatial and Graphシステム表に対して、適切な操作が実行されます。

したがって、挿入、更新または削除操作を実行する場合は、SDO_COORD_REF_SYS表に対してではなく、SDO_COORD_REF_SYSTEMビューに対して実行する必要があります

6.7.11 SDO_COORD_SYS表

SDO_COORD_SYS表には、座標系に関する情報を持つ行が含まれます。この表に含まれる列を、表6-10に示します。(SDO_COORD_SYS表は、EPSG座標参照系の表を基にしています。EPSG座標参照系の表では、座標系が「再利用可能な軸のペア」と表現されています。)

表6-10 SDO_COORD_SYS表

列名 データ型 説明

COORD_SYS_ID

NUMBER(10)

座標系のID番号です。例: 6405

COORD_SYS_NAME

VARCHAR2(254)

座標系の名前です。例: Ellipsoidal 2D CS. Axes: latitude, longitude. Orientations: north, east. UoM: dec deg

COORD_SYS_TYPE

VARCHAR2(24)

座標系の種類です。例: ellipsoidal

DIMENSION

NUMBER(5)

座標系によって表現される次元の数です。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。

DATA_SOURCE

VARCHAR2(50)

このレコードのデータを提供している組織です。

6.7.12 SDO_CRS_COMPOUNDビュー

SDO_CRS_COMPOUNDビューに含まれている情報は、COORD_REF_SYS_KIND列の値がCOMPOUNDのSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の情報です。(複合座標参照系については、「複合座標参照系」を参照してください。)このビューに含まれる列を、表6-11に示します。

表6-11 SDO_CRS_COMPOUNDビュー

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

CMPD_HORIZ_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatial and Graphでは使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。)

CMPD_VERT_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatial and Graphでは使用しません。EPSGの説明は、「複合CRSの垂直要素のコード(複合CRSの場合のみ)」です。)

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.13 SDO_CRS_ENGINEERINGビュー

SDO_CRS_ENGINEERINGビューに含まれている情報は、COORD_REF_SYS_KIND列の値がENGINEERINGのSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表6-12に示します。

表6-12 SDO_CRS_ENGINEERINGビュー

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.14 SDO_CRS_GEOCENTRICビュー

SDO_CRS_GEOCENTRICビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOCENTRICのSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表6-13に示します。

表6-13 SDO_CRS_GEOCENTRICビュー

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.15 SDO_CRS_GEOGRAPHIC2Dビュー

SDO_CRS_GEOGRAPHIC2Dビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOGRAPHIC2DのSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表6-14に示します。

表6-14 SDO_CRS_GEOGRAPHIC2Dビュー

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.16 SDO_CRS_GEOGRAPHIC3Dビュー

SDO_CRS_GEOGRAPHIC3Dビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOGRAPHIC3DのSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の情報です。(地理3D座標参照系については、「地理3D座標参照系」を参照してください。)このビューに含まれる列を、表6-15に示します。

表6-15 SDO_CRS_GEOGRAPHIC3Dビュー

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.17 SDO_CRS_PROJECTEDビュー

SDO_CRS_PROJECTEDビューに含まれている情報は、COORD_REF_SYS_KIND列の値がPROJECTEDのSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表6-16に示します。

表6-16 SDO_CRS_PROJECTEDビュー

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

SOURCE_GEOG_SRID

NUMBER(10)

関連付けられている測地座標系のID番号です。

PROJECTION_CONV_ID

NUMBER(10)

投影座標系とソース測地座標系との間の変換に使用する変換操作のCOORD_OP_ID値です。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.18 SDO_CRS_VERTICALビュー

SDO_CRS_VERTICALビューに含まれている情報は、COORD_REF_SYS_KIND列の値がVERTICALのSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表6-17に示します。

表6-17 SDO_CRS_VERTICALビュー

列名 データ型 説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.19 SDO_DATUM_ENGINEERINGビュー

SDO_DATUM_ENGINEERINGビューに含まれている情報は、DATUM_TYPE列の値がENGINEERINGのSDO_DATUMS表(「SDO_DATUMS表」を参照)の情報です。このビューに含まれる列を、表6-18に示します。

表6-18 SDO_DATUM_ENGINEERINGビュー

列名 データ型 説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

6.7.20 SDO_DATUM_GEODETICビュー

SDO_DATUM_GEODETICビューに含まれている情報は、DATUM_TYPE列の値がGEODETICのSDO_DATUMS表(「SDO_DATUMS表」を参照)の情報です。このビューに含まれる列を、表6-19に示します。

表6-19 SDO_DATUM_GEODETICビュー

列名 データ型 説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

6.7.21 SDO_DATUM_VERTICALビュー

SDO_DATUM_VERTICALビューに含まれている情報は、DATUM_TYPE列の値がVERTICALのSDO_DATUMS表(「SDO_DATUMS表」を参照)の情報です。このビューに含まれる列を、表6-20に示します。

表6-20 SDO_DATUM_VERTICALビュー

列名 データ型 説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

6.7.22 SDO_DATUMS表

SDO_DATUMS表には、データごとに1つの行が含まれます。この表に含まれる列を、表6-21に示します。

表6-21 SDO_DATUMS表

列名 データ型 説明

DATUM_ID

NUMBER(10)

データのID番号です。例: 10115

DATUM_NAME

VARCHAR2(80)

データ名です。例: WGS 84

DATUM_TYPE

VARCHAR2(24)

データの種類です。例: GEODETIC

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。例: EPSG

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

IS_LEGACY

VARCHAR2(5)

座標系定義が、リリース2 (10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2 (10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSGデータと同じ意味を持つレガシー・データが(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー・データのDATUM_ID値です。

DATUM_TYPE列の値に基づいて定義されるビューのSDO_DATUM_ENGINEERING(「SDO_DATUM_ENGINEERINGビュー」)、SDO_DATUM_GEODETIC(「SDO_DATUM_GEODETICビュー」)およびSDO_DATUM_VERTICAL(「SDO_DATUM_VERTICALビュー」)も参照してください。

6.7.23 SDO_ELLIPSOIDS表

SDO_ELLIPSOIDS表には、楕円体ごとに1つの行が含まれます。この表に含まれる列を、表6-22に示します。

表6-22 SDO_ELLIPSOIDS表

列名 データ型 説明

ELLIPSOID_ID

NUMBER

楕円体(球体)のID番号です。例: 8045

ELLIPSOID_NAME

VARCHAR2(80)

楕円体の名前です。例: WGS 84

SEMI_MAJOR_AXIS

NUMBER

半長径(楕円体の長軸の半分)に沿った半径(m)です。

UOM_ID

NUMBER

楕円体の測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。例: 9001

INV_FLATTENING

NUMBER

楕円体の逆フラット化です。つまり、1/f (f = (a-b)/aaは半長径、bは半短径)です。

SEMI_MINOR_AXIS

NUMBER

半短軸(楕円体の短軸の半分)に沿った半径(m)です。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: Kort og Matrikelstyrelsen (KMS), Copenhagen.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。例: EPSG

IS_LEGACY

VARCHAR2(5)

楕円体が、リリース2 (10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2 (10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER

EPSG楕円体と同じ意味を持つレガシー楕円体が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー楕円体のELLIPSOID_ID値です。

6.7.24 SDO_PREFERRED_OPS_SYSTEM表

SDO_PREFERRED_OPS_SYSTEM表には、ソースおよびターゲットSRIDの組合せに対するユーザー定義のデフォルトの優先座標変換操作の指定ごとに、行が1つ含まれます。SDO_PREFERRED_OPS_SYSTEM表に行を挿入すると、指定したソースおよびターゲット座標系間で行われるOracleのデフォルトの変換操作が無効になります。SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャを使用すると、複数の行がこの表に挿入されます。use_caseパラメータにNULLを指定してSDO_CS.DELETE_ALL_EPSG_RULESプロシージャを使用すると、この表のすべての行が削除されます。この表に含まれる列を、表6-23に示します。

表6-23 SDO_PREFERRED_OPS_SYSTEM表

列名 データ型 説明

SOURCE_SRID

NUMBER(10)

座標変換を実行する際の変換元の座標系(空間参照システム)のID番号です。指定したターゲットSRIDへの変換には、COORD_OP_IDで指定するデフォルトの優先変換メソッドが使用されます。

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。SDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID列の値と一致します。

TARGET_SRID

NUMBER(10)

座標変換を実行する際の変換先の座標系(空間参照システム)のID番号です。この変換では、COORD_OP_IDで指定する操作が使用されます。

6.7.25 SDO_PREFERRED_OPS_USER表

SDO_PREFERRED_OPS_USER表には、ユーザーが定義するソースとターゲットのSRIDおよび座標変換操作の指定ごとに、1つの行が含まれます。SDO_PREFERRED_OPS_USER表に行を挿入すると、ソースおよびターゲット座標系間のカスタム変換を作成できます。また、変換操作の名前(USE_CASE列の値)を指定して、様々なSDO_CSファンクションやプロシージャのuse_caseパラメータとして使用することもできます。SDO_CS.DELETE_ALL_EPSG_RULESプロシージャでユースケースを指定すると、そのユースケースに関連付けられている行がこの表から削除されます。この表に含まれる列を、表6-24に示します。

表6-24 SDO_PREFERRED_OPS_USER表

列名 データ型 説明

USE_CASE

VARCHAR2(32)

ソースとターゲットのSRIDおよび座標変換操作を規定するこの仕様の名前です。

SOURCE_SRID

NUMBER(10)

変換を実行する際の変換元の座標系(空間参照システム)のID番号です。

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。SDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID列の値と一致します。

TARGET_SRID

NUMBER(10)

変換を実行する際の変換先の座標系(空間参照システム)のID番号です。

6.7.26 SDO_PRIME_MERIDIANS表

SDO_PRIME_MERIDIANS表には、データ指定で使用可能な本初子午線ごとに1つの行が含まれます。この表に含まれる列を、表6-25に示します。

表6-25 SDO_PRIME_MERIDIANS表

列名 データ型 説明

PRIME_MERIDIAN_ID

NUMBER(10)

本初子午線のID番号です。例: 8907

PRIME_MERIDIAN_NAME

VARCHAR2(80)

本初子午線の名前です。例: Bern

GREENWICH_LONGITUDE

FLOAT(49)

本初子午線の経度(グリニッジ子午線からのオフセット)です。例: 7.26225

UOM_ID

NUMBER(10)

本初子午線の測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。例: 9110 (60進法の度の場合)

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: Bundesamt fur Landestopographie

DATA_SOURCE

VARCHAR2(254)

このレコードのデータを提供した組織です(Oracle以外の場合)。例: EPSG

6.7.27 SDO_UNITS_OF_MEASURE表

SDO_UNITS_OF_MEASURE表には、測定単位ごとに1つの行が含まれます。この表に含まれる列を、表6-26に示します。

表6-26 SDO_UNITS_OF_MEASURE表

列名 データ型 説明

UOM_ID

NUMBER(10)

測定単位のID番号です。例: 10032

UNIT_OF_MEAS_NAME

VARCHAR2(2083)

測定単位の名前で、URLまたはURIを指定することもできます。例: Meter

SHORT_NAME

VARCHAR2(80)

測定単位の短縮名です(短縮名がある場合)。例: METER

UNIT_OF_MEAS_TYPE

VARCHAR2(50)

単位が使用される測定の種類です。角度単位(angle)、面積単位(area)、距離単位(length)、スケール単位(scale)または容積単位(volume)です。

TARGET_UOM_ID

NUMBER(10)

ターゲットの測定単位のID番号です。EPSG測定単位表のTARGET_UOM_CODE列と対応しています。この列は、「式(POSC)を使用して現在のUOMを変換可能な、種類が同じ他のUOM。EPSGで提供する測定単位では、POSCファクタのAおよびDは必ずゼロに等しい」と説明されています。

FACTOR_B

NUMBER

EPSG測定単位表のFACTOR_B列と対応しています。この列は、「ターゲットUOM(y)の量は、y = (B/C).xの変換により、現在のUOM(x)の量から得られる」と説明されています。

ユーザー定義の測定単位の場合、FACTOR_Bは通常、平方mの数値またはmの数値のうち単位が等しい方の数値です。ユーザー定義の単位の詳細は、「ユーザー定義の測定単位の作成」を参照してください。

FACTOR_C

NUMBER

EPSG測定単位表のFACTOR_C列と対応しています。

ユーザー定義の測定単位でのFACTOR_Cについては、「ユーザー定義の測定単位の作成」を参照してください。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: ISO 1000

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

IS_LEGACY

VARCHAR2(5)

測定単位の定義が、リリース2 (10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2 (10.2)で新設された定義の場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSG測定単位と同じ意味を持つレガシー測定単位が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー測定単位のUOM_ID値です。

6.7.28 座標系の表とビューとの関係

Spatial and Graphのシステム表およびビューの定義は、EPSGデータ・モデルおよびデータセットに基づいているため、EPSGのエンティティ関連(E-R)ダイアグラムを参照すると、Spatial and Graphの座標系データ構造間の関係の概要がよくわかります。EPSG E-Rダイアグラムは、ドキュメントhttp://www.ihsenergy.com/epsg/geod_arch.htmlに記載されています

ただし、Oracle Spatial and Graphでは次のEPSG E-Rダイアグラムは使用されていません。

  • Area of Use(ダイアグラムの中央上部にある黄色いボックス)

  • Deprecation、Aliasなど(ダイアグラムの右下部分にピンク色のボックスで表されている部分)

この他、Spatial and Graphでは、一部の表名がSpatial and Graph独自の命名規則に準拠するように変更され、表6-27に示す一部の表は使用されません。

表6-27 EPSGの表名とOracle Spatial and Graphの名前

EPSGの名前 Oracleの名前

Coordinate System

SDO_COORD_SYS

Coordinate Axis

SDO_COORD_AXES

Coordinate Reference System

SDO_COORD_REF_SYSTEM

Area Of Use

(未使用)

Datum

SDO_DATUMS

Prime Meridian

SDO_PRIME_MERIDIANS

Ellipsoid

SDO_ELLIPSOIDS

Unit Of Measure

SDO_UNITS_OF_MEASURE

Coordinate Operation

SDO_COORD_OPS

Coord.Operation Parameter ValueCoord

SDO_COORD_OP_PARAM_VALS

Operation Parameter UsageCoord.

SDO_COORD_OP_PARAM_USE

Operation Parameter

SDO_COORD_OP_PARAMS

Coordinate Operation Path

SDO_COORD_OP_PATHS

Coordinate Operation Method

SDO_COORD_OP_METHODS

Change

(未使用)

Deprecation

(未使用)

Supersession

(未使用)

Naming System

(未使用)

Alias

(未使用)

Any Entity

(未使用)

6.7.29 EPSGベースの座標系に関する情報の検索

この項では、EPSGベースの測地座標系および投影座標系に関する情報を、Spatial and Graphの座標系データ構造で問い合せる方法を説明します。

トピック:

6.7.29.1 測地座標系

人間が判読可能なCRSのサマリー形式はWKT文字列です。次に例を示します。

SQL> select wktext from cs_srs where srid = 4326;
 
WKTEXT
--------------------------------------------------------------------------------
GEOGCS [ "WGS 84", DATUM ["World Geodetic System 1984 (EPSG ID 6326)", SPHEROID
["WGS 84 (EPSG ID 7030)", 6378137, 298.257223563]], PRIMEM [ "Greenwich", 0.0000
00 ], UNIT ["Decimal Degree", 0.01745329251994328]]

EPSG WKTは、下位互換性を維持するためにSpatial and Graphによって自動生成されます。EPSG WKTには便宜上、数値ID(前述の例のEPSG ID 6326など)も含まれます。ただし、詳細な情報を得るには、座標系データ構造に格納されたEPSGデータにアクセスする必要があります。次の例は、SRID 4123に対する楕円体、データのシフト、回転およびスケール調整に関する情報を戻します。

SQL> select
  ell.semi_major_axis,
  ell.inv_flattening,
  ell.semi_minor_axis,
  ell.uom_id,
  dat.shift_x,
  dat.shift_y,
  dat.shift_z,
  dat.rotate_x,
  dat.rotate_y,
  dat.rotate_z,
  dat.scale_adjust
from
  sdo_coord_ref_system crs,
  sdo_datums dat,
  sdo_ellipsoids ell
where
  crs.srid = 4123 and
  dat.datum_id = crs.datum_id and
  ell.ellipsoid_id = dat.ellipsoid_id;
 
SEMI_MAJOR_AXIS INV_FLATTENING SEMI_MINOR_AXIS     UOM_ID    SHIFT_X    SHIFT_Y    SHIFT_Z   ROTATE_X   ROTATE_Y   ROTATE_Z SCALE_ADJUST
--------------- -------------- --------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ------------
        6378388            297      6356911.95       9001      -90.7     -106.1     -119.2       4.09       .218      -1.05         1.37

前述の例では、UOM_IDはSEMI_MAJOR_AXIS (a)およびSEMI_MINOR_AXIS (b)の測定単位を表します。INV_FLATTENINGはa/(a-b)であり、単位は関連付けられていません。シフトの単位はmで、回転角度の単位はアーク秒数、スケール調整の単位は100万分の1です。

UOM_IDを解釈するには、次の例に示すとおり、単位表を問い合せます。

SQL> select UNIT_OF_MEAS_NAME from sdo_units_of_measure where UOM_ID = 9001;
 
UNIT_OF_MEAS_NAME
--------------------------------------------------------------------------------
metre

次の例に示すとおり、長さの単位換算率は、mに対して相対的に指定します。

SQL> select UNIT_OF_MEAS_NAME, FACTOR_B/FACTOR_C from sdo_units_of_measure where UOM_ID = 9002;
 
UNIT_OF_MEAS_NAME
--------------------------------------------------------------------------------
FACTOR_B/FACTOR_C
-----------------
foot
            .3048

次の例に示すとおり、角度の単位換算率は、ラジアンに対して相対的に指定します。

SQL> select UNIT_OF_MEAS_NAME, FACTOR_B/FACTOR_C from sdo_units_of_measure where UOM_ID = 9102;
 
UNIT_OF_MEAS_NAME
--------------------------------------------------------------------------------
FACTOR_B/FACTOR_C
-----------------
degree
       .017453293
6.7.29.2 投影座標系

「測地座標系」で説明したとおり、WKTは人間が判読可能なCRSのサマリーですが、実際のEPSGデータはSpatial and Graphの座標系データ構造に格納されています。次の例に、投影座標系のWKT文字列を示します。

SQL> select wktext from cs_srs where srid = 32040;
 
WKTEXT
--------------------------------------------------------------------------------
PROJCS["NAD27 / Texas South Central", GEOGCS [ "NAD27", DATUM ["North American D
atum 1927 (EPSG ID 6267)", SPHEROID ["Clarke 1866 (EPSG ID 7008)", 6378206.4, 29
4.978698213905820761610537123195175418]], PRIMEM [ "Greenwich", 0.000000 ], UNIT
 ["Decimal Degree", 0.01745329251994328]], PROJECTION ["Texas CS27 South Central
 zone (EPSG OP 14204)"], PARAMETER ["Latitude_Of_Origin", 27.8333333333333333333
3333333333333333333], PARAMETER ["Central_Meridian", -98.99999999999999999999999
999999999999987], PARAMETER ["Standard_Parallel_1", 28.3833333333333333333333333
3333333333333], PARAMETER ["Standard_Parallel_2", 30.283333333333333333333333333
33333333333], PARAMETER ["False_Easting", 2000000], PARAMETER ["False_Northing",
 0], UNIT ["U.S. Foot", .3048006096012192024384048768097536195072]]

投影CRSの基となる地理CRSを特定するには、次の例に示すとおり、SDO_COORD_REF_SYSTEM表を問い合せます。

SQL> select SOURCE_GEOG_SRID from sdo_coord_ref_system where srid = 32040;
 
SOURCE_GEOG_SRID
----------------
            4267

次の例では、投影CRS 32040の投影方法が戻されます。

SQL> select
  m.coord_op_method_name
from
  sdo_coord_ref_sys crs,
  sdo_coord_ops ops,
  sdo_coord_op_methods m
where
  crs.srid = 32040 and
  ops.coord_op_id = crs.projection_conv_id and
  m.coord_op_method_id = ops.coord_op_method_id;
 
COORD_OP_METHOD_NAME
--------------------------------------------------
Lambert Conic Conformal (2SP)

次の例では、投影CRS 32040の投影パラメータが戻されます。

SQL> select
  params.parameter_name || ' = ' ||
  vals.parameter_value || ' ' ||
  uom.unit_of_meas_name "Projection parameters"
from
  sdo_coord_ref_sys crs,
  sdo_coord_op_param_vals vals,
  sdo_units_of_measure uom,
  sdo_coord_op_params params
where
  crs.srid = 32040 and
  vals.coord_op_id = crs.projection_conv_id and
  uom.uom_id = vals.uom_id and
  params.parameter_id = vals.parameter_id;
 
Projection parameters
--------------------------------------------------------------------------------
Latitude of false origin = 27.5 sexagesimal DMS
Longitude of false origin = -99 sexagesimal DMS
Latitude of 1st standard parallel = 28.23 sexagesimal DMS
Latitude of 2nd standard parallel = 30.17 sexagesimal DMS
Easting at false origin = 2000000 US survey foot
Northing at false origin = 0 US survey foot
 

次の例は基本的に前述の例と同じ問合せですが、基本単位への値の変換も行われます。

SQL> select
  params.parameter_name || ' = ' ||
  vals.parameter_value || ' ' ||
  uom.unit_of_meas_name || ' = ' ||
  sdo_cs.transform_to_base_unit(vals.parameter_value, vals.uom_id) || ' ' ||
  decode(
    uom.unit_of_meas_type,
    'area', 'square meters',
    'angle', 'radians',
    'length', 'meters',
    'scale', '', '') "Projection parameters"
from
  sdo_coord_ref_sys crs,
  sdo_coord_op_param_vals vals,
  sdo_units_of_measure uom,
  sdo_coord_op_params params
where
  crs.srid = 32040 and
  vals.coord_op_id = crs.projection_conv_id and
  uom.uom_id = vals.uom_id and
  params.parameter_id = vals.parameter_id;
 
Projection parameters
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Latitude of false origin = 27.5 sexagesimal DMS = .485783308471754564814814814814814814815 radians
Longitude of false origin = -99 sexagesimal DMS = -1.7278759594743845 radians
Latitude of 1st standard parallel = 28.23 sexagesimal DMS = .495382619357723367592592592592592592593 radians
Latitude of 2nd standard parallel = 30.17 sexagesimal DMS = .528543875145615595370370370370370370371 radians
Easting at false origin = 2000000 US survey foot = 609601.219202438404876809753619507239014 meters
Northing at false origin = 0 US survey foot = 0 meters

次の例では、投影CRS 32040の投影測定単位が戻されます。(投影単位は、投影パラメータに使用された長さの単位とは異なる場合があります。)

SQL> select
  axes.coord_axis_abbreviation || ': ' ||
  uom.unit_of_meas_name "Projection units"
from
  sdo_coord_ref_sys crs,
  sdo_coord_axes axes,
  sdo_units_of_measure uom
where
  crs.srid = 32040 and
  axes.coord_sys_id = crs.coord_sys_id and
  uom.uom_id = axes.uom_id;
 
Projection units
------------------------------------------------------------------------------
X: US survey foot
Y: US survey foot

6.8 レガシー表およびビュー

リリース10.2より前のSpatial and Graphでは、座標系ファンクションおよびプロシージャは、次の表の情報を使用していましたが、その一部は名前が新しくなったり、現在、表ではなくビューになっています。

  • MDSYS.CS_SRSは、有効な座標系を定義します。この表では、各座標系と、それに関する説明を対応付けています。この表は、Open Geospatial Consortium (http://www.opengeospatial.org)から公開されている標準に準拠しています。

  • MDSYS.SDO_ANGLE_UNITSは、有効な角度単位を定義します。

  • MDSYS.SDO_AREA_UNITSは、有効な領域単位を定義します。

  • MDSYS.SDO_DIST_UNITSは、有効な距離単位を定義します。

  • MDSYS.SDO_DATUMS_OLD_FORMATおよびMDSYS.SDO_DATUMS_OLD_SNAPSHOTは、リリース10.2より前のMDSYS.SDO_DATUMS表(有効なデータを定義)に基づいています。

  • MDSYS.SDO_ELLIPSOIDS_OLD_FORMATおよびMDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOTは、リリース10.2より前のMDSYS.SDO_ELLIPSOIDS表(有効な楕円体を定義)に基づいています。

  • MDSYS.SDO_PROJECTIONS_OLD_FORMATおよびMDSYS.SDO_PROJECTIONS_OLD_SNAPSHOTは、リリース10.2より前のMDSYS.SDO_PROJECTIONS表(有効な投影図を定義)に基づいています。

    注意:

    これらのレガシー表でOracleから提供されている情報は、すべて変更および削除しないでください。

    SQL文でレガシー表を参照する場合は、表の名前の前にMDSYS.を付ける必要があります。

トピック:

6.8.1 MDSYS.CS_SRS表

MDSYS.CS_SRS参照表には4000を超える行が含まれ、それぞれが有効な座標系に割り当てられています。この表に含まれる列を、表6-28に示します。

表6-28 MDSYS.CS_SRS表

列名 データ型 説明

CS_NAME

VARCHAR2(68)

わかりやすい名前(ニーモニック)を指定します。これによって、ユーザーは座標系を参照できます。

SRID

NUMBER(38)

座標系の一意のID番号(空間参照ID)です。現在、SRID値1から999999は、Oracle Spatial and Graphが使用するために予約されているため、ユーザー定義の座標系には、1000000以上のSRID値を使用できます。

AUTH_SRID

NUMBER(38)

オプションのID番号です。エントリの抽出方法を指定します。たとえば、別の座標系への外部キーとなる場合があります。

AUTH_NAME

VARCHAR2(256)

座標系の認可レベル名です。指定された表にはOracleが含まれます。ユーザーが追加するすべての行には、どのような値でも指定できます。

WKTEXT

VARCHAR2(2046)

SRSのwell-knownテキスト(WKT)の説明で、Open Geospatial Consortiumによって定義されています。詳細は、「well-knownテキスト(WKT)」を参照してください。

CS_BOUNDS

SDO_GEOMETRY

WGS 84経度および緯度の頂点を持つポリゴンであるオプションのSDO_GEOMETRYオブジェクトで、投影座標系の有効範囲に関する球形ポリゴンの説明を表します。地理または非地球座標系の場合は、NULLである必要があります。すべての行にNULLが入ります。

トピック:

6.8.1.1 well-knownテキスト(WKT)

MDSYS.CS_SRS表のWKTEXT列には、SRSの説明としてOpen Geospatial Consortiumによって定義されたwell-knownテキスト(WKT)の説明が含まれています。WKT EBNF構文を次に示します。

<coordinate system> ::=
     <horz cs> | <local cs>

<horz cs> ::=
     <geographic cs> | <projected cs>


<projected cs> ::=
     PROJCS [ "<name>", <geographic cs>, <projection>, 
           {<parameter>,}* <linear unit> ]

<projection> ::=
     PROJECTION [ "<name>" ]

<parameter> ::= 
     PARAMETER [ "<name>", <number> ]

<geographic cs> ::=
     GEOGCS [ "<name>", <datum>, <prime meridian>, <angular unit> ]

<datum> ::=
     DATUM [ "<name>", <spheroid> 
     {, <shift-x>, <shift-y>, <shift-z> 
       , <rot-x>, <rot-y>, <rot-z>, <scale_adjust>}  
     ]  

<spheroid> ::=
     SPHEROID ["<name>", <semi major axis>, <inverse flattening> ]

<prime meridian> ::=
     PRIMEM ["<name>", <longitude> ]

<longitude> ::=
     <number>

<semi-major axis> ::=
     <number>

<inverse flattening> ::=
     <number>

<angular unit> ::= <unit>

<linear unit> ::= <unit>

<unit> ::=
     UNIT [ "<name>", <conversion factor> ]

<local cs> ::=
     LOCAL_CS [ "<name>", <local datum>, <linear unit>,
          <axis> {, <axis>}* ]

<local datum> ::=
     LOCAL_DATUM [ "<name>", <datum type>
          {, <shift-x>, <shift-y>, <shift-z> 
           , <rot-x>, <rot-y>, <rot-z>, <scale_adjust>} 
          ]

<datum type> ::=
     <number>

<axis> ::=
     AXIS [ "<name>", NORTH | SOUTH | EAST |
           WEST | UP | DOWN | OTHER ]

それぞれの<parameter>指定は、次のいずれかです。

  • Standard_Parallel_1 (10進度単位)

  • Standard_Parallel_2 (10進度単位)

  • Central_Meridian (10進度単位)

  • Latitude_of_Origin (10進度単位)

  • Azimuth (10進度単位)

  • False_Easting (座標系の単位。たとえば、m)

  • False_Northing (座標系の単位。たとえば、m)

  • Perspective_Point_Height (座標系の単位。たとえば、m)

  • Landsat_Number (1、2、3、4または5である必要があります)

  • Path_Number

  • Scale_Factor

注意:

WKTのデータ回転パラメータに使用されている表記法が米国式ではなくヨーロッパ式の場合、または変換結果が正しくないと思われる場合は、「米国式およびヨーロッパ式のデータ・パラメータ表記法」を参照してください。

<parameter>指定のデフォルト値は0 (ゼロ)です。つまり、投影に対して指定が必要なときに値がWKTで指定されていない場合は、値0が使用されます。

本初子午線(PRIMEM)は、10進度の経度で指定されます。

測地(地理)座標系のWKTの例を次に示します。

'GEOGCS [ "Longitude / Latitude (Old Hawaiian)", DATUM ["Old Hawaiian", SPHEROID
["Clarke 1866", 6378206.400000, 294.978698]], PRIMEM [ "Greenwich", 0.000000 ],
UNIT ["Decimal Degree", 0.01745329251994330]]'

座標系のWKT定義は、階層的にネストされています。Old Hawaiian地理座標系(GEOGCS)は、名前が付いたデータ(DATUM)、本初子午線(PRIMEM)および単位定義(UNIT)で構成されています。逆に、データは、名前が付いた球体およびそのsemi-major axisパラメータおよびinverse flatteningパラメータで構成されています。

投影座標系のWKTの例(Wyoming州平地)を次に示します。

'PROJCS["Wyoming 4901, Eastern Zone (1983, meters)", GEOGCS [ "GRS 80", DATUM
["GRS 80", SPHEROID ["GRS 80", 6378137.000000, 298.257222]], PRIMEM [
"Greenwich", 0.000000 ], UNIT ["Decimal Degree", 0.01745329251994330]],
PROJECTION ["Transverse Mercator"], PARAMETER ["Scale_Factor", 0.999938],
PARAMETER ["Central_Meridian", -105.166667], PARAMETER ["Latitude_Of_Origin",
40.500000], PARAMETER ["False_Easting", 200000.000000], UNIT ["Meter",
1.000000000000]]'

投影座標系には、投影を制御するパラメータと同様に、ネストした地理座標系が基準として含まれます。

Oracle Spatial and Graphでは、すべての測地データおよび投影図をサポートします。

ローカル座標系のWKTの例を次に示します。

LOCAL_CS [ "Non-Earth (Meter)", LOCAL_DATUM ["Local Datum", 0], UNIT ["Meter", 1.0], AXIS ["X", EAST], AXIS["Y", NORTH]]

ローカル座標系の詳細は、「ローカル座標のサポート」を参照してください。

SDO_CS.VALIDATE_WKTファンクション(「SDO_CSパッケージ(座標系変換)」を参照)を使用すると、MDSYS.CS_SRS表に定義されているすべての座標系のWKTを検証できます。

6.8.1.2 米国式およびヨーロッパ式のデータ・パラメータ表記法

データ関連のWKTパラメータは、Bursa Wolf変換パラメータを最大7個含むリストです。回転パラメータではアーク秒が指定され、シフト・パラメータではmが指定されます。

米国式およびヨーロッパ式の異なる2つの表記法は、3つの汎用回転パラメータで使用されており、またそれぞれ正反対の符号を使用しています。Spatial and Graphでは、米国式の表記法を採用し想定しています。したがって、WKTでヨーロッパ式表記法が使用されている場合は、回転パラメータの符号を逆にして、米国式表記法に変換する必要があります。

パラメータ・セットで使用されている表記法が米国式かヨーロッパ式か不明な場合は、次のテストを実行します。

  1. 正しい変換結果がわかっている単一の点を選択します。

  2. 現行のWKTを使用して変換を実行します。

  3. 想定した正しい結果と計算結果が一致しない場合は、回転パラメータの符号を逆にして変換を実行し、想定した正しい結果と計算結果が一致するかを確認します。

6.8.1.3 well-knownテキストの更新手順

SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に対して行を挿入または削除すると、Spatial and GraphによってMDSYS.CS_SRS表のWKTEXT列が自動的に更新されます。(WKTEXT列の書式については、「well-knownテキスト(WKT)」を参照してください。)ただし、SDO_COORD_REF_SYSTEMビュー内の既存行を更新した場合は、well-knownテキスト(WKT)値は自動的に更新されません。

さらに、座標参照系に関連する情報は、SDO_DATUMS(「SDO_DATUMS表」を参照)、SDO_ELLIPSOIDS(「SDO_ELLIPSOIDS表」を参照)、SDO_PRIME_MERIDIANS(「SDO_PRIME_MERIDIANS表」を参照)などのシステム表にも格納されています。これらの表の情報を追加、削除または変更した場合も、MDSYS.CS_SRS表のWKTEXT値は自動的に更新されません。たとえば、SDO_ELLIPSOIDS表の楕円体のフラット化の値を更新したとしても、関連付けられている座標系のwell-knownテキスト文字列は更新されません。

ただし、名前がUPDATE_WKTS_FOR で始まるプロシージャ(たとえば、SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRSSDO_CS.UPDATE_WKTS_FOR_EPSG_DATUMなど)を使用すると、MDSYS.CS_SRS表のWKTEXT値を手動で更新できます。SERVEROUTPUT情報の表示が有効になっている場合は、MDSYS.CS_SRS表内で、WKTEXT値が更新される行のSRID値を識別するメッセージが、これらのプロシージャによって表示されます。これらのプロシージャについては、「SDO_CSパッケージ(座標系変換)」を参照してください。

6.8.2 MDSYS.SDO_ANGLE_UNITSビュー

MDSYS.SDO_ANGLE_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な角度のUNIT指定ごとに1つの行が含まれます。WKTについては、「well-knownテキスト(WKT)」を参照してください。

MDSYS.SDO_ANGLE_UNITSビューは、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に基づいており、これには表6-29に示す列が含まれています。

表6-29 MDSYS.SDO_ANGLE_UNITSビュー

列名 データ型 説明

SDO_UNIT

VARCHAR2(32)

角度単位名(ほとんどの場合は、UNIT_NAME値の略称)です。SDO_UNIT値は、SDO_UTIL.CONVERT_UNITファンクションのfrom_unitおよびto_unitパラメータで使用します。

UNIT_NAME

VARCHAR2(100)

角度単位名です。任意のユーザー定義の座標系に対するWKTのUNIT指定にこの列の値を指定します。値は、Decimal Degree (10進度)、Radian (ラジアン)、Decimal Second (10進秒)、Decimal Minute (10進分)、Gon、Gradなどです。

CONVERSION_FACTOR

NUMBER

1ラジアンに対する指定した単位の比率です。たとえば、ラジアンに対する10進度の比率は0.017453293です。

6.8.3 MDSYS.SDO_AREA_UNITSビュー

MDSYS.SDO_AREA_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な面積のUNIT指定ごとに1つの行が含まれます。WKTについては、「well-knownテキスト(WKT)」を参照してください。

MDSYS.SDO_AREA_UNITSビューは、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に基づいており、これには表6-30に示す列が含まれています。

表6-30 SDO_AREA_UNITSビュー

列名 データ型 説明

SDO_UNIT

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のSHORT_NAME列から取得されます。

UNIT_NAME

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のUNIT_OF_MEAS_NAME列から取得されます。

CONVERSION_FACTOR

NUMBER

1平方mに対する単位の比率です。たとえば、1平方mの換算係数は1.0で、1平方マイルの換算係数は2589988です。

6.8.4 MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表

MDSYS.SDO_DATUMS_OLD_FORMAT参照表とMDSYS.SDO_DATUMS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なDATUM指定ごとに1つの行が含まれます。(WKTについては、「well-knownテキスト(WKT)」を参照してください。)

  • MDSYS.SDO_DATUMS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースのデータ指定が表に格納されています)。

  • MDSYS.SDO_DATUMS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前のデータ指定と表形式)。

これらの表に含まれる列を、次の表に示します。

表6-31 MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表

列名 データ型 説明

NAME

VARCHAR2(80)(OLD_FORMATの場合)

VARCHAR2(64)(OLD_SNAPSHOTの場合)

データ名です。任意のユーザー定義の座標系に対するWKTのDATUM指定にこの列の値(Oracleが指定する値またはユーザー定義の値)を指定します。値は、Adindan、Afgooye、Ain el Abd 1970、Anna 1 Astro 1965、Arc 1950、Arc 1960、Ascension Island 1958などです。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

これらの表内のデータの名前を確認するには、適切なSELECT文を入力します。次に例を示します。

SELECT name FROM MDSYS.SDO_DATUMS_OLD_FORMAT ORDER BY name;

6.8.5 MDSYS.SDO_DIST_UNITSビュー

MDSYS.SDO_DIST_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な距離のUNIT指定ごとに1つの行が含まれます。WKTについては、「well-knownテキスト(WKT)」を参照してください。

MDSYS.SDO_DIST_UNITSビューは、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に基づいており、これには表6-32に示す列が含まれています。

表6-32 MDSYS.SDO_DIST_UNITSビュー

列名 データ型 説明

SDO_UNIT

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のSHORT_NAME列から取得されます。

UNIT_NAME

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のUNIT_OF_MEAS_NAME列から取得されます。

CONVERSION_FACTOR

NUMBER

1mに対する単位の比率です。たとえば、1mの換算係数は1.0で、1マイルの換算係数は1609.344です。

6.8.6 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表

MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT参照表とMDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なSPHEROID指定ごとに1つの行が含まれます。(WKTについては、「well-knownテキスト(WKT)」を参照してください。)

  • MDSYS.SDO_ELLIPSOIDS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの楕円体指定が表に格納されています)。

  • MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の楕円体指定と表形式)。

これらの表に含まれる列を、次の表に示します。

表6-33 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表

列名 データ型 説明

NAME

VARCHAR2(80)(OLD_FORMATの場合)

VARCHAR2(64)(OLD_SNAPSHOTの場合)

楕円体(球体)の名前です。任意のユーザー定義の座標系に対するWKTのSPHEROID指定にこの列の値を指定します。値は、Clarke 1866、WGS 72、Australian、Krassovsky、International 1924などです。

SEMI_MAJOR_AXIS

NUMBER

半長径(楕円体の長軸の半分)に沿った半径(m)です。

INVERSE_FLATTENING

NUMBER

楕円体の逆フラット化です。つまり、1/f (f = (a-b)/aaは半長径、bは半短径)です。

これらの表内の楕円体の名前を確認するには、適切なSELECT文を入力します。次に例を示します。

SELECT name FROM MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT ORDER BY name;

6.8.7 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表

MDSYS.SDO_PROJECTIONS_OLD_FORMAT参照表とMDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なPROJECTION指定ごとに1つの行が含まれます。(WKTについては、「well-knownテキスト(WKT)」を参照してください。)

  • MDSYS.SDO_PROJECTIONS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの投影法指定が表に格納されています)。

  • MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の投影法指定と表形式)。

これらの表に含まれる列を、次の表に示します。

表6-34 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表

列名 データ型 説明

NAME

VARCHAR2(80)(OLD_FORMATの場合)

VARCHAR2(64)(OLD_SNAPSHOTの場合)

投影図名です。任意のユーザー定義の座標系に対するPROJECTION指定にこの列の値を指定します。値は、Geographic (Lat/Long)、Universal Transverse Mercator、State Plane Coordinates、Albers Conical Equal Areaなどです。

これらの表内の投影図の名前を確認するには、適切なSELECT文を入力します。次に例を示します。

SELECT name FROM MDSYS.SDO_PROJECTIONS_OLD_FORMAT ORDER BY name;

6.9 ユーザー定義の座標参照系の作成

Oracleから提供されている座標系でニーズを十分に満たすことができない場合は、ユーザー定義の座標参照系を作成できます。

注意:

「座標系(空間参照システム)」で述べたように、「座標系」という用語と「座標参照系」(CRS)という用語は、通常、区別なく使用されます。ただし、「座標参照系」は、地球をベースにしている必要があります。

ユーザー定義のCRSを作成する手順は、厳密には、それが測地座標参照系であるか、投影座標参照系であるかによって異なります。どちらの場合も、座標系に関する情報(座標軸、軸の名前、測定単位など)を指定する必要があります。測地CRSの場合は、データに関する情報(楕円体、本初子午線など)を指定します(「測地CRSの作成」を参照)。投影CRSの場合は、ソース(測地)CRSと投影法に関する情報(操作およびパラメータ)を指定します(「投影CRSの作成」を参照)。

ユーザー定義の座標系の場合、SRID値は1000000以上にする必要があります。

トピック:

6.9.1 測地CRSの作成

測定単位、座標軸、SDO_COORD_SYS表の行、楕円体、本初子午線、データなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に行を挿入して、新しい測地CRSを定義します。

例6-5では、My Own NAD27という名前の架空の測地CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 CRSと同じです)。

定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。

  1. 測定単位がSDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。
  2. 座標軸がSDO_COORD_AXES表(「SDO_COORD_AXES表」を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。
  3. 座標系の適切なエントリがSDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)に定義されていない場合は、表に行を挿入します。例6-6では、架空の座標系の定義を挿入しています。
  4. 楕円体がSDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)に定義されていない場合は、表に行を挿入して新しい楕円体を定義します。
  5. 本初子午線がSDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)に定義されていない場合は、表に行を挿入して新しい本初子午線を定義します。
  6. データがSDO_DATUMS表(「SDO_DATUMS表」を参照)に定義されていない場合は、表に行を挿入して新しいデータを定義します。

例6-5 ユーザー定義の測地座標参照系の作成

INSERT INTO SDO_COORD_REF_SYSTEM (
        SRID,
        COORD_REF_SYS_NAME,
        COORD_REF_SYS_KIND,
        COORD_SYS_ID,
        DATUM_ID,
        GEOG_CRS_DATUM_ID,
        SOURCE_GEOG_SRID,
        PROJECTION_CONV_ID,
        CMPD_HORIZ_SRID,
        CMPD_VERT_SRID,
        INFORMATION_SOURCE,
        DATA_SOURCE,
        IS_LEGACY,
        LEGACY_CODE,
        LEGACY_WKTEXT,
        LEGACY_CS_BOUNDS,
        IS_VALID,
        SUPPORTS_SDO_GEOMETRY)
  VALUES (
        9994267,
        'My Own NAD27',
        'GEOGRAPHIC2D',
        6422,
        6267,
        6267,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        'EPSG',
        'FALSE',
        NULL,
        NULL,
        NULL,
        'TRUE',
        'TRUE');

例6-6 SDO_COORD_SYS表への行の挿入

INSERT INTO SDO_COORD_SYS (
        COORD_SYS_ID,
        COORD_SYS_NAME,
        COORD_SYS_TYPE,
        DIMENSION,
        INFORMATION_SOURCE,
        DATA_SOURCE)
  VALUES (
        9876543,
        'My custom CS. Axes: lat, long. Orientations: north, east. UoM: deg',
        'ellipsoidal',
        2,
        'Myself',
        'Myself');

6.9.2 投影CRSの作成

測定単位、座標軸、SDO_COORD_SYS表の行、ソース座標系、投影操作、投影パラメータなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に行を挿入して新しい投影CRSを定義します。

例6-7では、My Own NAD27 / Cuba Norteという名前の架空の投影CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 / Cuba Norte CRSと同じです)。

定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。

  1. 測定単位がSDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。
  2. 座標軸がSDO_COORD_AXES表(「SDO_COORD_AXES表」を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。
  3. 座標系の適切なエントリがSDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)に定義されていない場合は、表に行を挿入します。(「測地CRSの作成」例6-6を参照してください)。
  4. 投影操作がSDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)に定義されていない場合は、表に行を挿入して新しい投影操作を定義します。例6-8に、Oracleが提供している座標操作ID 18061の情報を挿入する文を示します。
  5. 投影操作のパラメータがSDO_COORD_OP_PARAM_VALS表(「SDO_COORD_OP_PARAM_VALS表」を参照)に定義されていない場合は、新しいパラメータごとに1行を表に挿入します。例6-9に、Oracleが提供している、ID値が8801、8802、8805、8806および8807のパラメータの情報を挿入する文を示します。

例6-7 ユーザー定義の投影座標参照系の作成

INSERT INTO SDO_COORD_REF_SYSTEM (
        SRID,
        COORD_REF_SYS_NAME,
        COORD_REF_SYS_KIND,
        COORD_SYS_ID,
        DATUM_ID,
        GEOG_CRS_DATUM_ID,
        SOURCE_GEOG_SRID,
        PROJECTION_CONV_ID,
        CMPD_HORIZ_SRID,
        CMPD_VERT_SRID,
        INFORMATION_SOURCE,
        DATA_SOURCE,
        IS_LEGACY,
        LEGACY_CODE,
        LEGACY_WKTEXT,
        LEGACY_CS_BOUNDS,
        IS_VALID,
        SUPPORTS_SDO_GEOMETRY)
  VALUES (
        9992085,
        'My Own NAD27 / Cuba Norte',
        'PROJECTED',
        4532,
        NULL,
        6267,
        4267,
        18061,
        NULL,
        NULL,
        'Institut Cubano di Hidrografia (ICH)',
        'EPSG',
        'FALSE',
        NULL,
        NULL,
        NULL,
        'TRUE',
        'TRUE');

例6-8 SDO_COORD_OPS表への行の挿入

INSERT INTO SDO_COORD_OPS (
        COORD_OP_ID,
        COORD_OP_NAME,
        COORD_OP_TYPE,
        SOURCE_SRID,
        TARGET_SRID,
        COORD_TFM_VERSION,
        COORD_OP_VARIANT,
        COORD_OP_METHOD_ID,
        UOM_ID_SOURCE_OFFSETS,
        UOM_ID_TARGET_OFFSETS,
        INFORMATION_SOURCE,
        DATA_SOURCE,
        SHOW_OPERATION,
        IS_LEGACY,
        LEGACY_CODE,
        REVERSE_OP,
        IS_IMPLEMENTED_FORWARD,
        IS_IMPLEMENTED_REVERSE)
  VALUES (
        18061,
        'Cuba Norte',
        'CONVERSION',
        NULL,
        NULL,
        NULL,
        NULL,
        9801,
        NULL,
        NULL,
        NULL,
        'EPSG',
        1,
        'FALSE',
        NULL,
        1,
        1,
        1);

例6-9 SDO_COORD_OP_PARAM_VALS表への行の挿入

INSERT INTO SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
  VALUES (
        18061,
        9801,
        8801,
        22.21,
        NULL,
        9110);
 
 INSERT INTO SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
  VALUES (
        18061,
        9801,
        8802,
        -81,
        NULL,
        9110);
 
 INSERT INTO SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
  VALUES (
        18061,
        9801,
        8805,
        .99993602,
        NULL,
        9201);
 
INSERT INTO SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
  VALUES (
        18061,
        9801,
        8806,
        500000,
        NULL,
        9001);
 
INSERT INTO SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
  VALUES (
        18061,
        9801,
        8807,
        280296.016,
        NULL,
        9001);

例6-10 ユーザー定義の投影CRSの作成(拡張例)

-- Create an EPSG equivalent for the following CRS:
--
-- CS_NAME:    VDOT_LAMBERT
-- SRID:       51000000
-- AUTH_SRID:  51000000
-- AUTH_NAME:  VDOT Custom Lambert Conformal Conic
-- WKTEXT:
--
-- PROJCS[
--   "VDOT_Lambert",
--   GEOGCS[
--     "GCS_North_American_1983",
--     DATUM[
--       "D_North_American_1983",
--       SPHEROID["GRS_1980", 6378137.0, 298.257222101]],
--     PRIMEM["Greenwich", 0.0],
--     UNIT["Decimal Degree",0.0174532925199433]],
--   PROJECTION["Lambert_Conformal_Conic"],
--   PARAMETER["False_Easting", 0.0],
--   PARAMETER["False_Northing", 0.0],
--   PARAMETER["Central_Meridian", -79.5],
--   PARAMETER["Standard_Parallel_1", 37.0],
--   PARAMETER["Standard_Parallel_2", 39.5],
--   PARAMETER["Scale_Factor", 1.0],
--   PARAMETER["Latitude_Of_Origin", 36.0],
--   UNIT["Meter", 1.0]]
 
-- First, the base geographic CRS (GCS_North_American_1983) already exists in EPSG.
-- It is 4269:
-- Next, find the EPSG equivalent for PROJECTION["Lambert_Conformal_Conic"]:
select
  coord_op_method_id,
  legacy_name
from
  sdo_coord_op_methods
where
  not legacy_name is null
order by
  coord_op_method_id;
 
-- Result:
-- COORD_OP_METHOD_ID LEGACY_NAME
-- ------------------ --------------------------------------------------
--               9802 Lambert Conformal Conic
--               9803 Lambert Conformal Conic (Belgium 1972)
--               9805 Mercator
--               9806 Cassini
--               9807 Transverse Mercator
--               9829 Polar Stereographic
-- 
-- 6 rows selected.
--
-- It is EPSG method 9802. Create a projection operation 510000001, based on it:
 
insert into MDSYS.SDO_COORD_OPS (
        COORD_OP_ID,
        COORD_OP_NAME,
        COORD_OP_TYPE,
        SOURCE_SRID,
        TARGET_SRID,
        COORD_TFM_VERSION,
        COORD_OP_VARIANT,
        COORD_OP_METHOD_ID,
        UOM_ID_SOURCE_OFFSETS,
        UOM_ID_TARGET_OFFSETS,
        INFORMATION_SOURCE,
        DATA_SOURCE,
        SHOW_OPERATION,
        IS_LEGACY,
        LEGACY_CODE,
        REVERSE_OP,
        IS_IMPLEMENTED_FORWARD,
        IS_IMPLEMENTED_REVERSE)
VALUES (
        510000001,
        'VDOT_Lambert',
        'CONVERSION',
        NULL,
        NULL,
        NULL,
        NULL,
        9802,
        NULL,
        NULL,
        NULL,
        NULL,
        1,
        'FALSE',
        NULL,
        1,
        1,
        1);
 
-- Now, set the parameters. See which are required:
 
select
  use.parameter_id || ': ' ||
  use.legacy_param_name
from
  sdo_coord_op_param_use use
where
  use.coord_op_method_id = 9802;
 
-- result:
-- 8821: Latitude_Of_Origin
-- 8822: Central_Meridian
-- 8823: Standard_Parallel_1
-- 8824: Standard_Parallel_2
-- 8826: False_Easting
-- 8827: False_Northing
--
-- 6 rows selected.
 
-- Also check the most common units we will need:
 
select
  UOM_ID || ': ' ||
  UNIT_OF_MEAS_NAME
from
  sdo_units_of_measure
where
  uom_id in (9001, 9101, 9102, 9201)
order by
  uom_id;
 
-- result:
-- 9001: metre
-- 9101: radian
-- 9102: degree
-- 9201: unity
 
-- Now, configure the projection parameters:
 
-- 8821: Latitude_Of_Origin
 
    insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
      VALUES (
        510000001,
        9802,
        8821,
        36.0,
        NULL,
        9102);
 
-- 8822: Central_Meridian
 
    insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
      VALUES (
        510000001,
        9802,
        8822,
        -79.5,
        NULL,
        9102);
 
-- 8823: Standard_Parallel_1
 
    insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
      VALUES (
        510000001,
        9802,
        8823,
        37.0,
        NULL,
        9102);
 
-- 8824: Standard_Parallel_2
 
    insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
      VALUES (
        510000001,
        9802,
        8824,
        39.5,
        NULL,
        9102);
 
-- 8826: False_Easting
 
    insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
      VALUES (
        510000001,
        9802,
        8826,
        0.0,
        NULL,
        9001);
 
-- 8827: False_Northing
 
    insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
        COORD_OP_ID,
        COORD_OP_METHOD_ID,
        PARAMETER_ID,
        PARAMETER_VALUE,
        PARAM_VALUE_FILE_REF,
        UOM_ID)
      VALUES (
        510000001,
        9802,
        8827,
        0.0,
        NULL,
        9001);
 
-- Now, create the actual projected CRS.Look at the GEOG_CRS_DATUM_ID 
-- and COORD_SYS_ID first. The GEOG_CRS_DATUM_ID is the datum of 
-- the base geog_crs (4269):
 
select datum_id from sdo_coord_ref_sys where srid = 4269;
 
--   DATUM_ID
-- ----------
--       6269
 
-- And the COORD_SYS_ID is the Cartesian CS used for the projected CRS.
-- We can use 4400, if meters will be the unit:
 
select COORD_SYS_NAME from sdo_coord_sys where COORD_SYS_ID = 4400;
 
-- Cartesian 2D CS. Axes: easting, northing (E,N). Orientations: east, north.
-- UoM: m.
 
-- Now create the projected CRS:
 
insert into MDSYS.SDO_COORD_REF_SYSTEM (
        SRID,
        COORD_REF_SYS_NAME,
        COORD_REF_SYS_KIND,
        COORD_SYS_ID,
        DATUM_ID,
        SOURCE_GEOG_SRID,
        PROJECTION_CONV_ID,
        CMPD_HORIZ_SRID,
        CMPD_VERT_SRID,
        INFORMATION_SOURCE,
        DATA_SOURCE,
        IS_LEGACY,
        LEGACY_CODE,
        LEGACY_WKTEXT,
        LEGACY_CS_BOUNDS,
        GEOG_CRS_DATUM_ID)
VALUES (
        51000000,
        'VDOT_LAMBERT',
        'PROJECTED',
        4400,
        NULL,
        4269,
        510000001,
        NULL,
        NULL,
        NULL,
        NULL,
        'FALSE',
        NULL,
        NULL,
        NULL,
        6269);
 
-- To see the result:
 
select srid, wktext from cs_srs where srid = 51000000;
 
--  51000000
-- PROJCS[
--   "VDOT_LAMBERT",
--   GEOGCS [
--     "NAD83",
--     DATUM [
--       "North American Datum 1983 (EPSG ID 6269)",
--       SPHEROID [
--         "GRS 1980 (EPSG ID 7019)",
--         6378137,
--         298.257222101]],
--     PRIMEM [ "Greenwich", 0.000000 ],
--     UNIT ["Decimal Degree", 0.01745329251994328]],
--   PROJECTION ["VDOT_Lambert"],
--   PARAMETER ["Latitude_Of_Origin", 36],
--   PARAMETER ["Central_Meridian", -79.50000000000000000000000000000000000028],
--   PARAMETER ["Standard_Parallel_1", 37],
--   PARAMETER ["Standard_Parallel_2", 39.5],
--   PARAMETER ["False_Easting", 0],
--   PARAMETER ["False_Northing", 0],
--   UNIT ["Meter", 1]]

例6-10に、ユーザー定義の投影座標参照系の作成例に注釈を付けて拡張した例を示します。

6.9.3 垂直CRSの作成

垂直CRSには1つの次元(通常、高さ)のみがあります。そのままでは、垂直CRSの有用性は低いですが、2次元のCRS(測地CRSまたは投影CRS)と結合して複合CRSを作り出すことができます。例6-11に、SRID 5701を使用して垂直CRSを作成する文を示します(SRID 5701はSpatial and Graphに同梱されています)。この定義では、既存の(1次元の)座標系(ID 6499、「SDO_COORD_SYS表」を参照)と垂直データ(ID 5101、「SDO_DATUMS表」を参照)を参照します。

例6-11 垂直座標参照系の作成

INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
    SRID,
    COORD_REF_SYS_NAME,
    COORD_REF_SYS_KIND,
    COORD_SYS_ID,
    DATUM_ID,
    SOURCE_GEOG_SRID,
    PROJECTION_CONV_ID,
    CMPD_HORIZ_SRID,
    CMPD_VERT_SRID,
    INFORMATION_SOURCE,
    DATA_SOURCE,
    IS_LEGACY,
    LEGACY_CODE,
    LEGACY_WKTEXT,
    LEGACY_CS_BOUNDS)
  VALUES (
    5701,
    'Newlyn',
    'VERTICAL',
    6499,
    5101,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    'EPSG',
    'FALSE',
    NULL,
    NULL,
    NULL);

垂直CRSでは、うねりのある等ポテンシャル面がいくつか定義される場合があります。そのような面の形状と、楕円体からのそのオフセットは、垂直CRSレコード自体に実際どおりには定義されません。そのかわり、垂直CRSと別のCRSとの間の操作に定義が指定されます。したがって、同じ組合せのジオイド高とWGS 84楕円体高間にいくつかの代替操作を定義することができます。たとえば、ジオイドのオフセット・マトリックスにはGEOID90、GEOID93、GEOID96、GEOID99、GEOID03、GEOID06などがあり、これらの各変形に対して別々の操作を定義できます。「変換操作の作成」でそのような操作について説明します。

6.9.4 複合CRSの作成

複合CRSは、既存の水平(2次元の) CRSと垂直(1次元の) CRSを組み合せたものです。水平CRSには、測地CRSまたは投影CRSを使用できます。例6-12に、SRID 7405を使用して複合CRSを作成する文を示します(SRID 7405はSpatial and Graphに同梱されています)。この定義では、既存の投影CRSおよび垂直CRS(それぞれ、ID 27700および5701。「SDO_COORD_REF_SYS表」を参照)を参照します。

例6-12 複合座標参照系の作成

INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
    SRID,
    COORD_REF_SYS_NAME,
    COORD_REF_SYS_KIND,
    COORD_SYS_ID,
    DATUM_ID,
    SOURCE_GEOG_SRID,
    PROJECTION_CONV_ID,
    CMPD_HORIZ_SRID,
    CMPD_VERT_SRID,
    INFORMATION_SOURCE,
    DATA_SOURCE,
    IS_LEGACY,
    LEGACY_CODE,
    LEGACY_WKTEXT,
    LEGACY_CS_BOUNDS)
  VALUES (
    7405,
    'OSGB36 / British National Grid + ODN',
    'COMPOUND',
    NULL,
    NULL,
    NULL,
    NULL,
    27700,
    5701,
    NULL,
    'EPSG',
    'FALSE',
    NULL,
    NULL,
    NULL);

6.9.5 地理3D CRSの作成

地理3D CRSは、地理2D CRSと楕円高を結合したものです。例6-13に、SRID 4327を使用して地理3D CRSを作成する文を示します(SRID 4327はSpatial and Graphに同梱されています)。この定義は、既存の投影座標系(ID 6401、「SDO_COORD_SYS表」を参照)およびデータ(ID 6326、「SDO_DATUMS表」を参照)を参照します。

例6-13 地理3D座標参照系の作成

INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
   SRID,
   COORD_REF_SYS_NAME,
   COORD_REF_SYS_KIND,
   COORD_SYS_ID,
   DATUM_ID,
   GEOG_CRS_DATUM_ID,
   SOURCE_GEOG_SRID,
   PROJECTION_CONV_ID,
   CMPD_HORIZ_SRID,
   CMPD_VERT_SRID,
   INFORMATION_SOURCE,
   DATA_SOURCE,
   IS_LEGACY,
   LEGACY_CODE,
   LEGACY_WKTEXT,
   LEGACY_CS_BOUNDS,
   IS_VALID,
   SUPPORTS_SDO_GEOMETRY)
 VALUES (
   4327,
   'WGS 84 (geographic 3D)',
   'GEOGRAPHIC3D',
   6401,
   6326,
   6326,
   NULL,
   NULL,
   NULL,
   NULL,
   'NIMA TR8350.2 January 2000 revision. http://164.214.2.59/GandG/tr8350_2.html',
   'EPSG',
   'FALSE',
   NULL,
   NULL,
   NULL,
   'TRUE',
   'TRUE');

6.9.6 変換操作の作成

「投影CRSの作成」で、投影CRSを作成するために投影操作を作成する方法について説明しました。正標高に基づく複合CRSを使用する場合にも、同様の要件が起こる可能性があります。ジオイド高と楕円体高の間で変換した方がよい場合があるためです。2つの高さの間のオフセットは一定ではなく、不規則です。

Spatial and Graphのデフォルトでは、ID変換を使用して楕円体高と正標高の間の変換が行われます。(異なる楕円体の間の変換は、デフォルトではID変換ではなくデータ変換で行われます。)ID変換は合理的な近似化の方法です。ただし、この方法より正確な変換方法としてEPSGタイプ9635の操作があり、この操作ではオフセット・マトリックスが使用されます。例6-14は、このような操作を宣言しています。

例6-14 変換操作の作成

INSERT INTO MDSYS.SDO_COORD_OPS (
   COORD_OP_ID,
   COORD_OP_NAME,
   COORD_OP_TYPE,
   SOURCE_SRID,
   TARGET_SRID,
   COORD_TFM_VERSION,
   COORD_OP_VARIANT,
   COORD_OP_METHOD_ID,
   UOM_ID_SOURCE_OFFSETS,
   UOM_ID_TARGET_OFFSETS,
   INFORMATION_SOURCE,
   DATA_SOURCE,
   SHOW_OPERATION,
   IS_LEGACY,
   LEGACY_CODE,
   REVERSE_OP,
   IS_IMPLEMENTED_FORWARD,
   IS_IMPLEMENTED_REVERSE)
 VALUES (
   999998,
   'Test operation, based on GEOID03 model, using Hawaii grid',
   'TRANSFORMATION',
   NULL,
   NULL,
   NULL,
   NULL,
   9635,
   NULL,
   NULL,
   'NGS',
   'NGS',
   1,
   'FALSE',
   NULL,
   1,
   1,
   1);
 
INSERT INTO MDSYS.SDO_COORD_OP_PARAM_VALS (
   COORD_OP_ID,
   COORD_OP_METHOD_ID,
   PARAMETER_ID,
   PARAMETER_VALUE,
   PARAM_VALUE_FILE_REF,
   UOM_ID)
 VALUES (
   999998,
   9635,
   8666,
   NULL,
   'g2003h01.asc',
   NULL);

例6-14の2つ目のINSERT文では、ファイル名g2003h01.ascが指定されていますが、オフセット・マトリックスを使用する実際のCLOBコンテンツはまだ指定されていません。NADCONおよびNTv2のマトリックスの場合と同様に、ジオイド・マトリックスをPARAM_VALUE_FILE列にロードする必要があります。紙面および著作権の関係で、これらのマトリックスのほとんどは、Oracleから提供されませんが、通常、Webからダウンロードできます。該当する政府機関のWebサイトがよい情報源で、ファイル名(この例のg2003h01など)を使用して検索できます。これらのファイルのうち一部は、バイナリ形式(.gsbなど)とASCII形式(.gsaまたは.ascなど)の両方が用意されていますが、Spatial and Graphで使用できるのはASCII形式のみです。既存のEPSG操作には、標準で使用されるファイル名が含まれます。

例6-15 オフセット・マトリックスのロード

DECLARE
  ORCL_HOME_DIR VARCHAR2(128);
  ORCL_WORK_DIR VARCHAR2(128);
  Src_loc       BFILE;
  Dest_loc      CLOB;
  CURSOR PARAM_FILES IS
    SELECT
      COORD_OP_ID,
      PARAMETER_ID,
      PARAM_VALUE_FILE_REF
    FROM
      MDSYS.SDO_COORD_OP_PARAM_VALS
    WHERE
      PARAMETER_ID IN (8656, 8657, 8658, 8666);
  PARAM_FILE PARAM_FILES%ROWTYPE;
  ACTUAL_FILE_NAME VARCHAR2(128);
  platform NUMBER;
  dest_offset  number := 1;
  src_offset   number := 1;
  lang_context number := 0;
  warning      number;
BEGIN
  EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY work_dir AS ''define_your_source_directory_here''';
 
  FOR PARAM_FILE IN PARAM_FILES LOOP
    CASE UPPER(PARAM_FILE.PARAM_VALUE_FILE_REF)
      /* NTv2, fill in your files here */
      WHEN 'NTV2_0.GSB'   THEN ACTUAL_FILE_NAME := 'ntv20.gsa';
      /* GEOID03, fill in your files here */
      WHEN 'G2003H01.ASC' THEN ACTUAL_FILE_NAME := 'g2003h01.asc';
      ELSE                     ACTUAL_FILE_NAME := NULL;
    END CASE;
 
    IF(NOT (ACTUAL_FILE_NAME IS NULL)) THEN
      BEGIN
        dbms_output.put_line('Loading file ' || actual_file_name || '...');
        Src_loc := BFILENAME('WORK_DIR', ACTUAL_FILE_NAME);
        DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
      END;
 
      UPDATE
        MDSYS.SDO_COORD_OP_PARAM_VALS
      SET
        PARAM_VALUE_FILE = EMPTY_CLOB()
      WHERE
        COORD_OP_ID = PARAM_FILE.COORD_OP_ID AND
        PARAMETER_ID = PARAM_FILE.PARAMETER_ID
      RETURNING
        PARAM_VALUE_FILE INTO Dest_loc;
 
      DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);

      -- DBMS_LOB.LOADFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE);
      dbms_lob.loadclobfromfile (
         dest_lob     => dest_loc,
         src_bfile    => src_loc,
         amount       => DBMS_LOB.LOBMAXSIZE,
         dest_offset  => dest_offset,
         src_offset   => src_offset,
         bfile_csid   => 0,
         lang_context => lang_context,
         warning      => warning);

      DBMS_LOB.CLOSE(Dest_loc);
      DBMS_LOB.CLOSE(Src_loc);
      DBMS_LOB.FILECLOSE(Src_loc);
    END IF;
  END LOOP;
END;
/

例6-15は、このような一連のマトリックスをロードするスクリプトです。これは、指定した物理ファイル(ntv20.gsaなど)が、公式なファイル名参照(NTV2_0.GSBなど)に基づいて、データベースCLOBにロードされます。

6.9.7 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用

投影座標参照系でBritish Grid Transformation OSTN02/OSGM02 (EPSG method 9633)を使用するには、最初にSDO_COORD_OP_PARAM_VALS表(「SDO_COORD_OP_PARAM_VALS表」を参照)のPARAM_VALUE_FILE列(CLOB型)に変更されたバージョンのOSTN02_OSGM02_GB.txt格子ファイルを挿入する必要があります。OSTN02_OSGM02_GB.txtファイルには、EPSG変換メソッド9633の基になっているオフセット・マトリックスが含まれています。

次の手順に従います。

  1. ファイルhttp://www.ordnancesurvey.co.uk/docs/gps/ostn02-osgm02-files.zipをダウンロードします
  2. この.zipファイルからOSTN02_OSGM02_GB.txtというファイルを展開します。
  3. OSTN02_OSGM02_GB.txtのコピーを編集して、現在のファイルの最初の行の前に次の行を挿入します。
    SDO Header
    x: 0.0 - 700000.0
    y: 0.0 - 1250000.0
    x-intervals: 1000.0
    y-intervals: 1000.0
    End of SDO Header
    

    編集操作後のファイルの内容は次のようになります。

    SDO Header
    x: 0.0 - 700000.0
    y: 0.0 - 1250000.0
    x-intervals: 1000.0
    y-intervals: 1000.0
    End of SDO Header
    1,0,0,0.000,0.000,0.000,0
    2,1000,0,0.000,0.000,0.000,0
    3,2000,0,0.000,0.000,0.000,0
    4,3000,0,0.000,0.000,0.000,0
    5,4000,0,0.000,0.000,0.000,0
    . . .
    876949,698000,1250000,0.000,0.000,0.000,0
    876950,699000,1250000,0.000,0.000,0.000,0
    876951,700000,1250000,0.000,0.000,0.000,0
  4. 異なる名前(たとえば、my_OSTN02_OSGM02_GB.txt)を使用して、編集したファイルを保存します。
  5. SDO_COORD_OP_PARAM_VALS表で、PARAM_VALUE_FILE_REF値にOSTN02_OSGM02_GB.TXTを持つEPSG method 9633の各操作に対して、保存したファイルの内容(たとえば、my_OSTN02_OSGM02_GB.txtの内容)になるようにPARAM_VALUE_FILE列を更新します。例6-16に示すようなコーディングを使用できます。

例6-16 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用

DECLARE
  ORCL_HOME_DIR VARCHAR2(128);
  ORCL_WORK_DIR VARCHAR2(128);
  Src_loc       BFILE;
  Dest_loc      CLOB;
  CURSOR PARAM_FILES IS
    SELECT
      COORD_OP_ID,
      PARAMETER_ID,
      PARAM_VALUE_FILE_REF
    FROM
      MDSYS.SDO_COORD_OP_PARAM_VALS
    WHERE
      PARAMETER_ID IN (8656, 8657, 8658, 8664, 8666)
    order by
      COORD_OP_ID,
      PARAMETER_ID;
  PARAM_FILE PARAM_FILES%ROWTYPE;
  ACTUAL_FILE_NAME VARCHAR2(128);
  platform NUMBER;
BEGIN
  EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY work_dir AS ''' || system.geor_dir || '''';
 
  FOR PARAM_FILE IN PARAM_FILES LOOP
    CASE UPPER(PARAM_FILE.PARAM_VALUE_FILE_REF)
      /* NTv2 */
      WHEN 'NTV2_0.GSB'   THEN ACTUAL_FILE_NAME := 'ntv20.gsa';
      /* GEOID03 */
      WHEN 'G2003H01.ASC' THEN ACTUAL_FILE_NAME := 'g2003h01.asc';
      /* British Ordnance Survey (9633) */
      WHEN 'OSTN02_OSGM02_GB.TXT'
                          THEN ACTUAL_FILE_NAME := 'my_OSTN02_OSGM02_GB.txt';
      ELSE                ACTUAL_FILE_NAME := NULL;
    END CASE;
 
    IF(NOT (ACTUAL_FILE_NAME IS NULL)) THEN
      BEGIN
        dbms_output.put_line('Loading file ' || actual_file_name || '...');
        Src_loc := BFILENAME('WORK_DIR', ACTUAL_FILE_NAME);
        DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
      END;
 
      UPDATE
        MDSYS.SDO_COORD_OP_PARAM_VALS
      SET
        PARAM_VALUE_FILE = EMPTY_CLOB()
      WHERE
        COORD_OP_ID = PARAM_FILE.COORD_OP_ID AND
        PARAMETER_ID = PARAM_FILE.PARAMETER_ID
      RETURNING
        PARAM_VALUE_FILE INTO Dest_loc;
 
      DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);
      DBMS_LOB.LOADFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE);
      DBMS_LOB.CLOSE(Dest_loc);
      DBMS_LOB.CLOSE(Src_loc);
      DBMS_LOB.FILECLOSE(Src_loc);
    END IF;
  END LOOP;
END;
/

格子ファイルにヘッダー情報を追加する必要があるのは、British Grid Transformation OSTN02/OSGM02の場合のみであることに注意してください。NADCON、NTv2またはVERTCONマトリックスには様々な形式のヘッダーがすでに含まれているため、追加する必要はありません。

関連情報については、次も参照してください。

6.10 座標系サポートでの注意事項および制限事項

今回のリリースのOracle Spatial and Graphでは、次の注意事項および制限事項が座標系のサポートに適用されます。

測地データを使用する場合の考慮事項、ガイドラインおよび制限事項については、「測地座標のサポート」を参照してください。

トピック:

6.10.1 演算子およびファンクションでの座標系が異なるジオメトリの使用

入力パラメータとして2つのジオメトリを取る空間演算子(「空間演算子」を参照)では、それらのジオメトリが異なる座標系に基づいている場合、操作が実行される前に、問合せウィンドウ(2つ目のジオメトリ)が1つ目のジオメトリの座標系に変換されます。この変換は、Spatial and Graphが実行する一時内部操作であり、格納されたすべての問合せウィンドウ・ジオメトリには影響を及ぼしません。

入力パラメータとして2つのジオメトリを取るSDO_GEOMパッケージ・ジオメトリ・ファンクション(「SDO_GEOMパッケージ(ジオメトリ)」を参照)では、両方のジオメトリが同じ座標系に基づいている必要があります。

6.10.2 測地データでサポートされない3D LRSファンクション

今回のリリースでは、LRSファンクションの3D形式(「LRSファンクションの3D形式」を参照)は測地データでサポートされていません。

6.10.3 測地データでの近似処理によってサポートされるファンクション

今回のリリースでは、次のファンクションが近似処理によって測地データでサポートされています。

これらのファンクションを測地座標を含むデータに対して使用した場合、暗黙的に生成されたローカル交差平面デカルト座標系で内部操作が実行され、その結果が測地座標系に変換されます。SDO_GEOM.SDO_BUFFERでは、生成された円弧が元の形式に戻される前に線セグメントによって近似処理されます。

6.10.4 unknown CRSおよびNaC座標参照系

次の座標参照系は、Oracle内部と特殊用途で使用するためのものです。

  • unknown CRS (SRID 999999)は、座標系が不明であることを意味し、その空間は測地の場合もデカルトの場合もあります。NULL座標参照系は、これとは異なり、デカルト空間を持つ不明な座標系を示します。

  • NaC (SRID 999998)は、Not-a-CRS (非CRS)を意味します。この名前は、JavaのNaN (Not-a-Number、非数値)を参考にして名付けられました。これは、非空間ジオメトリで使用することを意図しています。

次の制限は、unknown CRSおよびNaC座標参照系をベースとするジオメトリに適用されます。

  • これらのジオメトリに対して座標系変換を実行することはできません。

  • 座標系を必要とする操作をこれらのジオメトリに対して実行すると、NULL値が戻ります。このような操作には、ジオメトリの面積または外周の取得、バッファの作成、円弧の稠密化、集計重心の計算などがあります。

6.11 U.S. National Gridのサポート

U.S. National Gridは、1つの英数字座標(たとえば、18SUJ2348316806479498)を使用して点の座標を表現します。

これは、Oracle Spatial and GraphやEPSGのように数字座標を使用して点の位置を表す方法とは対照的な方法です。U.S. National Gridの説明は、http://www.ngs.noaa.gov/TOOLS/usng.htmlを参照してください。

Spatial and GraphでU.S. National Gridをサポートする場合、SDO_GEOMETRY型は使用できません(この型は、数字座標を基準にしています)。かわりに、U.S. National Grid形式の点は、1つのVARCHAR2型の文字列として表現されます。SDO_CSパッケージ(「SDO_CSパッケージ(座標系変換)」を参照)には、SDO_GEOMETRY形式とU.S. National Grid形式の間で変換を行うために、次のファンクションが用意されています。

6.12 ジオハッシュのサポート

ジオハッシュは経度/緯度点の標準的な文字列エンコーディングです。

先進の地理空間機能を備えていないサードパーティ・ソフトウェアの中には、ある種の単純で限定的な地理データの分析をサポートし、ジオハッシュとの親和性があるものもあります。たとえば、オブジェクト間のおおよその距離は、ジオハッシュの共通の接頭辞の長さに基づいて推測できます。

ジオハッシュの詳細は、https://en.wikipedia.org/wiki/Geohashを参照してください。

ジオハッシュをサポートする場合、SDO_GEOMETRY型は直接使用できません。かわりに、SDO_CSパッケージ(「SDO_CSパッケージ(座標系変換)」を参照)を使用してSDO_GEOMETRYとジオハッシュ形式との間で変換したり、他のジオハッシュ関連の操作を実行します。パッケージにはジオハッシュ・サポートに関連する次のサブプログラムが含まれています。

6.13 Google Mapsに関する考慮事項

Google Mapsでは、Oracle Spatial and Graphによって使用される楕円体の計算ではなく、その投影で球体の計算を使用します。この違いによって、Oracle Spatial and Graphの楕円体投影に基づいた地図でGoogle Mapsに基づいた地図をオーバーレイする場合など、アプリケーションで不整合が発生する場合があります。

たとえば、Oracle Spatial and Graphでの楕円体SRID 8307から球体SRID 3785への変換では、デフォルトで異なる楕円体の形状が考慮されますが、Google Mapsでは楕円体の形状は考慮されません。

Oracle Spatial and GraphでGoogle Mapsの結果に対応する必要がある場合は、次のオプションを検討してください。

  • 楕円体SRID 8307ではなく球体SRID 4055を使用する。これは最も簡単な方法ですが、(サード・パーティのツールなど)SRID 8307に基づいたデータを球体として扱う必要がある場合に、別のオプションを使用する必要があります。

  • SRID 3785ではなくSRID 3857を使用する。SRID 3857を使用すると、EPSGルールを宣言したり、Google互換の結果を生成するためにユースケース名USE_SPHERICALを指定する必要がないため、次の2つのオプションよりも便利です。

  • 楕円体座標系と球体座標系の間のEPSGルールを宣言する。たとえば、次の例のように、SRID 8307と3785の間のEPSGルールを宣言し、SRID 8307の楕円体の形状を無視します。

    CALL sdo_cs.create_pref_concatenated_op(
      302,
      'CONCATENATED OPERATION',
      TFM_PLAN(SDO_TFM_CHAIN(8307, 1000000000, 4055, 19847, 3785)),
      NULL);
    

    この例では、操作1000000000無操作を表すため、楕円体と球体の間のデータ変換は無視されます。

    この方法では、必要なSRIDペア(楕円体と球体)ごとにルールを宣言する必要があります。

  • 次の例のように、SDO_CS.TRANSFORMファンクションまたはSDO_CS.TRANSFORM_LAYERプロシージャを使用して、ユースケース名USE_SPHERICALを指定する。

    SELECT
      SDO_CS.TRANSFORM(
        sdo_geometry(
          2001,
          4326,
          sdo_point_type(1, 1, null),
          null,
          null),
        'USE_SPHERICAL',
        3785)
    FROM DUAL;
    
    CALL SDO_CS.TRANSFORM_LAYER(
      'source_geoms',
      'GEOMETRY',
      'GEO_CS_3785_SPHERICAL',
      'USE_SPHERICAL',
      3785);
    

    use_caseパラメータ値にUSE_SPHERICALを指定すると、変換はデフォルトで楕円体の計算ではなく球体の計算を使用するため、球体の計算を使用するGoogle Mapsおよびその他のサード・パーティのツールに対応できます。

    この方法('USE_SPHERICAL'を指定する)を使用したうえ、2つの指定されたSRID間の変換で楕円体の計算を使用する必要があるEPSGルールも宣言した場合は、宣言したEPSGルールが優先され、それら2つのSRID間の変換には楕円体の計算が使用されます。

6.14 座標系変換の例

このトピックでは、座標系変換ファンクションおよびプロシージャを使用する簡単な例を示します。

この章で説明する概念および「SDO_CSパッケージ(座標系変換)」で説明するファンクションを使用します。

例6-17 座標系変換の簡単な例

例6-17では、主に、「空間データの挿入、索引付けおよび問合せの例」で使用したジオメトリ・データ(cola markets)を使用します(ただし、SDO_SRIDの値はNULLではなく8307です)。つまり、ジオメトリは、SRID値が8307でwell-known nameが「Longitude / Latitude (WGS 84)」である座標系を使用するように定義されます。これは、最も一般的な座標系であり、Global Positioning System (GPS)デバイスで使用されます。ジオメトリは、SRID値が8199でwell-known nameが「Longitude / Latitude (Arc 1950)」の座標系を使用して変換されます。

例6-17では、「空間データの挿入、索引付けおよび問合せの例」に示すジオメトリを使用します(ただし、円弧は測地座標系でサポートされていないため、cola_dは円ではなく矩形(ここでは、正方形)です)。

例6-17では、次の処理を行います。

  • 空間データを格納するための表(COLA_MARKETS_CS)を作成する

  • SDO_SRID値8307を使用して、4つの対象領域(cola_acola_bcola_ccola_d)の行を挿入する

  • SDO_SRID値8307を使用して、USER_SDO_GEOM_METADATAビューを更新し、その領域の次元を反映する

  • 空間索引(COLA_SPATIAL_IDX_CS)を作成する

  • (単一ジオメトリおよびレイヤー全体の)変換操作を実行する

-- Create a table for cola (soft drink) markets in a
-- given geography (such as city or state).

CREATE TABLE cola_markets_cs (
  mkt_id NUMBER PRIMARY KEY,
  name VARCHAR2(32),
  shape SDO_GEOMETRY);

-- The next INSERT statement creates an area of interest for 
-- Cola A. This area happens to be a rectangle.
-- The area could represent any user-defined criterion: for
-- example, where Cola A is the preferred drink, where
-- Cola A is under competitive pressure, where Cola A
-- has strong growth potential, and so on.
 
INSERT INTO cola_markets_cs VALUES(
  1,
  'cola_a',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    8307,  -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), -- polygon
    SDO_ORDINATE_ARRAY(1,1, 5,1, 5,7, 1,7, 1,1) -- All vertices must
              -- be defined for rectangle with geodetic data.
  )
);

-- The next two INSERT statements create areas of interest for 
-- Cola B and Cola C. These areas are simple polygons (but not
-- rectangles).

INSERT INTO cola_markets_cs VALUES(
  2,
  'cola_b',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    8307,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
    SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
  )
);

INSERT INTO cola_markets_cs VALUES(
  3,
  'cola_c',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    8307,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), --one polygon (exterior polygon ring)
    SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
  )
);

-- Insert a rectangle (here, square) instead of a circle as in the original,
-- because arcs are not supported with geodetic coordinate systems.
INSERT INTO cola_markets_cs VALUES(
  4,
  'cola_d',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    8307,  -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), -- polygon
    SDO_ORDINATE_ARRAY(10,9, 11,9, 11,10, 10,10, 10,9) -- All vertices must
              -- be defined for rectangle with geodetic data.
  )
);

---------------------------------------------------------------------------
-- UPDATE METADATA VIEW --
---------------------------------------------------------------------------
-- Update the USER_SDO_GEOM_METADATA view. This is required
-- before the spatial index can be created. Do this only once for each
-- layer (table-column combination; here: cola_markets_cs and shape).

INSERT INTO user_sdo_geom_metadata
    (TABLE_NAME,
     COLUMN_NAME,
     DIMINFO,
     SRID)
  VALUES (
  'cola_markets_cs',
  'shape',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10),  -- 10 meters tolerance
    SDO_DIM_ELEMENT('Latitude', -90, 90, 10)  -- 10 meters tolerance
     ),
  8307   -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
);

-------------------------------------------------------------------
-- CREATE THE SPATIAL INDEX --
-------------------------------------------------------------------
CREATE INDEX cola_spatial_idx_cs
ON cola_markets_cs(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX_V2;

-------------------------------------------------------------------
-- TEST COORDINATE SYSTEM TRANSFORMATION --
-------------------------------------------------------------------

-- Return the transformation of cola_c using to_srid 8199 
-- ('Longitude / Latitude (Arc 1950)')
SELECT c.name, SDO_CS.TRANSFORM(c.shape, 8199) 
  FROM cola_markets_cs c WHERE c.name = 'cola_c';
 
-- Same as preceding, but using to_srname parameter.
SELECT c.name, SDO_CS.TRANSFORM(c.shape, 'Longitude / Latitude (Arc 1950)') 
  FROM cola_markets_cs c  WHERE c.name = 'cola_c';

-- Transform the entire SHAPE layer and put results in the table
-- named cola_markets_cs_8199, which the procedure will create.
CALL SDO_CS.TRANSFORM_LAYER('COLA_MARKETS_CS','SHAPE','COLA_MARKETS_CS_8199',8199);

-- Select all from the old (existing) table.
SELECT * from cola_markets_cs;

-- Select all from the new (layer transformed) table.
SELECT * from cola_markets_cs_8199;

-- Show metadata for the new (layer transformed) table.
DESCRIBE cola_markets_cs_8199;

-- Use a geodetic MBR with SDO_FILTER.
SELECT c.name FROM cola_markets_cs c WHERE
   SDO_FILTER(c.shape, 
       SDO_GEOMETRY(
           2003,
           8307,    -- SRID for WGS 84 longitude/latitude
           NULL,
           SDO_ELEM_INFO_ARRAY(1,1003,3),
           SDO_ORDINATE_ARRAY(6,5, 10,10))
       ) = 'TRUE';

例6-18に、例6-17のSELECT文の出力結果を示します。元のジオメトリ(SRID 8307)の座標と変換された座標(SRID 8199)の違いに注目してください。たとえば、cola_aについては、(1, 1, 5, 1, 5, 7, 1, 7, 1, 1)と(1.00078604, 1.00274579, 5.00069354, 1.00274488, 5.0006986, 7.00323528, 1.00079179, 7.00324162, 1.00078604, 1.00274579)です。

例6-18 座標系変換の例でのSELECT文の出力

SQL> -- Return the transformation of cola_c using to_srid 8199
SQL> -- ('Longitude / Latitude (Arc 1950)')
SQL> SELECT c.name, SDO_CS.TRANSFORM(c.shape, 8199)
  2    FROM cola_markets_cs c WHERE c.name = 'cola_c';
 
NAME                                                                            
--------------------------------                                                
SDO_CS.TRANSFORM(C.SHAPE,8199)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))                                      
 
SQL> 
SQL> -- Same as preceding, but using to_srname parameter.
SQL> SELECT c.name, SDO_CS.TRANSFORM(c.shape, 'Longitude / Latitude (Arc 1950)')
  2    FROM cola_markets_cs c  WHERE c.name = 'cola_c';
 
NAME                                                                            
--------------------------------                                                
SDO_CS.TRANSFORM(C.SHAPE,'LONGITUDE/LATITUDE(ARC1950)')(SDO_GTYPE, SDO_SRID, SDO
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))                                      

SQL> 
SQL> -- Transform the entire SHAPE layer and put results in the table
SQL> -- named cola_markets_cs_8199, which the procedure will create.
SQL> CALL SDO_CS.TRANSFORM_LAYER('COLA_MARKETS_CS','SHAPE','COLA_MARKETS_CS_8199',8199);

Call completed.

SQL> 
SQL> -- Select all from the old (existing) table.
SQL> SELECT * from cola_markets_cs;

    MKT_ID NAME                                                                 
---------- --------------------------------                                     
SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)    
--------------------------------------------------------------------------------
         1 cola_a                                                               
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1, 1, 5, 1, 5, 7, 1, 7, 1, 1))                                               
                                                                                
         2 cola_b                                                               
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))                                               
                                                                                
         3 cola_c                                                               

    MKT_ID NAME                                                                 
---------- --------------------------------                                     
SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)    
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3, 3, 6, 3, 6, 5, 4, 5, 3, 3))                                               
                                                                                
         4 cola_d                                                               
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(10, 9, 11, 9, 11, 10, 10, 10, 10, 9))                                        
                                                                                

SQL> 
SQL> -- Select all from the new (layer transformed) table.
SQL> SELECT * from cola_markets_cs_8199;

SDO_ROWID                                                                       
------------------                                                              
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES) 
--------------------------------------------------------------------------------
AAABZzAABAAAOa6AAA                                                              
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1.00078604, 1.00274579, 5.00069354, 1.00274488, 5.0006986, 7.00323528, 1.0007
9179, 7.00324162, 1.00078604, 1.00274579))                                      
                                                                                
AAABZzAABAAAOa6AAB                                                              
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5.00069354, 1.00274488, 8.00062191, 1.00274427, 8.00062522, 6.00315345, 5.000
6986, 7.00323528, 5.00069354, 1.00274488))                                      

SDO_ROWID                                                                       
------------------                                                              
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES) 
--------------------------------------------------------------------------------
                                                                                
AAABZzAABAAAOa6AAC                                                              
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))                                      
                                                                                
AAABZzAABAAAOa6AAD                                                              
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(10.0005802, 9.00337775, 11.0005553, 9.00337621, 11.0005569, 10.0034478, 10.00

SDO_ROWID                                                                       
------------------                                                              
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES) 
--------------------------------------------------------------------------------
05819, 10.0034495, 10.0005802, 9.00337775))                                     
                                                                                

SQL> 
SQL> -- Show metadata for the new (layer transformed) table.
SQL> DESCRIBE cola_markets_cs_8199;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SDO_ROWID                                          ROWID
 GEOMETRY                                           SDO_GEOMETRY

SQL> 
SQL> -- Use a geodetic MBR with SDO_FILTER
SQL> SELECT c.name FROM cola_markets_cs c WHERE
  2     SDO_FILTER(c.shape,
  3         SDO_GEOMETRY(
  4             2003,
  5             8307,    -- SRID for WGS 84 longitude/latitude
  6             NULL,
  7             SDO_ELEM_INFO_ARRAY(1,1003,3),
  8             SDO_ORDINATE_ARRAY(6,5, 10,10))
  9         ) = 'TRUE';

NAME
--------------------------------
cola_c
cola_b
cola_d