プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle CQLデータ・カートリッジによるアプリケーションの開発
12c リリース(12.2.1.2.0)
E82779-01
目次へ移動
目次

前
前へ
次
次へ

4 Oracle Spatialデータ・カートリッジ

この章では、Oracle Continuous Query Language (Oracle CQL)を拡張して位置情報対応型のアプリケーションに高度な空間機能を提供するOracle Spatialカートリッジを使用する場合のリファレンスとガイドを提供します。

Oracle Stream Analyticsアプリケーション作成において、Oracle CQLネイティブ型と同じように、Oracle CQL問合せおよびビューでOracle Spatialの型、メソッド、フィールドおよびコンストラクタを使用できます。

この章の内容は次のとおりです。

4.1 Oracle Spatialの理解

Oracle Spatialは、ハイエンドな地理情報システム(GIS)と位置情報を有効化したビジネス・インテリジェンス・ソリューション(LBS)をサポートする高度な空間機能を提供するOracle Databaseオプションです。

Oracle Spatialは、Oracle Stream AnalyticsアプリケーションでOracle Spatialクラスをシームレスに操作するOracle CQL問合せおよびビューを記述できるオプションのデータ・カートリッジです。

Oracle Spatialを使用すると、空間データを索引付する機能により、空間データの保存、空間データ上の近接や重なりの比較、Oracle Stream Analyticsサーバーへの空間データの統合などの非常に重要な地理ドメイン操作を実行するOracle CQL問合せを構成できます。

Oracle Spatialを使用するには、Oracle Spatial APIに関する実用的な知識が必要です。Oracle Spatialの詳細は、次の資料を参照してください。

この項では、次の内容について説明します。

4.1.1 データ・カートリッジ名

Oracle Spatialでは、カートリッジID com.oracle.cep.cartrdiges.spatialを使用してサーバー・スコープ予約済リンク名spatialを登録します。

spatialリンク名を使用して、Oracle Spatialのメソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付けます。

詳細は、次を参照してください。

4.1.2 スコープ

Oracle SpatialはOracle Spatial Java APIに基づいています。Oracle SpatialはOracle Spatial機能をcom.oracle.cep.cartridge.spatial.Geometryクラスに公開します。Oracle Spatial Java APIにないOracle Spatial機能に、Oracle Spatialからアクセスすることはできません。

Oracle Spatialを使用することで、Oracle CQL問合せで表4-1のOracle Spatial機能にアクセスできます。

表4-1 Oracle Spatialのスコープ

Oracle Spatialの機能 スコープ

ジオメトリ・タイプ

Oracle Spatial Java APIの次のジオメトリ・タイプ:

  • 2D点

  • デカルト座標系および測地(地理的)座標をサポートする2Dの円

  • 2D単純ポリゴン

  • 2D矩形

  • 混合線ストリングと混合ポリゴンを含む混合2Dジオメトリ

  • 3Dの円および混合3Dジオメトリを除く3Dジオメトリ

    Geometry3D.createGeometry汎用メソッドを使用して混合3Dジオメトリを作成できます。表示される混合3Dオブジェクトに対して空間操作を行うと例外が発生する点に注意してください。

  • ソリッド(塗りつぶし)3Dジオメトリ

次のジオメトリ操作:

  • ジオメトリ・タイプの作成

  • ジオメトリ・タイプのpublicメンバー関数およびpublicフィールドへのアクセス

  • すべての2Dジオメトリジオメトリ・オブジェクトに対するinside操作およびcontain操作です。2Dジオメトリ・オブジェクトは、そのオブジェクトのすべての点が外部ジオメトリ内にあり、外部ジオメトリの境界に接していない場合に内側となります。

  • 任意の2つの2Dジオメトリ間の空間操作です。2つの任意の2Dジオメトリに対して、矩形がポリゴンの内側にあるかどうかを確認するという空間操作を実行できます。円弧で構成される混合ポリゴンなどのジオメトリでは、ゼロ以外の許容範囲を使用して最初に円弧を高密度化する必要があります。

  • 次の3Dジオメトリ、3D点、3D点線、3D矩形および3Dポリゴンに対する空間操作です。

詳細は、次を参照してください。

座標系

  • デカルトおよびWGS84測地座標(デフォルト)

  • SRIDによるデフォルト座標系の指定

  • 他の測地座標の使用

詳細は、「縦座標および座標系とSDO_SRID」を参照してください。

ジオメトリ索引

  • Rツリー

詳細は、「ジオメトリ索引」を参照してください。

ジオメトリ関係演算子

詳細は、「ジオメトリ関係演算子」を参照してください。

ジオメトリ・フィルタ演算子

詳細は、「ジオメトリ・フィルタ演算子」を参照してください。

ジオメトリAPI

com.oracle.cep.cartridge.spatial.Geometryが提供するメソッドの完全なリストは、「ジオメトリAPI」を参照してください。

ジオメトリ集約

  • MBR(最小境界矩形)

詳細は、「ジオメトリ集約」を参照してください。

Oracle Spatialを使用してこれらのOracle Spatial機能にアクセスする方法の詳細は、「Oracle Spatialの使用」を参照してください。

4.1.2.1 ジオメトリ・タイプ

Oracle Spatialのデータ・モデルはジオメトリで構成されます。ジオメトリは、順序の付いた一連の頂点です。ジオメトリのセマンティクスは、そのタイプによって決まります。Oracle Spatialにより、Oracle CQL問合せおよびビューで次のOracle Spatialの型に直接アクセスできます。

  • SDO_GTYPES: Oracle Spatialは次のジオメトリ・タイプをサポートしています。

    • 2D点

    • 2D単純ポリゴン

    • 2D矩形

    • 3D点

    • 3D線

    • 3D矩形

    • 3Dポリゴン

    表4-2は、使用可能なcom.oracle.cep.cartridge.spatial.Geometryクラスのジオメトリ・タイプを説明しています。

    表4-2 Oracle Spatialジオメトリ・タイプ

    ジオメトリ・タイプ 説明

    GTYPE_POINT

    1つの点を含む点ジオメトリ・タイプ。

    GTYPE_CURVE

    直線セグメントまたは円弧セグメント(あるいはその両方)を含むことができる1つの線ストリングを含む曲線ジオメトリ・タイプです。

    (LINEおよびCURVEは、このコンテキストでは同義です。)

    GTYPE_POLYGON

    GTYPE_SURFACE

    1つのポリゴンを含むポリゴン・ジオメトリ・タイプ。

    穴のあるまたは穴のない1つのポリゴンまたは1つ以上のポリゴンで構成される1つの面を含むポリゴン・ジオメトリ・タイプまたは面ジオメトリ・タイプです。3次元ポリゴンでは、すべての点が同じ平面上にあることが必要です。

    GTYPE_COLLECTION

    異種の要素の集合であるコレクション・ジオメトリ・タイプです。

    COLLECTIONは、他のすべてのタイプを含むスーパーセットです。

    GTYPE_MULTIPOINT

    1つ以上の点を持つマルチポイント・ジオメトリ・タイプです。(MULTIPOINTは、POINTのスーパーセットです。)

    GTYPE_MULTICURVE

    1つ以上の線ストリングを持つマルチライン・ジオメトリまたはマルチカーブ・ジオメトリ・タイプです。

    (MULTILINEおよびMULTICURVEは、このコンテキストでは同義であり、それぞれLINEおよびCURVEのスーパーセットです。)

    GTYPE_MULTIPOLYGON

    GTYPE_MULTISURFACE

    複数の非接続ポリゴン(複数の外側の境界)または面を持てるマルチポリゴン・ジオメトリ・タイプまたはマルチサーフェイス・ジオメトリ・タイプです。

    MULTIPOLYGONPOLYGONのサブセットで、MULTISURFACESURFACEのスーパーセットです。

    GTYPE_SOLID

    複数の面で構成され、3次元空間で完全に囲まれたソリッド・ジオメトリです。立方形や錐台があります。

    GTYPE_MULTISOLID

    複数の非接続のソリッド(複数の外側の境界)で構成されるマルチソリッド・ジオメトリです。

    MULTISOLIDは、SOLIDのスーパーセットです。

  • SDO_ELEMENT_INFO: 次の項目を使用して、要素情報配列を作成できます。

    • com.oracle.cep.cartridge.spatial.Geometry.createElemInfo静的メソッド

    • einfogenerator関数

    詳細は、「要素情報配列」を参照してください。

  • ORDINATES: Oracle Spatialのordsgenerator関数を使用して、縦座標を作成できます。

    詳細は、「縦座標および座標系とSDO_SRID」を参照してください。

詳細は、次を参照してください。

4.1.2.2 要素情報配列

Element Info属性は、可変長の数値配列を使用して定義されます。この属性は、Ordinates属性に格納されている縦座標を解釈する方法を指定します。

Oracle Spatialには、Element Info属性値を生成するために、次のヘルパー関数が用意されています。

com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(int SDO_STARTING_OFFSET, int SDO_ETYPE , int SDO_INTERPRETATION)

einfogenerator関数を使用することもできます。

詳細は、次を参照してください。

4.1.2.3 縦座標および座標系とSDO_SRID

表4-3は、Oracle Spatialがデフォルトでサポートする座標系、および各座標系を識別するSDO_SRIDの一覧です。

表4-3 Oracle Spatial座標系

座標系 SDO_SRID 説明

デカルト

0

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

測地(WGS84)

8307

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

これは、Oracle Spatialのデフォルトの座標系です。

SDO_SRIDの値は、呼び出すOracle Spatialのメソッドおよびコンストラクタのそれぞれに引数として指定できます。または、SDO_SRIDをOracle Spatialのアプリケーション・コンテキストに一度だけ構成し、毎回引数としてSDO_SRIDを設定することなくcom.oracle.cep.cartridge.spatial.Geometryメソッドを使用できます。アプリケーション・コンテキストを使用する場合、Oracle Spatialでサポートされる任意の座標系も指定できます。

注意:

SDO_SRID値を使用しないcom.oracle.cep.cartridge.spatial.Geometryメソッドを使用する場合、Oracle Spatialのアプリケーション・コンテキストを使用する必要があります。たとえば、次のメソッド呼出しはランタイム例外の原因になります。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(lng, lat)

かわりに、spatialリンク名を使用して、メソッド呼出しをOracle Spatialのアプリケーション・コンテキストと関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

SDO_SRID値を使用するGeometryメソッドを使用する場合、spatialリンク名の使用はオプションです。たとえば、次のメソッド呼出しは両方とも有効です。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, lng, lat)
com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

詳細は、「Oracle Spatialアプリケーション・コンテキスト」を参照してください。

縦座標は、ダブル配列を使用してジオメトリの座標の配列を定義します。Oracle Spatialには、座標の配列を生成するためにordsgeneratorヘルパー関数が用意されています。構文は、「ordsgenerator」を参照してください。

詳細は、次を参照してください。

4.1.2.4 ジオメトリ索引

Oracle Spatialでは空間索引を使用して、1次フィルタを実装します。空間索引の目的は、データのサブセットを迅速に作成し、2次フィルタでの処理の負荷を軽減することです。

空間索引は、他の索引と同様、検索対象を限定するメカニズムを提供しますが、この場合は、交差および包含のような空間基準に基づきます。

Oracle Spatialでは、デフォルトの索引作成メカニズムにRツリー索引を使用しています。空間Rツリー索引では、最大4次元の空間データの索引を作成できます。Rツリー索引では、ジオメトリを囲む最小の矩形(最小境界矩形(MBR))によって各ジオメトリを近似させます。

詳細は、「ジオメトリ・フィルタ演算子」を参照してください。

4.1.2.5 ジオメトリ関係演算子

Oracle Spatialでは、次のOracle Spatialジオメトリ関係演算子がサポートされます。

これらの操作はすべて、Oracle CQL問合せのprojection句またはwhere句のいずれかに使用できます。

Oracle CQL問合せのwhere句でジオメトリ関係演算子を使用する場合、Oracle Spatialで、where句で指定された関係に対してRツリー索引を作成できます。

Oracle Spatialでは、点と他のジオメトリ・タイプ間のジオメトリ関係のみがサポートされます。

詳細は、「ジオメトリ関係演算子の使用方法」を参照してください。

4.1.2.6 ジオメトリ・フィルタ演算子

Oracle Spatialでは、次のOracle Spatialジオメトリ・フィルタ演算子がサポートされます。

これらのフィルタ演算子では一時フィルタが実行されるので、Oracle CQL問合せのwhere句でのみ使用されます。

これらのフィルタ演算子では空間索引を使用して、指定するオブジェクトと空間的に対話する可能性がある一連の空間オブジェクトが識別されます。

詳細は、次を参照してください。

4.1.2.7 ジオメトリ集約

ジオメトリ集約演算子MBRは、Oracle CQL問合せのprojection句にのみ使用可能です。

詳細は、「ジオメトリ集約演算子の使用方法」を参照してください。

4.1.2.8 ジオメトリAPI

Oracle SpatialはOracle Spatial Java APIに基づいています。Oracle SpatialはOracle Spatial機能をcom.oracle.cep.cartridge.spatial.Geometryクラスに公開します。このGeometryクラスにより、oracle.spatial.geometry.J3D_Geometryも拡張されます。Oracle Spatialは2Dジオメトリおよび3Dジオメトリをサポートし、J3D_GeometryメソッドでZ座標を自動的にゼロ詰めします。

Geometryクラスからアクセスできない(またはOracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠していない)Oracle Spatial機能に、Oracle Spatialからアクセスすることはできません。

この項では、次の内容について説明します。

詳細は、次を参照してください。

注意:

Oracle Spatialの型名を単純化するには、『Oracle CQL言語リファレンス』で説明しているエイリアスを使用できます。

4.1.2.8.1 com.oracle.cep.cartridge.spatial.Geometryのメソッド

表4-4は、Geometryクラスが提供するパブリック・メソッドの一覧です。

表4-4 Oracle Spatialジオメトリ・メソッド

タイプ メソッド

バッファ

変換

距離

要素情報

ジオメトリ

単線または複線のストリング

線形ポリゴン

最小境界矩形(MBR)

矩形

型および型変換

注意:

Geometryクラスでは大文字と小文字が区別されるため、表示されている方を使用してください。

4.1.2.8.2 oracle.spatial.geometry.JGeometryのメソッド

次のJGeometryパブリック・メソッドを、Oracle Spatialに適用できます。

  • double area(double tolerance): 2Dジオメトリの平面の表面積合計を返します。

  • double length(double tolerance): 2Dジオメトリの周辺の長さを返します。すべての辺の長さが加えられます。

  • double[] getMBR(): このジオメトリの最小境界矩形(MBR)を返します。2DのMBRのminXminYmaxXおよびmaxY値を含むダブル配列を返します。

詳細は、次を参照してください。

4.1.3 データ型マッピング

Oracle Spatialカートリッジは、1つのデータ型com.oracle.cep.cartridge.spatial.Geometryをサポートしています。

Geometryクラスはoracle.spatial.geometry.J3D_Geometryを拡張し、J3D_Geometryおよび親クラスのoracle.spatial.geometry.JGeometryが提供するすべてのパブリックなメソッド、フィールドおよびコンストラクタをサポートします。

com.oracle.cep.cartridge.spatial.Geometryが提供するメソッドの完全なリストは、「ジオメトリAPI」を参照してください。

4.1.4 Oracle Spatialのアプリケーション・コンテキスト

Oracle Spatialのインスタンスにアプリケーション・コンテキストを定義し、このアプリケーション・コンテキストをランタイム時に伝播できます。これにより、特定のOracle Spatialアプリケーション・デフォルト(SDO_SRIDなど)を特定のOracle Spatialインスタンスに関連付けることができます。

Oracle Spatialアプリケーション・コンテキストを定義する前に、Oracle Stream AnalyticsアプリケーションEPNアセンブリ・ファイルを編集して、必要なネームスペースおよびスキーマの場所のエントリを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
       xmlns:spatial="http://www.oracle.com/ns/ocep/spatial"
       xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/osgi
  http://www.springframework.org/schema/osgi/spring-osgi.xsd
  http://www.bea.com/ns/wlevs/spring
  http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_1_1_6.xsd"
  http://www.oracle.com/ns/ocep/spatial
  http://www.oracle.com/ns/ocep/spatial/ocep-spatial.xsd">

次の例では、Geodetic Reference System 1980 (GRS80)座標系を使用して、EPNアセンブリ・ファイルにSpatialGRS80という名前の空間コンテキストを作成する方法を説明しています。

<spatial:context id="SpatialGRS80" srid="4269" sma="6378137" rof="298.25722101" />

次の例は、Oracle CQL問合せでspatial:contextを参照する方法を示しています。この場合、問合せでリンク名SpatialGRS80(前述の例で定義)が使用され、このアプリケーション・コンテキストがOracle Spatialに伝播されます。SpatialGRS80spatial:context属性設定は、createPointメソッド・コールに適用されます。

<view  id="createPoint">
    select com.oracle.cep.cartridge.spatial.Geometry.createPoint@SpatialGRS80(
        lng, lat)
    from CustomerPos[NOW]
</view>

4.2 Oracle Spatialの使用

この項では、Oracle Stream AnalyticsアプリケーションでのOracle Spatialの使用方法をまとめた共通のユース・ケースを説明します。次の内容が含まれます。

詳細は、「ジオメトリAPI」を参照してください。

4.2.1 Oracle Spatial Java APIジオメトリ・タイプへのアクセス方法

次の手順では、Oracle CQL問合せでOracle Spatialを使用してOracle Spatialジオメトリ・タイプSDO_GTYPESDO_ELEMENT_INFOおよびORDINATESにアクセスする方法について説明します。

Oracle Spatial Java APIでサポートされているジオメトリ・タイプにアクセスするには:

  1. パッケージcom.oracle.cep.cartridge.spatialOracle Stream AnalyticsアプリケーションのMANIFEST.MFファイルにインポートします。
  2. 適切なOracle Spatialデータ型を使用して、Oracle Stream Analyticsアプリケーションのイベント・タイプを定義します。

    次の例では、com.oracle.cep.cartridge.spatial.Geometry型の2つのイベント・プロパティxおよびyを持つイベント・タイプMySpatialEventを定義する方法を説明しています。

    <wlevs:event-type-repository>
        <wlevs:event-type type-name="MySpatialEvent">
            <wlevs:properties>
                <wlevs:property name="x" type="com.oracle.cep.cartridge.spatial.Geometry"/>
                <wlevs:property name="y" type="com.oracle.cep.cartridge.spatial.Geometry"/>
            </wlevs:properties>
        </wlevs:event-type>
    </wlevs:event-type-repository>
    

    次のように、Oracle CQL問合せでこれらのイベント・プロパティを使用できます。

    CONTAIN@spatial(x, y, 20.0d)
    

    詳細は、『Oracle Stream Analyticsによるイベント処理用アプリケーションの開発』を参照してください。

  3. GTYPE_POLYGONなどのSDO_GTYPEを選択します。

    詳細は、「ジオメトリ・タイプ」を参照してください。

  4. 縦座標に適した要素情報を選択します。

    詳細は、「要素情報配列」を参照してください。

  5. 座標の値を指定します。

    詳細は、「縦座標および座標系とSDO_SRID」を参照してください。

  6. 次の例が示すように、Oracle CQL問合せを作成します。
    view id="ShopGeom">
        select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
            com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
            com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(1, 1003, 1),
            ordsgenerator@spatial(
                lng1, lat1, lng2, lat2, lng3, lat3,
                lng4, lat4, lng5, lat5, lng6, lat6
            ) 
        ) as geom
        from ShopDesc
    </view>

4.2.2 ジオメトリの作成方法

次のメソッドを呼び出すことで、Oracle Spatialを使用してOracle CQL問合せでジオメトリを作成できます。

  • com.oracle.cartridge.spatial.Geometryの静的メソッド

  • Oracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠している、oracle.spatial.geometry.JGeometryのメソッド。

  • oracle.spatial.geometry.J3D_Geometryのコンストラクタ・メソッド

  • oracle.spatial.geometry.J3D_Geometryの静的メソッド

詳細は、「ジオメトリAPI」を参照してください。

Oracle Spatialジオメトリ・クラスでの静的メソッドの使用

次の例では、com.oracle.cartridge.spatial.Geometryの静的メソッドを使用して点ジオメトリを作成する方法を説明しています。この例では、リンク(@spatial)を使用して、このクラスを提供するデータ・カートリッジを識別する必要があります。この方法の利点は、Oracle Spatialアプリケーション・コンテキストを使用してSRIDや他のOracle Spatialオプションの設定を行えることです。これはデフォルトで実行されるか、構成するアプリケーション・コンテキストに基づいて実行されます(「Oracle Spatialアプリケーション・コンテキスト」を参照)。

<view  id="CustomerPosGeom">
    select com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(
        lng, lat) as geom
    from CustomerPos[NOW]
</view>

Oracle Spatial J3D_Geometryコンストラクタ

次の例では、oracle.spatial.geometry.J3D_Geometryのコンストラクタ・メソッドを使用してジオメトリを作成する方法を説明しています。この場合、J3D_GeometryはJavaクラスなので、リンク(@spatial)を使用しません。この方法の欠点は、com.oracle.cartridge.spatial.Geometryの使用とは異なり、アプリケーション・コンテキストを使用できないため、SRIDを設定する必要がある点です。

<view  id="CustomerPosGeom">
    select oracle.spatial.geometry.J3D_Geometry(
        oracle.spatial.geometry.GTYPE_POINT, srid, x, y, z) as geom
    from CustomerPos[NOW]
</view>

Oracle Spatial J3D_Geometryの静的メソッドの使用

次の例では、oracle.spatial.geometry.J3D_Geometryの静的メソッドを使用してジオメトリを作成する方法を説明しています。

<view  id="CustomerPosGeom">
    select  oracle.spatial.geometry.J3D_Geometry.createArc@spatial(
        x1, y1, x2, y2, x3, y3) as geom
    from CustomerPos[NOW]
</view>

詳細は、「ジオメトリ・タイプ」を参照してください。

4.2.3 ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス方法

Oracle Spatialを使用すると、Oracle CQLでOracle Spatialクラスのpublicメンバー関数およびpublicメンバー・フィールドに直接アクセスできます。

Geometryクラスからアクセスできない(またはOracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠していない)Oracle Spatial機能に、Oracle Spatialからアクセスすることはできません。

次の例では、ShopGeomビューはgeomという名前のOracle Spatialジオメトリを作成します。ビューshopMBRJGeometry静的メソッドgetMBRを呼び出し、double[]がストリーム要素mbrとして返されています。問合せqshopMBRは標準Java APIを使用してこのdouble[]にアクセスしています。

<view id="ShopGeom">
    select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
        com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
        com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(1, 1003, 1),
        ordsgenerator@spatial(
            lng1, lat1, lng2, lat2, lng3, lat3,
            lng4, lat4, lng5, lat5, lng6, lat6
        ) 
    ) as geom
    from ShopDesc
</view>
<view  id="shopMBR">
    select geom.getMBR() as mbr
    from ShopGeom
</view>
<query  id="qshopMBR">
    select mbr[0], mbr[1], mbr[2], mbr[3]
    from shopMBR
</query>

詳細は、次を参照してください。

4.2.4 ジオメトリ関係演算子の使用方法

Oracle Spatialを使用すると、Oracle CQL問合せのWHERE句またはSELECT句で、次のOracle Spatialジオメトリ関係演算子にアクセスできます。

次の例では、op_in_whereビューはWHERE句でCONTAINジオメトリ比較演算子を使用します。この場合、Oracle SpatialはRツリー索引を使用します。ビューop_in_projでは、SELECT句でCONTAINを使用しています。

<view id="op_in_where">
    RStream(
        select 
            loc.customerId, 
            shop.shopId
        from 
            LocGeomStream[NOW] as loc, 
            ShopGeomRelation as shop
        where 
            CONTAIN@spatial(shop.geom, loc.curLoc, 5.0d) = true
    )
</view>
<view id="op_in_proj">
    RStream(
        select 
            loc.customerId, 
            shop.shopId, 
            CONTAIN@spatial(shop.geom, loc.curLoc, 5.0d)
        from 
            LocGeomStream[NOW] as loc, 
            ShopGeomRelation as shop
    )
</view>

詳細は、「ジオメトリ比較演算子」を参照してください。

4.2.5 ジオメトリ・フィルタ演算子の使用方法

Oracle Spatialを使用すると、Oracle CQL問合せのWHERE句で、次のOracle Spatialジオメトリ・フィルタ演算子にアクセスできます。

次の例では、filterビューのWHERE句でジオメトリ・フィルタ演算子FILTERを使用します。

<view id="filter">
    RStream(
        select loc.customerId, shop.shopId
        from LocGeomStream[NOW] as loc, ShopGeomRelation as shop
        where FILTER@spatial(shop.geom, loc.curLoc, 5.0d) = true
    )
</view>

詳細は、「ジオメトリ・フィルタ演算子」を参照してください。

4.2.6 ジオメトリ集約演算子の使用方

Oracle Spatialデータ・カートリッジを使用して、Oracle CQL問合せのSELECT句で、次のOracle Spatial集約演算子を使用できます。

  • MBR

次の例では、vaggrmbrビューはSELECT句でジオメトリ集約演算子MBRを使用します。問合せqaggrmbrは、標準のJava APIを使用して、MBRジオメトリ集約演算子が返すdouble[]値にアクセスします。

<view id="vaggrmbr">
    select MBR@spatial1(shop.geom) as mbr
    from ShopGeomRelation as shop
</view>
<query id="qaggrmbr">
    select mbr[0], mbr[1], mbr[2], mbr[3], mbr[4], mbr[5], mbr[6]
    from vaggrmbr
</query>

詳細は、「ジオメトリ・フィルタ演算子」を参照してください。

4.2.7 デフォルトの測地座標の使用方法

Oracle Spatialのデフォルトのアプリケーション・コンテキストを使用してOracle CQL問合せを作成すると、デフォルトのSRIDCARTESIANに設定されます。

次の例では、createPointメソッド呼出しでデフォルトのリンク(@spatial)が使用されます。これにより、Oracle Spatialのデフォルトのアプリケーション・コンテキストが適用されるようになります。

<view  id="createPoint">
    select com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(
        lng, lat)
    from CustomerPos[NOW]
</view>

詳細は、次を参照してください。

4.2.8 他の測地座標の使用方法

次の手順では、Oracle Spatialのアプリケーション・コンテキストを使用して、デフォルトのデカルト測地座標系以外の測地座標系をOracle CQL問合せで指定する方法について説明します。

詳細は、次を参照してください。

他の測地座標を使用するには:

  1. Oracle Spatialのアプリケーション・コンテキストを作成し、使用する測地座標のsrid属性を定義します。

    次の例では、Geodetic Reference System 1980 (GRS80)座標系を使用して、EPNアセンブリ・ファイルにSpatialGRS80という名前の空間コンテキストを作成する方法を説明しています。

    <spatial:context id="SpatialGRS80" srid="4269" sma="6378137" rof="298.25722101" />
    
  2. Oracle CQL問合せにおいて、リンクでこのspatial:contextのIDを使用します。

    次の例は、Oracle CQL問合せでspatial:contextを参照する方法を示しています。この場合、問合せでリンク名SpatialGRS80が使用され、このアプリケーション・コンテキストがOracle Spatialに伝播されます。SpatialGRS80spatial:context属性設定は、createPointメソッド・コールに適用されます。

    <view  id="createPoint">
        select com.oracle.cep.cartridge.spatial.Geometry.createPoint@SpatialGRS80(
            lng, lat)
        from CustomerPos[NOW]
    </view>