この章では、Oracle Spatialでの座標系サポートの詳細を説明します(このサポートの概要については、1.5.4項を参照してください)。様々な座標系でSDO_GEOMETRYオブジェクトを格納および操作できます。
MDSYS.SDO_CSパッケージに含まれる座標系の変換ファンクションおよびプロシージャについては、第21章を参照してください。
この章の内容は次のとおりです。
この項では、Oracle Spatialでサポートされる座標系に関連する重要な用語および概念について説明します。
座標系(空間参照システム)は、座標を位置に割り当て、そのような座標間の関連を確立するための手段を提供します。これによって、実際の空間における位置表現として、座標を変換することが可能になります。
座標参照系という用語の意味は、Spatialでの「座標系」と同じであり、この2つの用語は区別なく使用されます。European Petroleum Survey Group(EPSG)の規格とドキュメントでは、通常は、座標参照系という用語が使用されています。(EPSGでは、「座標系」という用語に独自の意味があります。詳細は、6.7.11項を参照してください。)
測地座標(地理座標)は、角度を持つ座標(経度および緯度)であり、球体の極点の座標と密接に関連し、また、地球上の特定の測地データに関連付けて定義されます(6.1.6を参照)。測地座標のサポートの詳細は、6.2項を参照してください。
Oracle9i 以上のSpatialでは、測地座標の合理的かつ完全な処理が提供されます。Oracle9i より前のSpatialでの計算は、ジオメトリのレイヤーに対して指定された座標系に関係なく、平面(デカルト)座標のみに基づいていました。したがって、測地座標系のデータの計算では、常に座標が平面上にある場合と同様に処理され、表面の曲率が考慮されないため、計算が不正確でした。
リリース2(9.2)以上では、指定された測地座標系での地球の曲率を考慮して楕円体の表面が計算されるため、正確な結果が得られます。そのため、空間問合せは常に正しい回答を戻します。
2次元のジオメトリは面ジオメトリですが、面を正確に定義しておくことが必要です。平らな面(平面)は、デカルト座標によって正確に表現されます。ただし、デカルト座標は、ソリッドの表面の表現には適していません。一般的に使用される空間ジオメトリの表面は地表面ですが、地表面でのジオメトリの法則は平面での法則とは異なります。たとえば、地表面に平行線はなく、線は測地線であり、すべての測地線は交差します。そのため、デカルト・ジオメトリでは閉曲面の問題を正確に処理できません。
Spatialでは、データを平面上に投影せずに、座標系または関連する地域のサイズに関係なく正確な結果を提供します。問合せが地表面上のどの部分を対象にしているかに関係なく、極などの特殊な地域でも、正確な結果が得られます。そのため、選択した任意のデータおよび投影に座標を格納し、座標系に関係なく正確な問合せを実行できます。
地表面を処理するアプリケーションでは、データは、測地座標系または投影平面座標系を使用して表現できます。どちらの方法を使用するかは、次の精度およびパフォーマンスに関連するすべての要件を考慮してください。
精度
多くの空間アプリケーションは、非常に小さい地域を対象としているため、ローカル投影のデカルト座標上で正確な計算を行うことができます。たとえば、New Hampshire州平地のローカル投影では、その州のデータを使用するほとんどの空間アプリケーションで適切な精度が得られます。
ただし、カナダやスカンジナビアなどの広い地域については、平面投影上でのデカルト計算では正確な結果を得られません。たとえば、スウェーデンのストックホルムおよびフィンランドのヘルシンキが、指定した距離内にあるかどうかの問合せを実行した場合、指定した距離が実際の距離に近い値である場合は、不適切な結果が戻される場合があります。広い地域に関係する計算を行う場合または非常に高い精度を必要とする場合は、地表面の曲率を考慮する必要があります。
パフォーマンス
球体の計算は、デカルトの計算より多くの計算リソースを使用します。測地座標を使用する一部の操作では、同じ操作をデカルト座標を使用して行う場合よりも、完了までに時間がかかることがあります。
この項では、3次元データ(非楕円体または楕円体)の高さについて、その適切なタイプを選択するためのガイドラインを説明します。楕円体高は幅広く使用される、多くのGPSアプリケーションのデフォルトです。また、楕円体計算ではパフォーマンスのオーバーヘッドはあまり発生しません。ただし、アプリケーションの中には、非楕円体高の方が適切であったり、あるいは必須であるものもあります。
高さ基準のタイプは、最初の指定から変更することもできます。これは、異なる高さ基準間での変換がサポートされているためです。
非楕円体高は、準拠楕円体以外のある地点から測定されます。非楕円体における高さの一般的な測定値は、地表面、平均海水面(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つのデータセット全体を変換してもオーバーヘッドはそれほど大きくありませんが、個々のジオメトリに対して変換を頻繁に行うと、その累積オーバーヘッドが大きくなる場合があります。
楕円体高は、参照する楕円体のある地点から測定されます。楕円体は、地球を簡便かつ比較的忠実に表現した近似的なものです。地球を表現するために楕円体を使用すると、球体を使用する場合よりも複雑になりますが、ほとんどのアプリケーションでは、楕円体の使用は、ジオイドまたは局所的な高さを使用する場合よりも簡単です(ただし、精度の低下は多少あります)。さらに、ジオイド高および海水面高は、数学的な分析に適さない場合があります。これは、うねりがあり不規則な形状が、特定の計算を非常に複雑かつ高コストにするためです。
多くのGPSアプリケーションは、楕円体高を基準として想定し、デフォルトとして使用しています。その楕円体は、ジオイド(およびこれに近い海水面)と一致するように選択されるため、楕円体高とMSL高との差は大きくありません。たとえば、ジオイドとNAD83楕円体との差は、最大でも50メートルです。特定の国との一致がより正確になるとして、他の楕円体が選択されることがあります。
様々な団体が異なる楕円体を使用していても、WKTではその相違点を簡単に記述できます。単純なデータ変換は、楕円体間で効率的かつ正確に変換を実行できます。オフセット・マトリックスが含まれないため、ロード・オーバーヘッドは不要です。したがって、将来の要件または分析に、MSL、ジオイドまたは他の非楕円体高データの使用が必要になることがあっても、楕円体高を使用すると相互運用性が高くなります。
測地データに対する特定の操作の問合せウィンドウを作成するには、SDO_ETYPE値に1003または2003(最適化された矩形)を指定し、SDO_INTERPRETATION値に3を指定して、MBR(最小境界矩形)を使用します(2.2.4項の表2-2を参照)。測地MBRは、SDO_FILTER、ANYINTERACT
maskを指定したSDO_RELATE、SDO_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の出力を次に示します(6.13項の例6-17で定義されたデータを使用すると想定しています)。
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度に渡っています。
Spatialで問合せ用のMBRを内部的に作成する場合、緯度線に沿った線は、1度間隔で点を追加することで稠密化されます。これは、MBRの枠から数メートル以内にあるオブジェクト(特に両方の半球で中間緯度にあるオブジェクト)の結果に影響を及ぼす場合があります。
最適化された矩形の範囲が経度で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度から上の地球全体を示します。
測地座標系を使用する場合または変換を行う場合は(ある投影座標系から別の投影座標系への変換であっても)、次のジオメトリは使用できません。
円
円弧
測地座標系は、点または測地線(楕円体上の線)で構成されるジオメトリのみにサポートされます。投影座標系に円または円弧を含むジオメトリがある場合、それらのジオメトリを測地座標に変換する前に、SDO_GEOM.SDO_ARC_DENSIFYファンクション(第24章を参照)を使用してジオメトリを稠密化してから、結果のジオメトリに対してSpatial操作を実行することができます。
測地データを使用する場合、次のサイズ制限が適用されます。
ポリゴン要素は、地表面の半分以上の面積を持つことはできません。また、2つのポリゴンの和集合の結果が地表面の半分より大きい場合、操作によって正しい結果が生成されません。たとえば、AとBの和集合の結果が地表の領域の半分より大きいポリゴンの場合、AとBの差集合演算、AとBの積集合演算およびAとBのXOR演算はサポートされず、これら2つのポリゴン間でANYINTERACTマスクを指定したRELATE演算のみがサポートされます。
1つの線上の隣接する座標間の距離を、地球の外周(大円)の長さの半分以上にすることはできません。
これらの制限より大きい要素を使用する必要がある場合は、まず、これらの要素をより小さい複数の要素に分割してから使用します。たとえば、地球のすべての海洋面を表現するジオメトリは作成できませんが、それぞれが海洋面全体の一部を表現する複数のジオメトリ要素を作成することはできます。長さが地球外周の半分以上の線ストリングを処理する場合は、その線上に1つ以上の中間点を追加して、隣接する座標が地球の外周の半分未満になるようにします。
測地レイヤーでは、許容差がm単位で指定されます。通常、非測地データに使用される許容差を使用する場合、測地データでは、これらの値がm単位で解釈されます。たとえば、測地データに0.05の許容差を指定した場合、この値は5cmまでの精度で解釈されます。この値の精度がアプリケーションで必要とされる精度より高い場合、指定した精度の実装に必要な内部計算操作のために、パフォーマンスに影響を与える場合があります。(許容差の詳細は、1.5.5項を参照してください。)
測地レイヤーでは、索引メタデータの次元のエクステントを、経度に対しては-180,180、緯度に対しては-90,90に指定する必要があります。次の文(6.13項の例6-17から抜粋)は、測地データ・レイヤーに対して、これらのエクステント(次元ごとに10mの許容差を持つ)を指定します。
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.10項を参照してください。
Spatialでは、ローカル座標系に対してあるレベルのサポートが提供されます。ローカル座標系は、多くの場合、CADシステムで使用されます。また、調査対象地とそれ以外の地域の関係が重要でない現地測量にも使用できます。
Spatialでは、いくつかのローカル座標系が事前定義され、SDO_COORD_REF_SYS表(6.7.9項を参照)に含まれています。これらのローカル座標系は、名前が「Non-Earth」で始まり、様々な測定単位(m、mm、インチなど)に基づいて非地球デカルト座標系を定義します。
今回のリリースでは、ローカルと地表基準の座標系間での座標系変換は実行できません。ジオメトリまたはジオメトリのレイヤーをローカル座標系の間で変換する場合は、ローカル座標系の座標を1つの測定単位から別の測定単位にのみ変換できます(たとえば、インチからmmへの変換など)。ただし、SDO_RELATE、SDO_WITHIN_DISTANCEなどを使用した他のすべてのSpatial操作は、ローカル座標系で実行できます。
Oracle Spatial座標系のサポートは、European Petroleum Survey Group (EPSG)のデータ・モデルおよびデータセットに基づいています(ただし、常に同じとはかぎりません)。詳細は、http://www.epsg.org
を参照してください。詳細に説明されています。また、EPSG測地パラメータ・データセットのダウンロードには、「README」が含まれており、エンティティ関連(E-R)ダイアグラムが示されています。Oracle Spatialによる方法では、標準化、サポートの拡張、柔軟性などの面で、次のようなメリットがあります。
EPSGモデルは、包括的で広く受け入れられているデータ表現用の標準であるため、このモデルを扱い慣れているユーザーは、Spatialの記憶域と操作を容易に理解できます。
サポートされる座標系と、それに関連するデータ、楕円体および投影図が増加しています。たとえば、EPSGの一部の測地座標系および投影座標系については、それに対応する座標系が以前のリリースのSpatialではサポートされていませんでした。このような座標系が追加されたことで、サポートされる座標系が拡大しました。
データ変換が柔軟になりました。あるソースとターゲット座標系間で使用可能な変換パスはOracle定義の1種類のみではなく、代替パスを、特定の領域に対して適用するように指定したり(ユースケース)、システム全体のデフォルトとして指定できます。
この項の後半では、この柔軟性について説明します。
データ変換(ある座標系のデータを別の座標系に変換)に適用する変換ルールを指定できるようになりました。以前のリリースおよび今回のリリースのデフォルトでは、指定されたソースとターゲットの座標系のみに基づいて、事前定義済の中間変換手順を使用して変換が行われます。このデフォルトの処理は、正しい変換連鎖(優先する変換連鎖)が1つしか存在しないことを前提としています。
デフォルトでは、ソース座標系とターゲット座標系間でサポートされている変換ごとに、特定の変換メソッドが適用されます。たとえば、ある座標系からWGS 84 (経度/緯度)座標系への変換メソッドは500種類以上サポートされています(WGS 84のEPSG SRID値は4326)。たとえば、SRID 4605からSRID 4326に変換する場合は、COORD_OP_ID値が1445の変換メソッドを使用できます(この値は、座標系間の変換操作ごとに1つの行が含まれるSDO_COORD_OPS表(6.7.8項を参照)に示されます)。
ただし、任意のソース/ターゲットSRIDの組合せに対して別のメソッドを指定(Oracleから提供されているメソッドの中から選択)すると、デフォルトの変換を無視できます。ある変換をシステム全体のデフォルトとして新しく指定することもできます。また、名前付きのユースケースに変換を関連付け、空間ジオメトリのレイヤーを変換する際にそのユースケースを指定することもできます。(ユースケースは、単に、使用例や適用範囲に対して付けられる「Project XYZ」、「Mike's Favorite Transformations」などの名前です。ユースケースはデータベース・ユーザーやスキーマとは関係しません。)
ある変換を、システム全体のデフォルトに指定する場合、またはユースケースに関連付ける場合は、SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャを使用します。以前に指定したプリファレンスを削除する場合は、SDO_CS.REVOKE_PREFERENCE_FOR_OPプロシージャを使用します。
Spatialで座標系を変換する場合、使用する変換は、一般に次の手順によって決定されます。
ユースケースが指定されている場合は、そのユースケースに関連付けられている変換が適用されます。
ユースケースが指定されていない場合、指定されたソース/ターゲット座標系のペアに対して作成されたユーザー定義によるシステム全体の変換が存在すると、その変換が適用されます。
ユースケースが指定されておらず、指定されたソース/ターゲット座標系のペアに対するユーザー定義の変換も存在しない場合の動作は、SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャなどによってEPSGルールが作成済かどうかによって異なります。
EPSGルールが作成済で、この変換に対してEPSGルールが定義されている場合は、そのEPSG変換が適用されます。
EPSGルールが作成されていないか、または作成されていてもこの変換に対してEPSGルールが定義されていない場合は、Oracle Spatialのデフォルトの変換が適用されます。
Spatialで使用されるEPSGデータセットのバージョン番号を返すには、SDO_CS.GET_EPSG_DATA_VERSIONファンクションを使用します。
3次元の座標参照系に対するOracle SpatialのサポートはEPSGモデル(6.4項を参照)に準拠しており、次の種類の座標参照系を使用できます。
地理2D
投影2D
地理3D(地理2Dおよび楕円体高で構成され、経度、緯度および高さは同じ楕円体とデータに基づく)
複合(地理2Dおよび重力に関係する高さで構成されるか、または投影2Dおよび重力に関係する高さで構成される)
したがって3次元の座標参照系は、楕円体高に基づく座標参照系(地理3D(6.5.1項を参照))と、重力に関係する高さに基づく座標参照系(複合(6.5.2項を参照))の2つに分類されます。
3次元での計算結果は2次元での計算結果より正確で、とりわけ変換連鎖の場合の精度は2次元より3次元の方が高くなります。たとえば、ソースおよびターゲットのCRSやジオメトリには関係なく、内部的なデータ変換は常に3つの次元で行われます。2次元ジオメトリが含まれる場合は、次の項目が1つ以上発生する可能性があります。
入力または出力ジオメトリおよびCRSが2次元の場合、内部的に行われる3次元の計算では、(指定されない)高さの入力値はデフォルトでゼロ(楕円体の上、CRSに依存)になります。このことは、高さが厳密にゼロであると意図されている場合を除き、変換が不正確になる潜在的な原因となっています。(高さの値はもともと使用できないか重要ではないため、データは2次元となる可能性があります。これは、高さが正確にゼロであるとわかっているために、データが2つの次元で表現されることとは異なります。)
高さの変換結果が内部的にはゼロ以外になる場合があります。ターゲットCRSが2次元の場合、高さの値を扱うことができないため、高さの値は切り捨てられ、さらに不正確な結果になります。
さらに変換が続く場合は、高さの値が繰り返し切り捨てられることにより、結果はさらに不正確になります。不正確な高さの値を入力すると、高さの変換結果だけではなく経度および緯度の変換結果にも影響を与える可能性があることに注意してください。
ただし、ソースおよびターゲットCRSが3次元の場合は、高さの切り捨てが繰り返されることはありません。したがって、とりわけ変換連鎖の場合に、精度が高くなります。
Spatialでの3次元ジオメトリのサポートの概要は、1.11項を参照してください。
地理3D座標参照系は、経度および緯度の他に楕円体高に基づきます。楕円体高とは、(実際の地球を近似的に表現した)参照する楕円体に関連する高さのことです。CRSの3つの次元はすべて同じ楕円体に基づいています。
楕円体高を使用することにより、数学的な規則性および効率性に優れた内部操作をSpatialで行うことが可能です。一方、複合座標参照系では、オフセット・マトリックスに基づいて、さらに複雑な変換が要求されることがよくあります。そのような一部のマトリックスは、ダウンロードして構成する必要があります。さらに、これらのマトリックスでは、ディスク上およびメイン・メモリー内で大きなフットプリントを使用する可能性もあります。
サポートされる地理3D座標参照系は、SDO_CRS_GEOGRAPHIC3Dビュー(6.7.16項を参照)に表示されます。
複合3次元座標参照系は、地理2Dまたは投影2Dに加えて重力に関係する高さに基づきます。重力に関係する高さは、地球の重力の影響を受ける高さのことです。この場合、通常、基準となる高さ(ゼロ)は等ポテンシャル面であり、海面より上または下として定義されます。
重力には次に示すような不規則性があるため、重力に関係する高さの表現は楕円体高より複雑です。
正標高は、ジオイド上の高さとも呼ばれます。ジオイドは等ポテンシャル面で、正確ではありませんが、平均海水面とほぼ一致します。等ポテンシャル面は、各点が同じ重力ポテンシャル・レベルにある面です。地球は場所によって密度が異なるので、このような面には、多少のうねりが存在します。地球の密度の不規則性により、複数の等ポテンシャル面が存在し、相互に平行ではないことがあります。
平均海水面、特定の場所における海抜、または複数の検潮所を適合させるためにゆがめられた垂直ネットワークに対する相対的な高さ(NGVD 29など)
平均海水面はジオイドに近いですが、ジオイドと同一ではありません。ある特定地域の平均海水面の多くは、特定の港の平均海水面を基に定義されます。
サポートされる複合座標参照系は、SDO_CRS_COMPOUNDビュー(6.7.12項を参照)に表示されます。
水平CRSと垂直CRSを組み合せて、カスタマイズした複合座標参照系を作成できます。(水平CRSにはXおよびYまたは経度および緯度などの2つの次元が含まれ、垂直CRSにはZ、高さ、標高といった3番目の次元が含まれます。)複合CRSの作成方法は、6.9.4項を参照してください。
Spatialでは、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では、ジオイド高と楕円体高の間の変換を、オフセット格子Hawaiiを使用して構成します。SDO_CS.CREATE_PREF_CONCATENATED_OPプロシージャを使用して先にルールを作成しないと、格子は使用できないことに注意してください。
例6-3 ジオイド高と楕円体高の間の変換
-- 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)に変換されます。
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次元のWGS84 (4327)は、2次元のWGS84 (4326)に相当します。必要に応じて、戻されたジオメトリに含まれる頂点の高さの値を変更します。
SDO_CS.MAKE_3Dファンクションの使用方法には多数の選択肢がありますが、次の方法が最も簡単です。
2次元のソースSRIDを、2次元のWGS84(4326)に変換します。
SDO_CS.MAKE_3Dをコールしてジオメトリを3次元のWGS84(4327)に変換します。
3次元のWGS84(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)
WGS 84座標系に相当する3Dは何か(WGS 84座標系とは2D Oracle SRID 8308またはEPSG SRID 4326)の質問に対する回答には、次の2つが考えられます。
4979 (多くの場合またはほとんどの場合)、または
(地表面より上、海面より上または下など)高さをどうとらえるかによって異なります。
多くの異なる高さ基準があります。高さは次の基準に関連付けることができます。
楕円体(SRID値4327、43229および4979がOracle Spatialで事前定義されるGEOGRAPHIC3dという座標系の種類を使用する必要があります)。
非楕円体高基準(通常、カスタムSRIDを定義する必要があるCOMPOUNDという座標系の種類を使用する必要があります)。非楕円体高は、ジオイド、一部の局所的な海面や平均海水面(または局所的な海面網)、または高さの他の定義(地表面より上など)と関連させて指定できます。
2次元のWGS 84座標系に基づいて複合座標系(6.5.2項「複合座標参照系」を参照)を定義するには、最初に事前定義またはカスタムの垂直座標参照系(6.9.3項「垂直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楕円体とジオイドの間では、高さの変換を可能にするオフセット・マトリックスがあります。詳細は、次を参照してください。
オブジェクト型TFM_PLANは、SDO_CSパッケージのいくつかのサブプログラムで変換計画を指定する際に使用します。たとえば、2つの操作をTFM_PLAN型のパラメータで指定し、それらの操作で構成される連結操作を作成するには、SDO_CS.CREATE_CONCATENATED_OPプロシージャを使用します。
Oracle Spatialでは、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を示します。
座標系ファンクションおよびプロシージャは、Oracle Spatialで提供される表とビューの情報を使用します。この表とビューはMDSYSスキーマの一部ですが、パブリック・シノニムが定義されているため、表およびビューの名前の前にMDSYS.を指定する必要はありません。この表とビューの定義およびデータは、EPSGのデータ・モデルとデータセットに基づいています(6.4項を参照)。
座標系の表は、いくつかの一般的なカテゴリに分類されます。
座標系の一般的な情報: 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の説明の翻案または転載です。)6.7.28項では表とビューの関係を説明し、EPSGの表名とそれらの表に対応するOracle Spatialの名前を示します。6.7.29項では、EPSGベースの座標系に関する情報の検索方法を説明し、いくつかの例を紹介します。
Spatialでは、この項の表とビューの他に、レガシー表もいくつか提供しています(その表の定義とデータは、以前のリリースで使用されていた特定のSpatialシステム表と対応しています)。レガシー表の説明は、6.8項を参照してください。
注意: 座標系のサポートに使用されるすべての表およびビューでは、Oracleが提供するどのような情報も変更または削除しないでください。ユーザー定義の座標系を作成する場合は、6.9項を参照してください。 |
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表(6.7.2項を参照)のCOORD_AXIS_NAME_ID列の値と一致します。例: |
COORD_AXIS_ORIENTATION |
VARCHAR2(24) |
座標系軸の方位の向きです。例: |
COORD_AXIS_ABBREVIATION |
VARCHAR2(24) |
座標系軸の方位の略称です。例: |
UOM_ID |
NUMBER(10) |
軸に関連付けられている測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。 |
ORDER |
NUMBER(5) |
座標系内のこの軸の位置です(1、2または3)。 |
SDO_COORD_AXIS_NAMES表には、座標系の定義で使用可能な軸ごとに1つの行が含まれます。この表に含まれる列を、表6-2に示します。
SDO_COORD_OP_METHODS表には、座標系の変換メソッドごとに1つの行が含まれます。この表に含まれる列を、表6-3に示します。
表6-3 SDO_COORD_OP_METHODS表
列名 | データ型 | 説明 |
---|---|---|
COORD_OP_METHOD_ID |
NUMBER(10) |
座標系の変換メソッドのID番号です。例: |
COORD_OP_METHOD_NAME |
VARCHAR2(50) |
メソッドの名前です。例: |
LEGACY_NAME |
VARCHAR2(50) |
レガシーWKT文字列でのこの変換メソッドの名前です。この名前は、EPSGで使用される名前と構文が異なる場合があります。 |
REVERSE_OP |
NUMBER(1) |
各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現できる場合は |
INFORMATION_SOURCE |
VARCHAR2(254) |
この情報のソースです。例: |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供している組織です。例: |
IS_IMPLEMENTED_FORWARD |
NUMBER(1) |
順方向操作が実行される場合は |
IS_IMPLEMENTED_REVERSE |
NUMBER(1) |
逆方向操作が実行される場合は |
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表(6.7.3項を参照)のCOORD_OP_METHOD_ID列の値と一致します。 |
PARAMETER_ID |
NUMBER(10) |
変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(6.7.6項を参照)のPARAMETER_ID列の値と一致します。 |
LEGACY_PARAM_NAME |
VARCHAR2(80) |
パラメータのOpen GeoSpatial Consortium (OGC)名です。 |
SORT_ORDER |
NUMBER(5) |
このメソッドにおける一連のパラメータのうち、このパラメータの位置を示す番号です。例: |
PARAM_SIGN_REVERSAL |
VARCHAR2(3) |
各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現できる場合は |
SDO_COORD_OP_PARAM_VALS表には、座標系の各変換メソッドのパラメータ値に関する情報が含まれます。この表に含まれる列を、表6-5に示します。
表6-5 SDO_COORD_OP_PARAM_VALS表
列名 | データ型 | 説明 |
---|---|---|
COORD_OP_ID |
NUMBER(10) |
座標変換操作のID番号です。SDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID列の値と一致します。 |
COORD_OP_METHOD_ID |
NUMBER(10) |
座標操作メソッドのIDです。この値は、SDO_COORD_OP_METHODS表(6.7.3項を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。 |
PARAMETER_ID |
NUMBER(10) |
変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(6.7.6項を参照)の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表(6.7.27項を参照)のUOM_ID列の値と一致します。 |
SDO_COORD_OP_PARAMS表には、変換操作で使用可能なパラメータごとに1つの行が含まれます。この表に含まれる列を、表6-6に示します。
SDO_COORD_OP_PATHS表には、連結操作の最小単位の手順ごとに1つの行が含まれます。この表に含まれる列を、表6-7に示します。
表6-7 SDO_COORD_OP_PATHS表
列名 | データ型 | 説明 |
---|---|---|
CONCAT_OPERATION_ID |
NUMBER(10) |
連結操作のID番号です。この値は、COORD_OP_TYPE値が |
SINGLE_OPERATION_ID |
NUMBER(10) |
連結操作内のこの手順(最小単位の操作)に対応する1つの座標操作のID番号です。この値は、SDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID値と一致する必要があります。 |
SINGLE_OP_SOURCE_ID |
NUMBER(10) |
この手順の1つの座標操作に対するソースの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID値と一致する必要があります。 |
SINGLE_OP_TARGET_ID |
NUMBER(10) |
この手順の1つの座標操作に対するターゲットの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID値と一致する必要があります。 |
OP_PATH_STEP |
NUMBER(5) |
この連結操作内のこの手順(最小単位の操作)の順序番号です。 |
SDO_COORD_OPS表には、座標系間の変換操作ごとに1つの行が含まれます。この表に含まれる列を、表6-8に示します。
表6-8 SDO_COORD_OPS表
列名 | データ型 | 説明 |
---|---|---|
COORD_OP_ID |
NUMBER(10) |
座標変換操作のID番号です。例: |
COORD_OP_NAME |
VARCHAR2(80) |
操作の名前です。例: |
COORD_OP_TYPE |
VARCHAR2(24) |
操作のタイプです。 |
SOURCE_SRID |
NUMBER(10) |
変換を実行する際の変換元の座標系のSRIDです。例: |
TARGET_SRID |
NUMBER(10) |
変換を実行する際の変換先の座標系のSRIDです。例: |
COORD_TFM_VERSION |
VARCHAR2(24) |
EPSGによって座標変換に割り当てられた名前です。例: |
COORD_OP_VARIANT |
NUMBER(5) |
COORD_OP_METHOD_IDに指定されている一般的なメソッドの変数です。例: |
COORD_OP_METHOD_ID |
NUMBER(10) |
座標操作メソッドのIDです。この値は、SDO_COORD_OP_METHODS表(6.7.3項を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。1つのメソッドを複数の操作で使用できます。例: |
UOM_ID_SOURCE_OFFSETS |
NUMBER(10) |
ソース座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。 |
UOM_ID_TARGET_OFFSETS |
NUMBER(10) |
ターゲット座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
この情報のソースです。例: |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供している組織です。例: |
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) |
各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現可能と定義されている場合は |
IS_IMPLEMENTED_FORWARD |
NUMBER(1) |
順方向操作が実行される場合は |
IS_IMPLEMENTED_REVERSE |
NUMBER(1) |
逆方向操作が実行される場合は |
SDO_COORD_REF_SYS表には、座標参照系ごとに1つの行が含まれます。この表に含まれる列を、表6-9に示します。(SDO_COORD_REF_SYS表は、EPSG座標参照系の表を基にしています。)
注意: 挿入、更新、削除の各操作を実行する場合は、SDO_COORD_REF_SYSTEMビューで実行する必要があり、このビューには、SDO_COORD_REF_SYS表と同じ列が含まれています。SDO_COORD_REF_SYSTEMビューの説明は、6.7.10項を参照してください。 |
表6-9 SDO_COORD_REF_SYS表
列名 | データ型 | 説明 |
---|---|---|
SRID |
NUMBER(10) |
座標参照系のID番号です。例: |
COORD_REF_SYS_NAME |
VARCHAR2(80) |
座標参照系の名前です。例: |
COORD_REF_SYS_KIND |
VARCHAR2(24) |
座標系のカテゴリです。例: |
COORD_SYS_ID |
NUMBER(10) |
座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。 |
DATUM_ID |
NUMBER(10) |
座標参照系で使用されるデータのID番号です。投影座標系の場合はNULLです。測地座標系の場合は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。例: |
GEOG_CRS_DATUM_ID |
NUMBER(10) |
座標参照系で使用されるデータのID番号です。投影座標系の場合は、その投影座標系の基になっている測地座標系のDATUM_ID値(6.7.22項のSDO_DATUMS表を参照)と一致する必要があります。測地座標系の場合は、DATUM_ID値と一致する必要があります。例: |
SOURCE_GEOG_SRID |
NUMBER(10) |
投影座標系の場合は、関連付けられている測地座標系のID番号です。 |
PROJECTION_CONV_ID |
NUMBER(10) |
投影座標参照系の場合は、その投影座標系とソース地理座標系との間の変換に使用する変換操作のCOORD_OP_ID値です。 |
CMPD_HORIZ_SRID |
NUMBER(10) |
(EPSGによって割り当てられた値で、Oracle Spatialでは使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。) |
CMPD_VERT_SRID |
NUMBER(10) |
(EPSGによって割り当てられた値で、Oracle Spatialでは使用しません。EPSGの説明は、「複合CRSの垂直要素のコード(複合CRSの場合のみ)」です。) |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
IS_LEGACY |
VARCHAR2(5) |
座標系定義が、リリース2(10.2)より前のOracle Spatialに含まれていた場合は |
LEGACY_CODE |
NUMBER(10) |
EPSG座標参照系と同じ意味を持つレガシー座標系が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー座標系のSRID値です。 |
LEGACY_WKTEXT |
VARCHAR2(2046) |
IS_LEGACYが |
LEGACY_CS_BOUNDS |
SDO_GEOMETRY |
レガシー座標系の場合は、次元境界です(存在する場合)。 |
IS_VALID |
VARCHAR2(5) |
座標参照系のEPSGレコードの定義が完全な場合は |
SUPPORTS_SDO_GEOMETRY |
VARCHAR2(5) |
COORD_REF_SYS_KIND列に |
COORD_REF_SYS_KIND列の値に基づいて定義される次のビューも参照してください。
SDO_COORD_REF_SYSTEMビューには、SDO_COORD_REF_SYS表(6.7.9項を参照)と同じ列が含まれています。ただし、SDO_COORD_REF_SYSTEMビューには、トリガーが定義されており、このビューに対して挿入、更新または削除操作が実行されると、関連するすべてのSpatialシステム表に対して、適切な操作が実行されます。
したがって、挿入、更新または削除操作を実行する場合は、SDO_COORD_REF_SYS表に対してではなく、SDO_COORD_REF_SYSTEMビューに対して実行する必要があります。
SDO_COORD_SYS表には、座標系に関する情報を持つ行が含まれます。この表に含まれる列を、表6-10に示します。(SDO_COORD_SYS表は、EPSG座標参照系の表を基にしています。EPSG座標参照系の表では、座標系が「再利用可能な軸のペア」と表現されています。)
表6-10 SDO_COORD_SYS表
列名 | データ型 | 説明 |
---|---|---|
COORD_SYS_ID |
NUMBER(10) |
座標系のID番号です。例: |
COORD_SYS_NAME |
VARCHAR2(254) |
座標系の名前です。例: |
COORD_SYS_TYPE |
VARCHAR2(24) |
座標系の種類です。例: |
DIMENSION |
NUMBER(5) |
座標系によって表現される次元の数です。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
この情報のソースです。 |
DATA_SOURCE |
VARCHAR2(50) |
このレコードのデータを提供している組織です。 |
SDO_CRS_COMPOUNDビューに含まれている情報は、COORD_REF_SYS_KIND列の値がCOMPOUND
のSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。(複合座標参照系については、6.5.2項を参照してください。)このビューに含まれる列を、表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では使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。) |
CMPD_VERT_SRID |
NUMBER(10) |
(EPSGによって割り当てられた値で、Oracle Spatialでは使用しません。EPSGの説明は、「複合CRSの垂直要素のコード(複合CRSの場合のみ)」です。) |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
SDO_CRS_ENGINEERINGビューに含まれている情報は、COORD_REF_SYS_KIND列の値がENGINEERING
のSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表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表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。 |
DATUM_ID |
NUMBER(10) |
座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
SDO_CRS_GEOCENTRICビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOCENTRIC
のSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表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表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。 |
DATUM_ID |
NUMBER(10) |
座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
SDO_CRS_GEOGRAPHIC2Dビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOGRAPHIC2D
のSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表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表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。 |
DATUM_ID |
NUMBER(10) |
座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
SDO_CRS_GEOGRAPHIC3Dビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOGRAPHIC3D
のSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。(地理3D座標参照系については、6.5.1項を参照してください。)このビューに含まれる列を、表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表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。 |
DATUM_ID |
NUMBER(10) |
座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
SDO_CRS_PROJECTEDビューに含まれている情報は、COORD_REF_SYS_KIND列の値がPROJECTED
のSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表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表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。 |
SOURCE_GEOG_SRID |
NUMBER(10) |
関連付けられている測地座標系のID番号です。 |
PROJECTION_CONV_ID |
NUMBER(10) |
投影座標系とソース測地座標系との間の変換に使用する変換操作のCOORD_OP_ID値です。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
SDO_CRS_VERTICALビューに含まれている情報は、COORD_REF_SYS_KIND列の値がVERTICAL
のSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表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表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。 |
DATUM_ID |
NUMBER(10) |
座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
座標系定義の提供元です(Oracleによって提供される行はすべて |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。 |
SDO_DATUM_ENGINEERINGビューに含まれている情報は、DATUM_TYPE列の値がENGINEERING
のSDO_DATUMS表(6.7.22項を参照)の情報です。このビューに含まれる列を、表6-18に示します。
表6-18 SDO_DATUM_ENGINEERINGビュー
列名 | データ型 | 説明 |
---|---|---|
DATUM_ID |
NUMBER(10) |
データのID番号です。 |
DATUM_NAME |
VARCHAR2(80) |
データ名です。 |
ELLIPSOID_ID |
NUMBER(10) |
データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: |
PRIME_MERIDIAN_ID |
NUMBER(10) |
データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: |
INFORMATION_SOURCE |
VARCHAR2(254) |
データ定義の提供元です。例: |
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値の調整に使用する値です。 |
SDO_DATUM_GEODETICビューに含まれている情報は、DATUM_TYPE列の値がGEODETIC
のSDO_DATUMS表(6.7.22項を参照)の情報です。このビューに含まれる列を、表6-19に示します。
表6-19 SDO_DATUM_GEODETICビュー
列名 | データ型 | 説明 |
---|---|---|
DATUM_ID |
NUMBER(10) |
データのID番号です。 |
DATUM_NAME |
VARCHAR2(80) |
データ名です。 |
ELLIPSOID_ID |
NUMBER(10) |
データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: |
PRIME_MERIDIAN_ID |
NUMBER(10) |
データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: |
INFORMATION_SOURCE |
VARCHAR2(254) |
データ定義の提供元です。例: |
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値の調整に使用する値です。 |
SDO_DATUM_VERTICALビューに含まれている情報は、DATUM_TYPE列の値がVERTICAL
のSDO_DATUMS表(6.7.22項を参照)の情報です。このビューに含まれる列を、表6-20に示します。
表6-20 SDO_DATUM_VERTICALビュー
列名 | データ型 | 説明 |
---|---|---|
DATUM_ID |
NUMBER(10) |
データのID番号です。 |
DATUM_NAME |
VARCHAR2(80) |
データ名です。 |
ELLIPSOID_ID |
NUMBER(10) |
データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: |
PRIME_MERIDIAN_ID |
NUMBER(10) |
データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: |
INFORMATION_SOURCE |
VARCHAR2(254) |
データ定義の提供元です。例: |
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値の調整に使用する値です。 |
SDO_DATUMS表には、データごとに1つの行が含まれます。この表に含まれる列を、表6-21に示します。
表6-21 SDO_DATUMS表
列名 | データ型 | 説明 |
---|---|---|
DATUM_ID |
NUMBER(10) |
データのID番号です。例: |
DATUM_NAME |
VARCHAR2(80) |
データ名です。例: |
DATUM_TYPE |
VARCHAR2(24) |
データの種類です。例: |
ELLIPSOID_ID |
NUMBER(10) |
データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: |
PRIME_MERIDIAN_ID |
NUMBER(10) |
データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: |
INFORMATION_SOURCE |
VARCHAR2(254) |
データ定義の提供元です。例: |
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値の調整に使用する値です。 |
IS_LEGACY |
VARCHAR2(5) |
座標系定義が、リリース2(10.2)より前のOracle Spatialに含まれていた場合は |
LEGACY_CODE |
NUMBER(10) |
EPSGデータと同じ意味を持つレガシー・データが(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー・データのDATUM_ID値です。 |
DATUM_TYPE列の値に基づいて定義されるビューのSDO_DATUM_ENGINEERING(6.7.19項)、SDO_DATUM_GEODETIC(6.7.20項)およびSDO_DATUM_VERTICAL(6.7.21項)も参照してください。
SDO_ELLIPSOIDS表には、楕円体ごとに1つの行が含まれます。この表に含まれる列を、表6-22に示します。
表6-22 SDO_ELLIPSOIDS表
列名 | データ型 | 説明 |
---|---|---|
ELLIPSOID_ID |
NUMBER |
楕円体(球体)のID番号です。例: |
ELLIPSOID_NAME |
VARCHAR2(80) |
楕円体の名前です。例: |
NUMBER |
半長径(楕円体の長軸の半分)に沿った半径(m)です。 |
|
UOM_ID |
NUMBER |
楕円体の測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。例: |
NUMBER |
楕円体の逆フラット化( 1/f )です。この場合( |
|
NUMBER |
半短軸(楕円体の短軸の半分)に沿った半径(m)です。 |
|
INFORMATION_SOURCE |
VARCHAR2(254) |
この情報のソースです。例: |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供した組織です(Oracle以外の場合)。例: |
IS_LEGACY |
VARCHAR2(5) |
楕円体が、リリース2(10.2)より前のOracle Spatialに含まれていた場合は |
LEGACY_CODE |
NUMBER |
EPSG楕円体と同じ意味を持つレガシー楕円体が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー楕円体のELLIPSOID_ID値です。 |
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表(6.7.8項を参照)のCOORD_OP_ID列の値と一致します。 |
TARGET_SRID |
NUMBER(10) |
座標変換を実行する際の変換先の座標系(空間参照システム)のID番号です。この変換では、COORD_OP_IDで指定する操作が使用されます。 |
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表(6.7.8項を参照)のCOORD_OP_ID列の値と一致します。 |
TARGET_SRID |
NUMBER(10) |
変換を実行する際の変換先の座標系(空間参照システム)のID番号です。 |
SDO_PRIME_MERIDIANS表には、データ指定で使用可能な本初子午線ごとに1つの行が含まれます。この表に含まれる列を、表6-25に示します。
表6-25 SDO_PRIME_MERIDIANS表
列名 | データ型 | 説明 |
---|---|---|
PRIME_MERIDIAN_ID |
NUMBER(10) |
本初子午線のID番号です。例: |
PRIME_MERIDIAN_NAME |
VARCHAR2(80) |
本初子午線の名前です。例: |
GREENWICH_LONGITUDE |
FLOAT(49) |
本初子午線の経度(グリニッジ子午線からのオフセット)です。例: |
UOM_ID |
NUMBER(10) |
本初子午線の測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。例: |
INFORMATION_SOURCE |
VARCHAR2(254) |
この情報のソースです。例: |
DATA_SOURCE |
VARCHAR2(254) |
このレコードのデータを提供した組織です(Oracle以外の場合)。例: |
SDO_UNITS_OF_MEASURE表には、測定単位ごとに1つの行が含まれます。この表に含まれる列を、表6-26に示します。
表6-26 SDO_UNITS_OF_MEASURE表
列名 | データ型 | 説明 |
---|---|---|
UOM_ID |
NUMBER(10) |
測定単位のID番号です。例: |
UNIT_OF_MEAS_NAME |
VARCHAR2(2083) |
測定単位の名前で、URLまたはURIを指定することもできます。例: |
SHORT_NAME |
VARCHAR2(80) |
測定単位の短縮名です(短縮名がある場合)。例: |
UNIT_OF_MEAS_TYPE |
VARCHAR2(50) |
単位が使用される測定の種類です。角度単位( |
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の数値のうち単位が等しい方の数値です。ユーザー定義の単位の詳細は、2.10.1項を参照してください。 |
FACTOR_C |
NUMBER |
EPSG測定単位表のFACTOR_C列と対応しています。 ユーザー定義単位でのFACTOR_Cについては、2.10.1項を参照してください。 |
INFORMATION_SOURCE |
VARCHAR2(254) |
この情報のソースです。例: |
DATA_SOURCE |
VARCHAR2(40) |
このレコードのデータを提供している組織です。例: |
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値です。 |
Spatialのシステム表およびビューの定義は、EPSGデータ・モデルおよびデータセットに基づいているため、EPSGのエンティティ関連(E-R)ダイアグラムを参照すると、Spatialの座標系データ構造間の関係の概要がよくわかります。EPSG E-Rダイアグラムは、ドキュメント(http://www.epsg.org/CurrentDB.html
)に記載されています。
ただし、Oracle Spatialでは次のEPSG E-Rダイアグラムは使用されていません。
Area of Use(ダイアグラムの中央上部にある黄色いボックス)
Deprecation、Aliasなど(ダイアグラムの右下部分にピンク色のボックスで表されている部分)
この他、Spatialでは、一部の表名がSpatial独自の命名規則に準拠するように変更されます。また、表6-27に示す一部の表は使用されません。
表6-27 EPSGの表名とOracle Spatialの表名
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 |
(未使用) |
この項では、EPSGベースの測地座標系および投影座標系に関する情報を、Spatialの座標系データ構造で問い合せる方法を説明します。
人間が判読可能な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によって自動生成されます。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.1項で説明したとおり、WKTは人間が判読可能なCRSのサマリーですが、実際のEPSGデータはSpatialの座標系データ構造に格納されています。次の例に、投影座標系の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
リリース10.2より前のSpatialでは、座標系ファンクションおよびプロシージャは、次の表の情報を使用していました。その一部は名前が新しくなったり、現在、表ではなくビューになっています。
MDSYS.CS_SRS (6.8.1項を参照)は、有効な座標系を定義していました。この表では、各座標系と、それに関する説明を対応付けています。この表は、Open Geospatial Consortium (http://www.opengeospatial.org
)から公開されている標準に準拠しています。
MDSYS.SDO_ANGLE_UNITS(6.8.2項を参照)は、有効な角度単位を定義します。
MDSYS.SDO_AREA_UNITS(6.8.3項を参照)は、有効な面積単位を定義します。
MDSYS.SDO_DIST_UNITS(6.8.5項を参照)は、有効な距離単位を定義します。
MDSYS.SDO_DATUMS_OLD_FORMATおよびMDSYS.SDO_DATUMS_OLD_SNAPSHOT(6.8.4項を参照)は、リリース10.2より前のMDSYS.SDO_DATUMS表(有効なデータを定義)に基づいています。
MDSYS.SDO_ELLIPSOIDS_OLD_FORMATおよびMDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT(6.8.6項を参照)は、リリース10.2より前のMDSYS.SDO_ELLIPSOIDS表(有効な楕円体を定義)に基づいています。
MDSYS.SDO_PROJECTIONS_OLD_FORMATおよびMDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT(6.8.7項を参照)は、リリース10.2より前のMDSYS.SDO_PROJECTIONS表(有効な投影図を定義)に基づいています。
注意: これらのレガシー表でOracleから提供されている情報は、すべて変更および削除しないでください。SQL文でレガシー表を参照する場合は、表の名前の前にMDSYS.を付ける必要があります。 |
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が使用するために予約されているため、ユーザー定義の座標系には、1000000以上のSRID値を使用できます。 |
AUTH_SRID |
NUMBER(38) |
オプションのID番号です。エントリの抽出方法を指定します。たとえば、別の座標系への外部キーとなる場合があります。 |
AUTH_NAME |
VARCHAR2(256) |
座標系の認可レベル名です。指定された表には |
WKTEXT |
VARCHAR2(2046) |
SRSのwell-knownテキスト(WKT)の説明で、Open Geospatial Consortiumによって定義されています。詳細は、6.8.1.1項を参照してください。 |
CS_BOUNDS |
SDO_GEOMETRY |
WGS 84経度および緯度の頂点を持つポリゴンであるオプションのSDO_GEOMETRYオブジェクトで、投影座標系の有効範囲に関する球形ポリゴンの説明を表します。地理または非地球座標系の場合は、NULLである必要があります。すべての行にNULLが入ります。 |
MDSYS.CS_SRS表のWKTEXT列には、SRSの説明としてOpen Geospatial Consortiumによって定義されたwell-knownテキスト(WKT)の説明が含まれています。WKT拡張バッカス正規形構文を次に示します。
<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
各<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では、すべての測地データおよび投影図をサポートします。
ローカル座標系のWKTの例を次に示します。
LOCAL_CS [ "Non-Earth (Meter)", LOCAL_DATUM ["Local Datum", 0], UNIT ["Meter", 1.0], AXIS ["X", EAST], AXIS["Y", NORTH]]
ローカル座標系の詳細は、6.3項を参照してください。
SDO_CS.VALIDATE_WKTファンクション(第21章を参照)を使用すると、MDSYS.CS_SRS表に定義されているすべての座標系のWKTを検証できます。
データ関連のWKTパラメータは、Bursa Wolf変換パラメータを最大7個含むリストです。回転パラメータではアーク秒が指定され、シフト・パラメータではmが指定されます。
米国式およびヨーロッパ式の異なる2つの表記法は、3つの汎用回転パラメータで使用されており、またそれぞれ正反対の符号を使用しています。Spatialでは、米国式の表記法を採用し想定しています。したがって、WKTでヨーロッパ式表記法が使用されている場合は、回転パラメータの符号を逆にして、米国式表記法に変換する必要があります。
パラメータ・セットで使用されている表記法が米国式かヨーロッパ式か不明な場合は、次のテストを実行します。
正しい変換結果がわかっている単一の点を選択します。
現行のWKTを使用して変換を実行します。
想定した正しい結果と計算結果が一致しない場合は、回転パラメータの符号を逆にして変換を実行し、想定した正しい結果と計算結果が一致するかを確認します。
SDO_COORD_REF_SYSTEMビュー(6.7.10項を参照)に対して行を挿入または削除すると、MDSYS.CS_SRS表のWKTEXT列が自動的に更新されます。(WKTEXT列の書式については、6.8.1.1項を参照してください。)ただし、SDO_COORD_REF_SYSTEMビュー内の既存行を更新した場合は、well-knownテキスト(WKT)値は自動的に更新されません。
さらに、座標参照系に関連する情報は、SDO_DATUMS(6.7.22項を参照)、SDO_ELLIPSOIDS(6.7.23項を参照)、SDO_PRIME_MERIDIANS(6.7.26項を参照)などのシステム表にも格納されています。これらの表の情報を追加、削除または変更した場合も、MDSYS.CS_SRS表のWKTEXT値は自動的に更新されません。たとえば、SDO_ELLIPSOIDS表の楕円体のフラット化の値を更新したとしても、関連付けられている座標系のwell-knownテキスト文字列は更新されません。
ただし、名前がUPDATE_WKTS_FOR で始まるプロシージャ(たとえば、SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS、SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUMなど)を使用すると、MDSYS.CS_SRS表のWKTEXT値を手動で更新できます。SERVEROUTPUT情報の表示が有効になっている場合は、MDSYS.CS_SRS表内で、WKTEXT値が更新される行のSRID値を識別するメッセージが、これらのプロシージャによって表示されます。これらのプロシージャについては、第21章を参照してください。
MDSYS.SDO_ANGLE_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な角度のUNIT指定ごとに1つの行が含まれます。WKTについては、6.8.1.1項を参照してください。
MDSYS.SDO_ANGLE_UNITSビューは、SDO_UNITS_OF_MEASURE表(6.7.27項を参照)に基づいており、これには表6-29に示す列が含まれています。
表6-29 MDSYS.SDO_ANGLE_UNITSビュー
列名 | データ型 | 説明 |
---|---|---|
SDO_UNIT |
VARCHAR2(32) |
角度単位名(ほとんどの場合は、UNIT_NAME値の略称)です。SDO_UNIT値は、SDO_UTIL.CONVERT_UNITファンクションの |
VARCHAR2(100) |
角度単位名です。任意のユーザー定義の座標系に対するWKTのUNIT指定にこの列の値を指定します。値は、 |
|
NUMBER |
1ラジアンに対する指定した単位の比率です。たとえば、 |
MDSYS.SDO_AREA_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な面積のUNIT指定ごとに1つの行が含まれます。WKTについては、6.8.1.1項を参照してください。
MDSYS.SDO_AREA_UNITSビューは、SDO_UNITS_OF_MEASURE表(6.7.27項を参照)に基づいており、これには表6-30に示す列が含まれています。
MDSYS.SDO_DATUMS_OLD_FORMAT参照表とMDSYS.SDO_DATUMS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なDATUM指定ごとに1つの行が含まれます。(WKTについては、6.8.1.1項を参照してください。)
MDSYS.SDO_DATUMS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースのデータ指定が表に格納されています)。
MDSYS.SDO_DATUMS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前のデータ指定と表形式)。
これらの表に含まれる列を、表6-31に示します。
表6-31 MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表
列名 | データ型 | 説明 |
---|---|---|
NAME |
VARCHAR2(80)(OLD_FORMATの場合) VARCHAR2(64)(OLD_SNAPSHOTの場合) |
データ名です。任意のユーザー定義の座標系に対するWKTのDATUM指定にこの列の値(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値の調整に使用する値です。 |
これらの表に格納されるデータの名前(表形式)を次に示します。
Adindan | Afgooye | Ain el Abd 1970 |
Anna 1 Astro 1965 | Arc 1950 | Arc 1960 |
Ascension Island 1958 | Astro B4 Sorol Atoll | Astro Beacon E |
Astro DOS 71/4 | Astronomic Station 1952 | Australian Geodetic 1966 |
Australian Geodetic 1984 | Belgium Hayford | Bellevue(IGN) |
Bermuda 1957 | Bogota Observatory | CH 1903(Switzerland) |
Campo Inchauspe | Canton Astro 1966 | Cape |
Cape Canaveral | Carthage | Chatham 1971 |
Chua Astro | Corrego Alegre | DHDN(Potsdam/Rauenberg) |
DOS 1968 | Djakarta(Batavia) | Easter Island 1967 |
European 1950 | European 1979 | European 1987 |
GRS 67 | GRS 80 | GUX 1 Astro |
Gandajika Base | Geodetic Datum 1949 | Guam 1963 |
Hito XVIII 1963 | Hjorsey 1955 | Hong Kong 1963 |
Hu-Tzu-Shan | ISTS 073 Astro 1969 | Indian(Bangladeshなど) |
Indian(Thailand/Vietnam) | Ireland 1965 | Johnston Island 1961 |
Kandawala | Kerguelen Island | Kertau 1948 |
L.C. 5 Astro | Liberia 1964 | Lisboa(DLx) |
Luzon(Mindanao Island) | Luzon(Philippines) | Mahe 1971 |
Marco Astro | Massawa | Melrica 1973(D73) |
Merchich | Midway Astro 1961 | Minna |
NAD 27(Alaska) | NAD 27(Bahamas) | NAD 27(Canada) |
NAD 27(Canal Zone) | NAD 27(Caribbean) | NAD 27(Central America) |
NAD 27(Continental US) | NAD 27(Cuba) | NAD 27(Greenland) |
NAD 27(Mexico) | NAD 27(Michigan) | NAD 27(San Salvador) |
NAD 83 | NTF(Greenwich meridian) | NTF(Paris meridian) |
NWGL 10 | Nahrwan(Masirah Island) | Nahrwan(Saudi Arabia) |
Nahrwan (Un.Arab Emirates) | Naparima、BWI | Netherlands Bessel |
Observatorio 1966 | Old Egyptian | Old Hawaiian |
Oman | Ordinance Survey Great Brit | Pico de las Nieves |
Pitcairn Astro 1967 | Provisional South American | Puerto Rico |
Pulkovo 1942 | Qatar National | Qornoq |
RT 90(Sweden) | Reunion | Rome 1940 |
Santo(DOS) | Sao Braz | Sapper Hill 1943 |
Schwarzeck | South American 1969 | South Asia |
Southeast Base | Southwest Base | Timbalai 1948 |
Tokyo | Tristan Astro 1968 | Viti Levu 1916 |
WGS 60 | WGS 66 | WGS 72 |
WGS 84 | Wake-Eniwetok 1960 | Yacare |
Zanderij |
MDSYS.SDO_DIST_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な距離のUNIT指定ごとに1つの行が含まれます。WKTについては、6.8.1.1項を参照してください。
MDSYS.SDO_DIST_UNITSビューは、SDO_UNITS_OF_MEASURE表(6.7.27項を参照)に基づいており、これには表6-32に示す列が含まれています。
MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT参照表とMDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なSPHEROID指定ごとに1つの行が含まれます。(WKTについては、6.8.1.1項を参照してください。)
MDSYS.SDO_ELLIPSOIDS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの楕円体指定が表に格納されています)。
MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の楕円体指定と表形式)。
これらの表に含まれる列を、表6-33に示します。
表6-33 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表
列名 | データ型 | 説明 |
---|---|---|
NAME |
VARCHAR2(80)(OLD_FORMATの場合) VARCHAR2(64)(OLD_SNAPSHOTの場合) |
楕円体(球体)の名前です。任意のユーザー定義の座標系に対するWKTのSPHEROID指定にこの列の値を指定します。値は、 |
NUMBER |
半長径(楕円体の長軸の半分)に沿った半径(m)です。 |
|
NUMBER |
楕円体の逆フラット化( 1/f )です。この場合( |
これらの表に格納される楕円体の名前(表形式)を次に示します。
Airy 1830 | Airy 1830(Ireland 1965) | Australian |
Bessel 1841 | Bessel 1841(NGO 1948) | Bessel 1841(Schwarzeck) |
Clarke 1858 | Clarke 1866 | Clarke 1866(Michigan) |
Clarke 1880 | Clarke 1880(Arc 1950) | Clarke 1880(IGN) |
Clarke 1880(Jamaica) | Clarke 1880(Merchich) | Clarke 1880(Palestine) |
Everest | Everest(Kalianpur) | Everest(Kertau) |
Everest(Timbalai) | Fischer 1960(Mercury) | Fischer 1960(South Asia) |
Fischer 1968 | GRS 67 | GRS 80 |
Hayford | Helmert 1906 | Hough |
IAG 75 | Indonesian | International 1924 |
Krassovsky | MERIT 83 | NWL 10D |
NWL 9D | New International 1967 | OSU86F |
OSU91A | Plessis 1817 | South American 1969 |
Sphere(6370997m) | Struve 1860 | WGS 60 |
WGS 66 | WGS 72 | WGS 84 |
Walbeck | War Office |
MDSYS.SDO_PROJECTIONS_OLD_FORMAT参照表とMDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なPROJECTION指定ごとに1つの行が含まれます。(WKTについては、6.8.1.1項を参照してください。)
MDSYS.SDO_PROJECTIONS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの投影法指定が表に格納されています)。
MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の投影法指定と表形式)。
これらの表に含まれる列を、表6-34に示します。
表6-34 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表
列名 | データ型 | 説明 |
---|---|---|
NAME |
VARCHAR2(80)(OLD_FORMATの場合) VARCHAR2(64)(OLD_SNAPSHOTの場合) |
投影図名です。任意のユーザー定義の座標系に対するPROJECTION指定にこの列の値を指定します。値は、 |
これらの表に格納される投影法の名前(表形式)を次に示します。
Alaska Conformal | Albers Conical Equal Area |
Azimuthal Equidistant | Bonne |
Cassini | Cylindrical Equal Area |
Eckert IV | Eckert VI |
Equidistant Conic | Equirectangular |
Gall | General Vertical Near-Side Perspective |
Geographic(Lat/Long) | Gnomonic |
Hammer | Hotine Oblique Mercator |
Interrupted Goode Homolosine | Interrupted Mollweide |
Lambert Azimuthal Equal Area | Lambert Conformal Conic |
Lambert Conformal Conic(Belgium 1972) | Mercator |
Miller Cylindrical | Mollweide |
New Zealand Map Grid | Oblated Equal Area |
Orthographic | Polar Stereographic |
Polyconic | Robinson |
Sinusoidal | Space Oblique Mercator |
State Plane Coordinates | Stereographic |
Swiss Oblique Mercator | Transverse Mercator |
Transverse Mercator Danish System 34 Jylland-Fyn | Transverse Mercator Danish System 45 Bornholm |
Transverse Mercator Finnish KKJ | Transverse Mercator Sjaelland |
Universal Transverse Mercator | Van der Grinten |
Wagner IV | Wagner VII |
Oracleから提供されている座標系でニーズを十分に満たすことができない場合は、ユーザー定義の座標参照系を作成できます。
ユーザー定義のCRSを作成する手順は、厳密には、それが測地座標参照系であるか、投影座標参照系であるかによって異なります。どちらの場合も、座標系に関する情報(座標軸、軸の名前、測定単位など)を指定する必要があります。測地CRSの場合は、データに関する情報(楕円体、本初子午線など)を指定します(6.9.1項を参照)。投影CRSの場合は、ソース(測地)CRSと投影法に関する情報(操作およびパラメータ)を指定します(6.9.2項を参照)。
ユーザー定義の座標系の場合、SRID値は1000000以上にする必要があります。
測定単位、座標軸、SDO_COORD_SYS表の行、楕円体、本初子午線、データなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(6.7.10項を参照)に行を挿入して、新しい測地CRSを定義します。
例6-5では、My Own NAD27
という名前の架空の測地CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27
CRSと同じです)。
例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');
定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。
測定単位がSDO_UNITS_OF_MEASURE表(6.7.27項を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。
座標軸がSDO_COORD_AXES表(6.7.1項を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。
座標系の適切なエントリがSDO_COORD_SYS表(6.7.11項を参照)に定義されていない場合は、表に行を挿入します。例6-6では、架空の座標系の定義を挿入しています。
楕円体がSDO_ELLIPSOIDS表(6.7.23項を参照)に定義されていない場合は、表に行を挿入して新しい楕円体を定義します。
本初子午線がSDO_PRIME_MERIDIANS表(6.7.26項を参照)に定義されていない場合は、表に行を挿入して新しい本初子午線を定義します。
データがSDO_DATUMS表(6.7.22項を参照)に定義されていない場合は、表に行を挿入して新しいデータを定義します。
測定単位、座標軸、SDO_COORD_SYS表の行、ソース座標系、投影操作、投影パラメータなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(6.7.10項を参照)に行を挿入して新しい投影CRSを定義します。
例6-7では、My Own NAD27 / Cuba Norte
という名前の架空の投影CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 / Cuba Norte
CRSと同じです)。
例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');
定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。
測定単位がSDO_UNITS_OF_MEASURE表(6.7.27項を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。
座標軸がSDO_COORD_AXES表(6.7.1項を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。
座標系の適切なエントリがSDO_COORD_SYS表(6.7.11項を参照)に定義されていない場合は、表に行を挿入します。(6.9.1項の例6-6を参照してください。)
投影操作がSDO_COORD_OPS表(6.7.8項を参照)に定義されていない場合は、表に行を挿入して新しい投影操作を定義します。例6-8に、Oracleが提供している座標操作ID 18061の情報を挿入する文を示します。
例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);
投影操作のパラメータがSDO_COORD_OP_PARAM_VALS表(6.7.5項を参照)に定義されていない場合は、新しいパラメータごとに1行を表に挿入します。例6-9に、Oracleが提供している、ID値が8801、8802、8805、8806および8807のパラメータの情報を挿入する文を示します。
例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に、ユーザー定義の投影座標参照系の作成例に注釈を付けて拡張した例を示します。
例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]]
垂直CRSには1つの次元(通常、高さ)のみがあります。そのままでは、垂直CRSの有用性は低いですが、2次元のCRS(測地CRSまたは投影CRS)と結合して複合CRSを作り出すことができます。例6-11に、SRID 5701を使用して垂直CRSを作成する文を示します(SRID 5701はSpatialに同梱されています)。この定義では、既存の(1次元の)座標系(ID 6499、6.7.11項「SDO_COORD_SYS表」を参照)と垂直データ(ID 5101、6.7.22項「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との間の操作に定義が指定されます。したがって、同じ組合せのジオイド高とWGS84楕円体高間にいくつかの代替操作を定義することができます。たとえば、ジオイドのオフセット・マトリックスにはGEOID90、GEOID93、GEOID96、GEOID99、GEOID03、GEOID06などがあり、これらの各変形に対して別々の操作を定義できます。このような操作の説明は、6.9.6項を参照してください。
複合CRSは、既存の水平(2次元の) CRSと垂直(1次元の) CRSを組み合せたものです。水平CRSには、測地CRSまたは投影CRSを使用できます。例6-12に、SRID 7405を使用して複合CRSを作成する文を示します(Spatialに同梱されています)。この定義では、既存の投影CRSおよび垂直CRS (それぞれ、ID 27700および5701。6.7.9項「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);
地理3D CRSは、地理2D CRSと楕円高を結合したものです。例6-13に、SRID 4327を使用して地理3D CRSを作成する文を示します(SRID 4327はSpatialに同梱されています)。この定義は、既存の投影座標系(ID 6401、6.7.11項「SDO_COORD_SYS表」を参照)およびデータ(ID 6326、6.7.22項「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.2項で、投影CRSを作成するために投影操作を作成する方法について説明しました。正標高に基づく複合CRSを使用する場合にも、同様の要件が起こる可能性があります。ジオイド高と楕円体高の間で変換した方がよい場合があるためです。2つの高さの間のオフセットは一定ではなく、不規則です。
Spatialのデフォルトでは、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で使用できるのはASCII形式のみです。既存のEPSG操作には、標準で使用されるファイル名が含まれます。
例6-15は、このような一連のマトリックスをロードするスクリプトです。これは、指定した物理ファイル(ntv20.gsa
など)が、公式なファイル名参照(NTV2_0.GSB
など)に基づいて、データベースCLOBにロードされます。
例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; 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.CLOSE(Dest_loc); DBMS_LOB.CLOSE(Src_loc); DBMS_LOB.FILECLOSE(Src_loc); END IF; END LOOP; END; /
投影座標参照系でBritish Grid Transformation OSTN02/OSGM02 (EPSG method 9633)を使用するには、最初にSDO_COORD_OP_PARAM_VALS表(6.7.5項を参照)のPARAM_VALUE_FILE列(CLOB型)に変更されたバージョンのOSTN02_OSGM02_GB.txt
格子ファイルを挿入する必要があります。OSTN02_OSGM02_GB.txt
ファイルには、EPSG変換メソッド9633の基になっているオフセット・マトリックスが含まれています。
次に手順を示します。
ファイルhttp://www.ordnancesurvey.co.uk/docs/gps/ostn02-osgm02-files.zip
をダウンロードします。
この.zipファイルからOSTN02_OSGM02_GB.txt
というファイルを展開します。
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
異なる名前(たとえば、my_OSTN02_OSGM02_GB.txt
)を使用して、編集したファイルを保存します。
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マトリックスには様々な形式のヘッダーがすでに含まれているため、追加する必要はありません。
関連情報については、次も参照してください。
今回のリリースのOracle Spatialでは、次の注意事項および制限事項が座標系のサポートに適用されます。
測地データを使用する場合の考慮点、ガイドラインおよび制限事項については、6.2項を参照してください。
入力パラメータとして2つのジオメトリを取る空間演算子(第19章を参照)では、それらのジオメトリが異なる座標系に基づいている場合、操作が実行される前に、問合せウィンドウ(2つ目のジオメトリ)が1つ目のジオメトリの座標系に変換されます。この変換は、Spatialが実行する一時内部操作であり、格納されたすべての問合せウィンドウ・ジオメトリには影響を及ぼしません。
入力パラメータとして2つのジオメトリを取るSDO_GEOMパッケージ・ジオメトリ・ファンクション(第24章を参照)では、両方のジオメトリが同じ座標系に基づいている必要があります。
今回のリリースでは、次のファンクションが近似処理によって測地データでサポートされています。
これらのファンクションを測地座標を含むデータに対して使用した場合、暗黙的に生成されたローカル交差平面デカルト座標系で内部操作が実行され、その結果が測地座標系に変換されます。SDO_GEOM.SDO_BUFFERでは、生成された円弧が元の形式に戻される前に線セグメントによって近似処理されます。
次の座標参照系は、Oracle内部と特殊用途で使用するためのものです。
unknown CRS
(SRID 999999)は、座標系が不明であることを意味し、その空間は測地の場合もデカルトの場合もあります。NULL座標参照系は、これとは異なり、デカルト空間を持つ不明な座標系を示します。
NaC
(SRID 999998)は、Not-a-CRS (非CRS)を意味します。この名前は、JavaのNaN
(Not-a-Number、非数値)を参考にして名付けられました。これは、非空間ジオメトリで使用することを意図しています。
次の制限は、unknown CRS
およびNaC
座標参照系をベースとするジオメトリに適用されます。
これらのジオメトリに対して座標系変換を実行することはできません。
座標系を必要とする操作をこれらのジオメトリに対して実行すると、NULL値が戻ります。このような操作には、ジオメトリの面積または外周の取得、バッファの作成、円弧の稠密化、集計重心の計算などがあります。
U.S. National Gridは、1つの英数字座標(たとえば、18SUJ2348316806479498)を使用して点の座標を表現します。これは、Oracle SpatialやEPSGのように数字座標を使用して点の位置を表す方法とは対照的な方法です。U.S. National Gridの説明は、http://www.ngs.noaa.gov/TOOLS/usng.html
を参照してください。
SpatialでU.S. National Gridをサポートする場合、SDO_GEOMETRY型は使用できません(この型は、数字座標を基準にしています)。かわりに、U.S. National Grid形式の点は、1つのVARCHAR2型の文字列として表現されます。SDO_CSパッケージ(第21章を参照)には、SDO_GEOMETRY形式とU.S. National Grid形式の間で変換を行うために、次のファンクションが用意されています。
Google Mapsでは、Oracle Spatialによって使用される楕円体の計算ではなく、その投影で球体の計算を使用します。この違いによって、Oracle Spatialの楕円体投影に基づいた地図でGoogle Mapsに基づいた地図をオーバーレイする場合など、アプリケーションで不整合が発生する場合があります。たとえば、Oracle Spatialでの楕円体SRID 8307から球体SRID 3785への変換では、デフォルトで異なる楕円体の形状が考慮されますが、Google Mapsでは楕円体の形状は考慮されません。
Oracle Spatialで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間の変換には楕円体の計算が使用されます。
この項では、座標系変換ファンクションおよびプロシージャを使用する簡単な例を示します。この例では、この章で説明する概要および第21章で説明するファンクションを使用します。
例6-17では、主に、2.1項で使用したジオメトリ・データ(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では、2.1項の図2-1に示すジオメトリを使用します(ただし、円弧は測地座標系でサポートされていないため、cola_d
は円弧ではなく矩形(ここでは、正方形)です)。
例6-17では、次の処理を行います。
空間データを格納するための表(COLA_MARKETS_CS)を作成する
SDO_SRID値8307を使用して、4つの対象領域(cola_a
、cola_b
、cola_c
、cola_d
)の行を挿入する
SDO_SRID値8307を使用して、USER_SDO_GEOM_METADATAビューを更新し、その領域の次元を反映する
空間索引(COLA_SPATIAL_IDX_CS)を作成する
(単一ジオメトリおよびレイヤー全体の)変換操作を実行する
例6-17のSELECT文の出力結果を例6-18に示します。
例6-17 座標系変換の簡単な例
-- 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; ------------------------------------------------------------------- -- 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