プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

1.5 データ・モデル

Oracle Spatial and Graphの空間データ・モデルは、要素、ジオメトリおよびレイヤーで構成される階層型の構造体です。レイヤーはジオメトリで構成され、ジオメトリは要素で構成されます。

1.5.1 要素

要素は、ジオメトリの基本的構成単位です。サポートされる空間要素タイプは、点、線ストリングおよびポリゴンです。たとえば、要素を使用することによって、星座(点クラスタ)、道路(線ストリング)および都道府県の境界(ポリゴン)のモデルを作成できます。要素内の各座標は、XとYの値のペアとして格納されます。複合ポリゴンの外部の輪と0 (ゼロ)個以上の内部の輪(穴)は、単一の要素とみなされます。

点データは1個の座標で構成されます。線データは要素の線セグメントを表現する2個の座標で構成されます。ポリゴン・データは複数の座標値ペア(ポリゴンの各線セグメントに対して、1つの頂点ペア)で構成されます。座標は、ポリゴンの周囲に沿って順に(外部の輪は反時計回り、内部の輪は時計回りで)定義されます。

1.5.2 ジオメトリ

ジオメトリ(またはジオメトリ・オブジェクト)は、空間フィーチャの表現であり、基本形要素を配列した集合をモデル化したものです。ジオメトリは、単一の要素、(サポートされている基本タイプの1つのインスタンス)または同種か異種の要素の集合で構成できます。群島を表現する場合に使用されるような複数ポリゴンは、同種の集合です。異種の集合とは、異なるタイプの要素の集合(点とポリゴンなど)です。

たとえば、ある町の建築予定地を示すジオメトリの例を考えます。このジオメトリは、穴のあいたポリゴンとして表現できます(河川、湖、または区画指定により建築できない地域が穴に相当します)。

1.5.3 レイヤー

レイヤーは、同じ属性セットを持つジオメトリの集合です。たとえば、あるGISにおいて3つのレイヤーが、それぞれ地形、人口密度および領域内の道路と橋のネットワーク(線および点)を表現する場合が考えられます。各レイヤーのジオメトリおよびそれに関連付けられた空間索引は、データベース内の標準表に格納されます。

1.5.4 座標系

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

すべての空間データには、座標系が関連付けられています。座標系は、地理参照(地表の特定の表現に関連)または非地理参照(デカルトで、地表の特定の表現に関連しない)のいずれかになります。座標系が地理参照の場合、デフォルトの測定単位(mなど)が関連付けられますが、指定した別の単位(マイルなど)で結果を自動的に戻すように、Spatial and Graphに指示できます。(サポートされている測定単位の詳細は、「測定単位のサポート」を参照してください。)

空間データは、デカルト座標系、測地(地理)座標系、投影座標系またはローカル座標系に関連付けができます。

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

    座標系がジオメトリに明示的に関連付けられていない場合、デカルト座標系が想定されます。

  • 測地座標(地理座標)は、角度を持つ座標(経度および緯度)であり、球体の極点の座標と密接に関連し、また、地球上の特定の測地データに関連付けて定義されます。(測地データは、地球の形を表現し、測地座標系の参照として機能します。)

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

  • ローカル座標は、非地球(非地理参照)座標系のデカルト座標です。ローカル座標系は、通常、CADアプリケーションおよび現地測量に使用されます。

Spatial and Graphは、ジオメトリで操作を実行する場合、空間データに関連付けられた座標系に適切なデカルトまたは曲線計算モデルのいずれかを使用します。

Spatial and Graphでの座標系サポート(測地座標、投影座標、ローカル座標、座標系の変換など)の詳細は、「座標系(空間参照システム)」を参照してください。

1.5.5 許容差

許容差は、空間データに精度レベルを関連付けるために使用します。許容差は、(たとえば、丸めの誤差の調整のために、)2つの点が一致しない場合でも、2点が同一の点とみなされる最大距離に影響します。許容差には、0(ゼロ)より大きい正の数字を指定する必要があります。値の重要度は、空間データが測地座標系に関連付けられているかどうかによって異なります。(測地座標系および他の座標系の詳細は、「座標系」を参照してください。)

  • 測地データ(経度と緯度の座標によって識別されるデータなど)の場合、許容差はm単位になります。たとえば、許容差100は、100mの許容差を示します。測地データの許容差には、0.05 (5cm)以上の値を指定する必要があります。SDO_GEOM.RELATESDO_GEOM.SDO_DIFFERENCESDO_GEOM.SDO_INTERSECTIONSDO_GEOM.SDO_UNIONおよびSDO_GEOM.SDO_XORファンクションでは、測地データの許容差の値に0.05より小さい値を指定しても、0.05が使用されます(ただし、ジオメトリは許容差0.05で有効である必要があります)。

  • 非測地データの場合、許容差は、データに関連付けられた座標系に関連付けられた単位での数値です。たとえば、測定単位がマイルの場合、許容差の値0.005は許容差0.005(1/200)マイル(約26フィート(7.9メートル))を示し、許容差の値2は許容差2マイルを示します。

いずれの場合も、許容差が小さいほど、データに関連付けられる精度は高くなります。

測地データおよび投影データの場合、許容差には10より小さい値を指定する必要があります。また、ジオメトリが指定された許容差で有効であることを確認します。

Spatial and Graphのブール演算(SDO_GEOM.SDO_UNIONSDO_GEOM.SDO_INTERSECTIONなど)およびSDO_GEOM.RELATEファンクションでは、16桁以上の精度を持つジオメトリについて、浮動小数点演算での精度不足が原因で、一貫性のない結果が生成されることがあります。精度の桁数は、たとえば許容差が0.0000000005に設定され、座標の整数部分が6桁(123456.4321など)であるとすると、精度は10+6つまり16桁という計算になります。このような場合は、空間演算を使用した結果に一貫性を持たせるため、使用する許容差をより大きく(小数点に続くゼロをより少なく)します。

注意:

浮動小数点演算では、計算で使用される桁数が15桁を超えると、精度が失われる傾向があるため、計算に指定されている桁数が15桁未満であることを確認してください。たとえば、数値が123456.789で、許容差が10E-10である場合、これは事実上精度が16 (10+6)桁であることを意味し、推奨される15桁を超えています。

許容差は、次の2つの項目で指定されます。

線形参照システム(LRS)データの許容差の詳細は、「LRSファンクションの許容差」を参照してください。

1.5.5.1 レイヤーのジオメトリ・メタデータの許容差

レイヤーの次元情報には、許容差が含まれます。具体的には、xxx_SDO_GEOM_METADATAビューのDIMINFO列(「DIMINFO」を参照)には、次元ごとにSDO_TOLERANCE値が含まれ、この値は各次元で同じあることが必要です。

ファンクションがオプションのtoleranceパラメータを受け入れ、このパラメータがNULLまたは指定されていない場合は、レイヤーのSDO_TOLERANCE値が使用されます。「空間データの挿入、索引付けおよび問合せの例」の例の非測地データを使用すると、ジオメトリcola_bcola_d間の実際の距離は0.846049894です。問合せでtoleranceパラメータ値を指定しないでSDO_GEOM.SDO_DISTANCEファンクションを実行すると、戻されるcola_bcola_d間の距離の結果はレイヤーのSDO_TOLERANCE値によって異なります。次に例を示します。

  • レイヤーのSDO_TOLERANCE値が0.005の場合、この問合せは0.846049894を戻します。

  • レイヤーのSDO_TOLERANCE値が0.5の場合、この問合せは0(ゼロ)を戻します。

    Spatial and Graphは、まず考慮する各ジオメトリの周りに許容差(0.5)の仮想的なバッファを構築します。この場合、cola_bおよびcola_dの周りのバッファがオーバーラップするため、結果が0 (ゼロ)になります。(考慮対象の2つのジオメトリが異なる許容差を持つ場合、大きい方の値が仮想的なバッファ用に使用されます。)

したがって、次の2つのいずれかの方法を使用して、レイヤーのSDO_TOLERANCE値を選択できます。

  • 値に、オブジェクト間の距離を問合せする場合の精度レベルを反映します。たとえば、距離の単位で0.8離れた2つの非測地ジオメトリを離れているとみなす必要がある場合、SDO_TOLERANCEを小さい値(0.05以下など)に指定します。

  • 値に、レイヤー内のジオメトリに関連付けられた値の精度を反映します。たとえば、非測地レイヤー内のすべてのジオメトリが整数で定義され、距離の単位で0.8離れている2つのオブジェクトを離れているとみなさない場合は、SDO_TOLERANCEの値を0.5に指定すると適切です。すべての問合せでの精度を上げるには、toleranceパラメータを指定してデフォルトを上書きする必要があります。

非測地データの場合、2つ目の方法(レイヤーに存在するジオメトリの値の精度)のほとんどのインスタンスで、ジオメトリ定義の最高レベルの精度を指定し、次のレベルでSDO_TOLERANCE値を0.5に指定することをお薦めします。たとえば、ジオメトリが整数で定義されている(「空間データの挿入、索引付けおよび問合せの例」に簡単な例を示す)場合、適切な値は0.5です。ただし、ジオメトリが小数点第4桁までの数値(31.2587など)で定義されている場合、適切な値は0.00005です。

注意:

ジオメトリに、任意の点で幅が狭く、対辺の間の距離が提案された許容差より短いポリゴンが含まれている場合は、このガイドラインに従わないでください。許容差が、すべてのポリゴンのすべての2辺間の最短距離より小さいことを確認してください。

また、実際はジオメトリが有効であるにもかかわらず、ジオメトリの挿入または更新で「invalid geometry」エラーが発生した場合は、許容差の精度を上げることを検討してください(たとえば、0.00005から0.000005に変更)。

1.5.5.2 入力パラメータとしての許容差

多くの空間ファンクションは、toleranceパラメータを受け入れます。このパラメータ(指定された場合)は、レイヤーのデフォルトの許容差値を上書きします(「レイヤーのジオメトリ・メタデータの許容差」を参照)。2点間の距離が許容差以下の場合、Spatial and Graphはその2つの点を単一の点とみなします。そのため、許容差には、空間データを認識させる精度を反映します。

たとえば、家から5km以内の距離にあるレストランを検索する場合を考えてみます。Maria's Pizzeriaが、家から5.1kmの場所にあるとします。空間データに測地座標系が関連付けられており、許容差に100 (または500など、これ以上の値)を使用して5km以内にあるすべてのレストランを検索するように指定した場合、5.1kmは5km (5000m)から100m以内であるためMaria's Pizzeriaは含まれます。許容差を100未満(50など)に指定した場合、Maria's Pizzeriaは含まれません。

各ケースの最適値はデータを使用するアプリケーションの種類によって異なりますが、通常、空間ファンクションの許容差は非常に小さい値です。「レイヤーのジオメトリ・メタデータの許容差」に示す許容差のガイドラインを参照してください。また、すべての入力ジオメトリが有効であることを確認します。(ジオメトリ・データが有効でないと、空間ファンクションは予測どおりに動作しないことがあります。)

ジオメトリ・レイヤーの次元情報配列からの許容差値を明示的に使用する必要があり、かつ1つのサブプログラムにtolerance (またはtol)パラメータを使用する形式とdimパラメータを使用する形式がある場合は、dimの形式を使用します。次の例で、最初の文では次元情報配列からの許容差値を使用し、2番目の文では許容差値を数値で指定しています(0.005)。

-- Return the area of the cola_a geometry.
 
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, m.diminfo) 
  FROM cola_markets c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c.name = 'cola_a';
 
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) FROM cola_markets c 
   WHERE c.name = 'cola_a';