この章では、Oracle Continuous Query Language (Oracle CQL)を拡張して位置情報対応型のアプリケーションに高度な空間機能を提供するOracle Spatialカートリッジを使用する場合のリファレンスとガイドを提供します。
Oracle Spatialの型、メソッド、フィールドおよびコンストラクタを、Oracle CQLのネイティブ型と同様に、Oracle Event Processingアプリケーションの作成時にOracle CQLの問合せおよびビューで使用できます。
この章の内容は次のとおりです。
詳細は、次を参照してください。
Oracle Spatialは、高度な空間機能を提供するOracle Databaseのオプションで、ハイエンドな地理情報システム(GIS)および位置情報対応型のビジネス・インテリジェンス・ソリューション(LBS)をサポートします。
Oracle Spatialは、Oracle Event ProcessingアプリケーションでOracle Spatialクラスとシームレスに対話するOracle CQLの問合せおよびビューを記述するための、オプションのデータ・カートリッジです。
Oracle Spatialを使用すると、空間データの索引作成が可能になり、空間データの格納、空間データでの近接および重複比較の実行、空間データとOracle Event Processingサーバーの統合など、重要な地理ドメイン操作を実行するOracle CQL問合せを構成できます。
Oracle Spatialを使用するには、Oracle Spatial APIに関する実用的な知識が必要です。Oracle Spatialの詳細は、次の資料を参照してください。
製品概要: http://www.oracle.com/technology/products/spatial/index.html
Oracle Spatialのドキュメント: http://www.oracle.com/pls/db112/portal.portal_db?selected=7&frame=#oracle_spatial_and_location_information
Oracle Spatial Java APIリファレンス: http://download.oracle.com/docs/cd/E11882_01/appdev.112/e11829/toc.htm
この項の内容は、次のとおりです。
Oracle Spatialでは、カートリッジID com.oracle.cep.cartrdiges.spatial
を使用してサーバー・スコープ予約済リンク名spatial
を登録します。
spatial
リンク名を使用して、Oracle Spatialのメソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付けます。
詳細は、次を参照してください。
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 CQL問合せでは、Oracle Spatialを使用して、表16-1に示すOracle Spatial機能にアクセスできます。
表16-1 Oracle Spatialの有効範囲
Oracle Spatialの機能 | 有効範囲 |
---|---|
ジオメトリ・タイプ |
Oracle Spatial Java APIの次のジオメトリ・タイプ:
次のジオメトリ操作:
詳細は、次を参照してください。 |
座標系 |
詳細は、16.1.2.3項「縦座標および座標系とSDO_SRID」を参照してください。 |
ジオメトリ索引 |
詳細は、16.1.2.4項「ジオメトリ索引」を参照してください。 |
ジオメトリ関係演算子 |
詳細は、16.1.2.5項「ジオメトリ関係演算子」を参照してください。 |
ジオメトリ・フィルタ演算子 |
詳細は、16.1.2.6項「ジオメトリ・フィルタ演算子」を参照してください。 |
ジオメトリAPI |
|
Oracle Spatialを使用してこれらのOracle Spatial機能にアクセスする方法の詳細は、16.2項「Oracle Spatialの使用」を参照してください。
Oracle Spatialのデータ・モデルはジオメトリで構成されます。ジオメトリは、順序の付いた一連の頂点です。ジオメトリのセマンティクスは、そのタイプによって決まります。
Oracle Spatialを使用すると、Oracle CQLの問合せとビューで次のOracle Spatialタイプに直接アクセスできます。
SDO_GTYPES
: Oracle Spatialは次のジオメトリ・タイプをサポートしています。
2Dの点
2Dの単純ポリゴン
2Dの矩形
表16-2は、使用可能なcom.oracle.cep.cartridge.spatial.Geometry
クラスのジオメトリ・タイプを示しています。
SDO_ELEMENT_INFO
: 次の項目を使用して、要素情報配列を作成できます。
com.oracle.cep.cartridge.spatial.Geometry.createElemInfo
静的メソッド
einfogenerator
関数
詳細は、16.1.2.2項「要素情報配列」を参照してください。
ORDINATES
: Oracle Spatialのordsgenerator
関数を使用して、縦座標を作成できます。
詳細は、16.1.2.3項「縦座標および座標系とSDO_SRID」を参照してください。
詳細は、次を参照してください。
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
関数を使用することもできます。
詳細は、次を参照してください。
『Oracle Spatial開発者ガイド』のSDO_ELEM_INFOに関する項
表16-3は、Oracle Spatialでデフォルトでサポートされる座標系、および各座標系を識別するSDO_SRID
値を示しています。
表16-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でサポートされる任意の座標系も指定できます。
注意:
com.oracle.cep.cartridge.spatial.Geometry.createPoint(lng, lat) かわりに、 com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)
com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, lng, lat) com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat) 詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。 |
縦座標は、ダブル配列を使用してジオメトリの座標の配列を定義します。Oracle Spatialには、座標の配列を生成するためにordsgenerator
ヘルパー関数が用意されています。構文については、「ordsgenerator」を参照してください。
詳細は、次を参照してください。
『Oracle Spatial開発者ガイド』のSDO_SRIDに関する項
『Oracle Spatial開発者ガイド』の座標系(空間参照システム)に関する項
Oracle Spatialでは空間索引を使用して、1次フィルタを実装します。空間索引の目的は、データのサブセットを迅速に作成し、2次フィルタでの処理の負荷を軽減することです。
空間索引は他の索引と同様、検索対象を限定するメカニズムを提供しますが、この場合は、メカニズムは交差や包含のような空間基準に基づきます。
Oracle Spatialでは、デフォルトの索引作成メカニズムにRツリー索引を使用しています。空間Rツリー索引では、最大4次元の空間データの索引を作成できます。Rツリー索引では、ジオメトリを囲む最小の矩形(最小境界矩形(MBR))によって各ジオメトリを近似させます。
詳細は、次を参照してください。
『Oracle Spatial開発者ガイド』の空間データの索引作成に関する項
Oracle Spatialでは、次のOracle Spatialジオメトリ関係演算子がサポートされます。
これらの操作はすべて、Oracle CQL問合せのprojection句またはwhere句のいずれかに使用できます。
Oracle CQL問合せのwhere句でジオメトリ関係演算子を使用する場合、Oracle Spatialで、where句で指定された関係に対してRツリー索引を作成できます。
Oracle Spatialでは、点と他のジオメトリ・タイプ間のジオメトリ関係のみがサポートされます。
詳細は、16.2.4項「ジオメトリ関係演算子の使用方法」を参照してください。
Oracle Spatialでは、次のOracle Spatialジオメトリ・フィルタ演算子がサポートされます。
これらのフィルタ演算子では一時フィルタが実行されるので、Oracle CQL問合せのwhere句でのみ使用されます。
これらのフィルタ演算子では空間索引を使用して、指定するオブジェクトと空間的に対話する可能性がある一連の空間オブジェクトが識別されます。
詳細は、次を参照してください。
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のジオメトリのみですが、効率の向上のために、Geometry
クラスでは一部のJ3D_Geometry
メソッドも使用されます。Geometry
クラスでは、J3D_Geometry
メソッドのためにZ座標に自動的にゼロが埋め込まれます。
Geometry
クラスからアクセスできない(またはOracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠していない)Oracle Spatial機能に、Oracle Spatialからアクセスすることはできません。
この項の内容は、次のとおりです。
詳細は、次を参照してください。
表16-4は、Geometry
クラスで提供されるパブリック・メソッドを示しています。
注意:
|
注意:
com.oracle.cep.cartridge.spatial.Geometry.createPoint(lng, lat) かわりに、 com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)
com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, lng, lat) com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat) 詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。 |
次のJGeometry
パブリック・メソッドを、Oracle Spatialに適用できます。
double area(double tolerance)
: 2Dジオメトリの平面の表面積合計を返します。
double length(double tolerance)
: 2Dジオメトリの周辺の長さを返します。すべての辺の長さが加えられます。
double[] getMBR()
: このジオメトリの最小境界矩形(MBR)を返します。2DのMBRのminX
、minY
、maxX
およびmaxY
値を含むダブル配列を返します。
詳細は、次を参照してください。
Oracle Spatialカートリッジは、1つのデータ型com.oracle.cep.cartridge.spatial.Geometry
をサポートしています。
com.oracle.cep.cartridge.spatial.Geometry
で提供されているメソッドの完全なリストは、16.1.2.7項「ジオメトリAPI」を参照してください。
Oracle Spatialのインスタンスにアプリケーション・コンテキストを定義し、このアプリケーション・コンテキストをランタイム時に伝播できます。これにより、特定のOracle Spatialアプリケーション・デフォルト(SDO_SRID
など)を特定のOracle Spatialインスタンスに関連付けることができます。
Oracle Spatialアプリケーション・コンテキストを定義する前に、例16-1に示すように、必須のネームスペースおよびスキーマの場所のエントリを追加するように、Oracle Event ProcessingアプリケーションEPNアセンブリ・ファイルを編集します。
例16-1 EPNアセンブリ・ファイル: Oracle Spatialネームスペースおよびスキーマの場所
<?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">
例16-2は、測地参照システム1980 (GRS80)座標系を使用して、SpatialGRS80
という空間コンテキストをEPNアセンブリ・ファイルに作成する方法を示しています。
例16-2 EPNアセンブリ・ファイルのspatial:context要素
<spatial:context id="SpatialGRS80" srid="4269" sma="6378137" rof="298.25722101" />
例16-3は、Oracle CQL問合せでspatial:context
を参照する方法を示しています。この例では、問合せは(例16-2で定義された)リンク名SpatialGRS80
を使用して、このアプリケーション・コンテキストをOracle Spatialに伝播しています。SpatialGRS80
のspatial:context
属性設定は、createPoint
メソッド呼出しに適用されます。
例16-3 Oracle CQL問合せでのspatial:contextの参照
<view id="createPoint"> select com.oracle.cep.cartridge.spatial.Geometry.createPoint@SpatialGRS80( lng, lat) from CustomerPos[NOW] </view>
詳細は(すべてのspatial:context
属性の完全なリストなど)、『Oracle Fusion Middleware Oracle Event Processing開発者ガイドfor Eclipse』のOracle Spatialのアプリケーション・コンテキストの構成方法に関する項を参照してください。
注意:
com.oracle.cep.cartridge.spatial.Geometry.createPoint(lng, lat) かわりに、 com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)
com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, lng, lat) com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat) 詳細は、16.1.2.7項「ジオメトリAPI」を参照してください。 |
この項では、Oracle Event ProcessingアプリケーションでOracle Spatialをどのように使用できるかを中心に、次のような一般的な使用例を説明します。
詳細は、16.1.2.7項「ジオメトリAPI」を参照してください。
次の手順では、Oracle CQL問合せでOracle Spatialを使用してOracle Spatialジオメトリ・タイプSDO_GTYPE
、SDO_ELEMENT_INFO
およびORDINATES
にアクセスする方法について説明します。
Oracle Spatial Java APIでサポートされているジオメトリ・タイプにアクセスするには:
パッケージcom.oracle.cep.cartridge.spatial
をOracle Event ProcessingアプリケーションのMANIFEST.MF
ファイルにインポートします。
詳細は、『Oracle Fusion Middleware Oracle Event Processing開発者ガイドfor Eclipse』のパッケージのインポート方法に関する項を参照してください。
適切なOracle Spatialデータ型を使用して、Oracle Event Processingアプリケーションのイベント・タイプを定義します。
例16-4に、com.oracle.cep.cartridge.spatial.Geometry
型の2つのイベント・プロパティx
およびy
を使用して、イベント・タイプMySpatialEvent
を定義する方法を示します。
例16-4 Oracle Spatial型を使用したOracle Event Processingイベント
<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 Fusion Middleware Oracle Event Processing開発者ガイドfor Eclipse』のイベント・タイプの定義と使用に関する項を参照してください。
GTYPE_POLYGON
などのSDO_GTYPE
を選択します。
詳細は、16.1.2.1項「ジオメトリ・タイプ」を参照してください。
縦座標に適した要素情報を選択します。
詳細は、16.1.2.2項「要素情報配列」を参照してください。
座標の値を指定します。
詳細は、16.1.2.3項「縦座標および座標系とSDO_SRID」を参照してください。
例16-5に示すように、Oracle CQL問合せを作成します。
例16-5 Oracle Spatialジオメトリ・タイプを使用した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>
次のメソッドを呼び出すことで、Oracle Spatialを使用してOracle CQL問合せでジオメトリを作成できます。
com.oracle.cartridge.spatial.Geometry
の静的メソッド
Oracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠している、oracle.spatial.geometry.JGeometry
のメソッド。
詳細は、16.1.2.7項「ジオメトリAPI」を参照してください。
Oracle Spatialジオメトリ・クラスでの静的メソッドの使用
例16-6は、com.oracle.cartridge.spatial.Geometry
の静的メソッドを使用して点ジオメトリを作成する方法を示しています。この例では、リンク(@spatial
)を使用して、このクラスを提供するデータ・カートリッジを識別する必要があります。この方法の利点は、デフォルトで、または構成したアプリケーション・コンテキストに基づいて、Oracle Spatialのアプリケーション・コンテキストが適用され、SRIDおよび他のOracle Spatialオプションが設定される点です(16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照)。
例16-6 ジオメトリ静的メソッドを使用した点ジオメトリの作成
<view id="CustomerPosGeom"> select com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial( lng, lat) as geom from CustomerPos[NOW] </view>
詳細は、16.1.2.1項「ジオメトリ・タイプ」を参照してください。
Oracle Spatialを使用すると、Oracle CQLでOracle Spatialクラスのpublicメンバー関数およびpublicメンバー・フィールドに直接アクセスできます。
Geometry
クラスからアクセスできない(またはOracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠していない)Oracle Spatial機能に、Oracle Spatialからアクセスすることはできません。
例16-7では、ビューShopGeom
はgeom
というOracle Spatialジオメトリを作成しています。ビューshopMBR
はJGeometry
静的メソッドgetMBR
を呼び出し、double[]
がストリーム要素mbr
として返されています。問合せqshopMBR
は標準Java APIを使用してこのdouble[]
にアクセスしています。
例16-7 ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス
<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>
詳細は、次を参照してください。
Oracle Spatialを使用すると、Oracle CQL問合せのWHERE
句またはSELECT
句で、次のOracle Spatialジオメトリ関係演算子にアクセスできます。
例16-8において、ビューop_in_where
では、WHERE
句でCONTAIN
ジオメトリ関係演算子を使用しています。この場合、Oracle SpatialではRツリー索引を使用します。ビューop_in_proj
では、SELECT
句でCONTAIN
を使用しています。
例16-8 ジオメトリ関係演算子の使用
<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>
詳細は、16.1.2.5項「ジオメトリ関係演算子」を参照してください。
Oracle Spatialを使用すると、Oracle CQL問合せのWHERE
句で、次のOracle Spatialジオメトリ・フィルタ演算子にアクセスできます。
例16-9では、ビューfilter
はWHERE
でFILTER
ジオメトリ・フィルタ演算子を使用しています。
例16-9 ジオメトリ・フィルタ演算子の使用
<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>
詳細は、16.1.2.6項「ジオメトリ・フィルタ演算子」を参照してください。
Oracle Spatialのデフォルトのアプリケーション・コンテキストを使用してOracle CQL問合せを作成すると、デフォルトのSRID
がCARTESIAN
に設定されます。
例16-10に示すように、createPoint
メソッド呼出しはデフォルトのリンク(@spatial
)を使用します。これにより、Oracle Spatialのデフォルトのアプリケーション・コンテキストが適用されるようになります。
例16-10 Oracle CQL問合せでのデフォルトの測地座標の使用
<view id="createPoint"> select com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial( lng, lat) from CustomerPos[NOW] </view>
詳細は、次を参照してください。
次の手順では、Oracle Spatialのアプリケーション・コンテキストを使用して、デフォルトのデカルト測地座標系以外の測地座標系をOracle CQL問合せで指定する方法について説明します。
詳細は、次を参照してください。
他の測地座標を使用するには:
Oracle Spatialのアプリケーション・コンテキストを作成し、使用する測地座標のsrid
属性を定義します。
例16-11は、測地参照システム1980 (GRS80)座標系を使用して、SpatialGRS80
という空間コンテキストをEPNアセンブリ・ファイルに作成する方法を示しています。
Oracle CQL問合せにおいて、リンクでこのspatial:context
のIDを使用します。
例16-12は、Oracle CQL問合せでspatial:context
を参照する方法を示しています。この例では、問合せは(例16-11で定義された)リンク名SpatialGRS80
を使用して、このアプリケーション・コンテキストをOracle Spatialに伝播しています。SpatialGRS80
のspatial:context
属性設定は、createPoint
メソッド呼出しに適用されます。
構文
注意: これは、Oracle Spatialジオメトリ関係演算子であり、 ANYINTERACT@spatial |
目的
この演算子は、GTYPE_POINT
がジオメトリと対話する場合にtrue
を返し、それ以外の場合はfalse
を返します。
この演算子は次の引数を使用します。
geom
: サポートされるすべてのジオメトリ・タイプ。
key
: GTYPE_POINT
ジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINT
である必要があり、それ以外の場合はRUNTIME_EXCEPTION
が発生します。
tol
: double
値としての許容範囲。
詳細は、『Oracle Spatial開発者ガイド』のSDO_ANYINTERACTに関する項を参照してください。
例
例16-27は、Oracle CQL問合せでANYINTERACT
Oracle Spatialジオメトリ関係演算子を使用する方法を示します。
例16-13 ジオメトリ関係演算子ANYINTERACTを使用したOracle CQL問合せ
<view id="op_in_where"> RStream( select loc.customerId, shop.shopId from LocGeomStream[NOW] as loc, ShopGeomRelation as shop where ANYINTERACT@spatial(shop.geom, loc.curLoc, 5.0d) = true ) </view> <view id="op_in_proj"> RStream( select loc.customerId, shop.shopId, ANYINTERACT@spatial(shop.geom, loc.curLoc, 5.0d) from LocGeomStream[NOW] as loc, ShopGeomRelation as shop ) </view>
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、入力oracle.spatial.geometry.JGeometry
ポリゴンのバッファされたバージョンである、新規のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクトを返します。
このメソッドは次の引数を使用します。
polygon
: oracle.spatial.geometry.JGeometry
ポリゴン。
distance
: このバッファに使用された、double
としての距離値。
この値は、予定ジオメトリの予測単位と同じ単位であると見なされます。ジオメトリが測地の場合、このバッファの幅はメーターになります。
このメソッドは、Oracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatial
リンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
com.oracle.cep.cartridge.spatial.Geometry.bufferPolygon@spatial(geom, 1300)
詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。
例
例16-14は、bufferPolygon
メソッドの使用方法を示しています。bufferPolygon
呼出しはOracle Spatialのアプリケーション・コンテキストに依存するため、spatial
リンク名を使用します。
構文
注意: これは、Oracle Spatialジオメトリ関係演算子であり、 CONTAIN@spatial |
目的
この演算子は、GTYPE_POINT
がジオメトリに含まれる場合にtrue
を返し、それ以外の場合はfalse
を返します。
この演算子は次の引数を使用します。
geom
: サポートされるすべてのジオメトリ・タイプ。
key
: GTYPE_POINT
ジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINT
である必要があり、それ以外の場合はRUNTIME_EXCEPTION
が発生します。
tol
: double
値としての許容範囲。
詳細は、『Oracle Spatial開発者ガイド』のSDO_CONTAINSに関する項を参照してください。
例
例16-27は、Oracle CQL問合せでCONTAIN
Oracle Spatialジオメトリ関係演算子を使用する方法を示します。
例16-15 ジオメトリ関係演算子CONTAINを使用したOracle CQL問合せ
<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>
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、所与の引数から1つの要素情報値をint[]
として返します。
このメソッドは次の引数を使用します。
soffset
: この要素の第1の縦座標が格納されている縦座標配列内の、int
としてのオフセット。
SDO_STARTING_OFFSET
値は0からではなく1から開始します。このため最初の要素の第1の縦座標はSDO_GEOMETRY.Ordinates(1)
になります。2つ目の要素がある場合、その要素の第1の縦座標はSDO_GEOMETRY.Ordinates(
n
* 3 + 2)
になり、n
はSDO_ORDINATE_ARRAY
定義内の位置を示します。
etype
: int
としての要素のタイプ。
Oracle SpatialではSDO_ETYPE
値の1、1003および2003をサポートしており、これらは(複合型ではなく)単純な要素と見なされます。これらは、要素情報配列の3つのエントリ1組によって定義されます。タイプは次のとおりです。
1: 点。
1003: ポリゴンの外部の輪(反時計回りで指定される必要があります)。
2003: ポリゴンの内部の輪(時計回りで指定される必要があります)。
これらのタイプは、SDO_INTERPRETATION
によって詳細に修飾されます。
注意: 1桁と4桁の |
interp
: int
としての解釈。
SDO_ETYPEが単純な要素(1、1003または2003)である場合、SDO_INTERPRETATION
属性によって、この要素の座標の順序の解釈方法が決定されます。たとえば、ポリゴン境界は、連結された一連の直線セグメントで構成されます。
ジオメトリが複数の要素で構成される場合、ある要素の最後の縦座標は、常に次の要素の先頭のオフセットより1小さくなります。ジオメトリの最後の要素は、その開始オフセットから縦座標可変長配列の最後までの縦座標によって記述されます。
表16-5は、SDO_ETYPE
とSDO_INTERPREATION
間の関係を示しています。
表16-5 SDO_ETYPEとSDO_INTERPRETATION
SDO_ETYPE | SDO_INTERPRETATION | 説明 |
---|---|---|
0 |
任意の数値 |
Oracle Spatialによってサポートされないジオメトリ・タイプのモデル化に使用します。 |
1 |
1 |
点のタイプです。 |
1 |
0 |
方向付きの点の方向です。 |
1003または2003 |
1 |
頂点が直線セグメントに連結している単純なポリゴンです。各頂点について点を指定し、ポリゴンを閉じるために、終了点と開始点が一致するように指定する必要があります(許容差内で)。 たとえば、4面のポリゴンの場合は、5番目の点が1番目の点と同じになるような5つの点を指定します。 |
例
例16-16は、createElemInfo
メソッドの使用方法を示しています。
例16-16 Geometry.createElemInfoを使用した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>
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、新規の2D oracle.cep.cartridge.spatial.Geometry
オブジェクトを返します。
このメソッドは次の引数を使用します。
gtype
: int
としてのジオメトリ・タイプ。
詳細は、表16-2を参照してください。
eleminfo
: int[]
としてのジオメトリ要素情報。
詳細は、「createElemInfo」を参照してください。
ordinates
: double[]
としてのジオメトリ縦座標。
srid
: int
としてのジオメトリのオプションのSDO_SRID
。
srid
パラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatial
リンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(gtype, eleminfo, ordinates)
詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。
例
例16-17は、createGeometry
メソッドの使用方法を示しています。このcreateGeometry
呼出しにはsrid
引数が含まれていないため、spatial
リンク名を使用してメソッド呼出しとOracle Spatialのアプリケーション・コンテキストが関連付けられます。
例16-17 Geometry.createGeometryを使用した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>
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、穴のない単純な2Dの線形ポリゴンである、新規のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクトを返します。座標配列が自身では閉じない場合(最初と最後の座標が同じでない場合)、このメソッドは最初の座標をコピーし、この座標値を入力座標配列の最後に追加します。
穴のない単純な線形ポリゴンを作成するには、次の引数を使用します。
coords
: double[]
としての線形ポリゴンの座標。
srid
: int
としてのジオメトリのオプションのSRID
。
srid
パラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatial
リンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
com.oracle.cep.cartridge.spatial.Geometry.createLinearPolygon@spatial(coords)
詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。
例
例16-18は、createLinearPolygon
メソッドの使用方法を示しています。このcreateLinearPolygon
メソッド呼出しにはsrid
引数が含まれていないため、spatial
リンク名を使用してメソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、3Dの点である新規のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクトを返します。
このメソッドは次の引数を使用します。
x
: double
としての左下のx座標。
y
: double
としての左下のy座標。
srid
: int
としてのジオメトリのオプションのSRID
。
srid
パラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatial
リンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(x, y)
詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。
例
例16-19は、createPoint
メソッドの使用方法を示しています。このcreatePoint
呼出しにはsrid
引数が含まれているため、spatial
リンク名を使用する必要はありません。
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、2Dの矩形である新規のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクトを返します。
このメソッドは次の引数を使用します。
x1
: double
としての左下のx座標。
y1
: double
としての左下のy座標。
x2
: double
としての右上のx座標。
y2
: double
としての右上のy座標。
srid
: int
としてのジオメトリのオプションのSRID
。
srid
パラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatial
リンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
com.oracle.cep.cartridge.spatial.Geometry.createRectangle@spatial(x1, y1, x2, y2)
詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。
例
例16-20は、createRectangle
メソッドの使用方法を示しています。このcreateRectangle
メソッド呼出しにはsrid
引数が含まれていないため、spatial
リンク名を使用してメソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、2つのジオメトリ間の距離をdouble
として計算します。
特定のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクトと他との間の距離を計算するには、次の引数を指定して、現在のGeometry
オブジェクトの静的でないdistance
メソッドを使用します。
g
: 他のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクト。
2つのcom.oracle.cep.cartridge.spatial.Geometry
オブジェクト間の距離を計算するには、次の引数を指定して静的なdistance
メソッドを使用します。
g1
: 1つ目のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクト。
g2
: 2つ目のcom.oracle.cep.cartridge.spatial.Geometry
オブジェクト。
どちらの場合も、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatial
リンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。
com.oracle.cep.cartridge.spatial.Geometry.distance@spatial(geom) com.oracle.cep.cartridge.spatial.Geometry.distance@spatial(geom1, geom2)
詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。
例
例16-21は、distance
メソッドの使用方法を示しています。distance
メソッドはOracle Spatialのアプリケーション・コンテキストに依存するため、spatial
リンク名を使用する必要があります。
例16-21 Geometry.distanceを使用したOracle CQL問合せ
<view id="LocGeomStream" schema="customerId curLoc"> select customerId, com.oracle.cep.cartridge.spatial.Geometry.createRectangle(x1, y1, x2, y2, 8307) from CustomerLocStream where com.oracle.cep.cartridge.spatial.Geometry.distance@spatial(geom1, geom2) < 5 </view>
構文
注意: これはOracle CQL関数で、 einfogenerator@spatial
|
目的
この関数は、所与の引数から1つの要素情報値をint[]
として返します。
この関数は次の引数を使用します。
offset
: この要素の第1の縦座標が格納されている縦座標配列内の、int
としてのオフセット。
SDO_STARTING_OFFSET
値は0からではなく1から開始します。このため最初の要素の第1の縦座標はSDO_GEOMETRY.Ordinates(1)
になります。2つ目の要素がある場合、その要素の第1の縦座標はSDO_GEOMETRY.Ordinates(
n
* 3 + 2)
になり、n
はSDO_ORDINATE_ARRAY
定義内の位置を示します。
etype
: int
としての要素のタイプ。
Oracle SpatialではSDO_ETYPE
値の1、1003および2003をサポートしており、これらは(複合型ではなく)単純な要素と見なされます。これらは、要素情報配列の3つのエントリ1組によって定義されます。タイプは次のとおりです。
1: 点。
1003: ポリゴンの外部の輪(反時計回りで指定される必要があります)。
2003: ポリゴンの内部の輪(時計回りで指定される必要があります)。
これらのタイプは、SDO_INTERPRETATION
によって詳細に修飾されます。
注意: 1桁と4桁の |
interp
: int
としての解釈。
SDO_ETYPE
が単純な要素(1、1003または2003)である場合、SDO_INTERPRETATION
属性によって、この要素の座標の順序の解釈方法が決定されます。たとえば、ポリゴン境界は、連結された一連の直線セグメントで構成されます。
ジオメトリが複数の要素で構成される場合、ある要素の最後の縦座標は、常に次の要素の先頭のオフセットより1小さくなります。ジオメトリの最後の要素は、その開始オフセットから縦座標可変長配列の最後までの縦座標によって記述されます。
表16-6は、SDO_ETYPE
とSDO_INTERPREATION
間の関係を示しています。
表16-6 SDO_ETYPEとSDO_INTERPRETATION
SDO_ETYPE | SDO_INTERPRETATION | 説明 |
---|---|---|
0 |
任意の数値 |
Oracle Spatialによってサポートされないジオメトリ・タイプのモデル化に使用します。 |
1 |
1 |
点のタイプです。 |
1 |
0 |
方向付きの点の方向です。 |
1003または2003 |
1 |
頂点が直線セグメントに連結している単純なポリゴンです。各頂点について点を指定し、ポリゴンを閉じるために、終了点と開始点が一致するように指定する必要があります(許容差内で)。 たとえば、4面のポリゴンの場合は、5番目の点が1番目の点と同じになるような5つの点を指定します。 |
例
例16-22は、oeinfogenerator
関数を使用してジオメトリの要素情報を作成する方法を示しています。
例16-22 Oracle Spatialジオメトリ・タイプを使用したOracle CQL問合せ
view id="ShopGeom"> select com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial( com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON, einfogenerator@spatial(1, 1003, 1), ordsgenerator@spatial( lng1, lat1, lng2, lat2, lng3, lat3, lng4, lat4, lng5, lat5, lng6, lat6 ) ) as geom from ShopDesc </view>
構文
注意: これは、Oracle Spatialジオメトリ・フィルタ演算子であり、 FILTER@spatial |
目的
この演算子は、切り離されていないオブジェクトのペアの場合はtrue
を返し、それ以外の場合はfalse
を返します。
この演算子は次の引数を使用します。
key
: GTYPE_POINT
ジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINT
である必要があり、それ以外の場合はRUNTIME_EXCEPTION
が発生します。
tol
: double
値としての許容範囲。
詳細は、『Oracle Spatial開発者ガイド』のSDO_FILTERに関する項を参照してください。
例
例16-27は、Oracle CQL問合せでFILTER
Oracle Spatialジオメトリ・フィルタ演算子を使用する方法を示します。
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、次の値を含む特定のGeometry
の最小境界矩形(MBR)をdouble[][]
として返します。
[0][0]
: minX
[0][1]
: maxX
[1][0]
: minY
[1][1]
: maxY
このメソッドは次の引数を使用します。
geom
: com.oracle.cep.cartridge.spatial.Geometry
オブジェクト。
例
例16-24は、get2dMbr
メソッドの使用方法を示しています。
構文
注意: これは、Oracle Spatialジオメトリ関係演算子であり、 INSIDE@spatial |
目的
この演算子は、GTYPE_POINT
がジオメトリに含まれる場合にtrue
を返し、それ以外の場合はfalse
を返します。
この演算子は次の引数を使用します。
geom
: サポートされるすべてのジオメトリ・タイプ。
key
: GTYPE_POINT
ジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINT
である必要があり、それ以外の場合はRUNTIME_EXCEPTION
が発生します。
tol
: double
値としての許容範囲。
詳細は、『Oracle Spatial開発者ガイド』のSDO_INSIDEに関する項を参照してください。
例
例16-27は、Oracle CQL問合せでINSIDE
Oracle Spatialジオメトリ関係演算子を使用する方法を示します。
例16-25 ジオメトリ関係演算子INSIDEを使用したOracle CQL問合せ
<view id="op_in_where"> RStream( select loc.customerId, shop.shopId from LocGeomStream[NOW] as loc, ShopGeomRelation as shop where INSIDE@spatial(shop.geom, loc.curLoc, 5.0d) = true ) </view> <view id="op_in_proj"> RStream( select loc.customerId, shop.shopId, INSIDE@spatial(shop.geom, loc.curLoc, 5.0d) from LocGeomStream[NOW] as loc, ShopGeomRelation as shop ) </view>
構文
注意: これは、Oracle Spatialジオメトリ・フィルタ演算子であり、 NN@spatial |
目的
この演算子は、key
に最も近いgeom
からオブジェクト(最も近くにあるネイバー)を返します。2つのジオメトリ・オブジェクトの近さを決定する際、各オブジェクトの表面上の2点間の最短距離が使用されます。
この関数は次の引数を使用します。
geom
: サポートされるすべてのジオメトリ・タイプ。
key
: GTYPE_POINT
ジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINT
である必要があり、それ以外の場合はRUNTIME_EXCEPTION
が発生します。
tol
: double
値としての許容範囲。
詳細は、『Oracle Spatial開発者ガイド』のSDO_NNに関する項を参照してください。
例
例16-27は、Oracle CQL問合せでNN
Oracle Spatialジオメトリ・フィルタ演算子を使用する方法を示します。
構文
注意: これはOracle CQL関数で、 ordsgenerator@spatial |
目的
この関数は、Oracle Spatialが要求する2D座標のdouble
配列を返します。
この関数は次の引数を使用します。
x1, y1, ... xN, yN
: double
座標値のカンマ区切りリスト。
例
例16-27は、ordsgenerator
関数を使用して、6つのdouble
座標値からOracle Spatialダブル配列を作成する方法を示しています。
例16-27 Oracle Spatialジオメトリ・タイプを使用した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>
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、oracle.spatial.geometry.JGeometry
タイプを3Dのcom.oracle.cep.cartridge.spatial.Geometry
タイプに変換します。指定されたジオメトリがすでにGeometry
タイプおよび3Dジオメトリである場合、変換は行われません。指定されたジオメトリが2Dのジオメトリの場合、z座標を埋め込むことでジオメトリは3Dに変換されます。
このメソッドは次の引数を使用します。
geom
: 変換するoracle.spatial.geometry.JGeometry
オブジェクト。
例
例16-28は、to_Geometry
メソッドの使用方法を示しています。
構文
目的
このcom.oracle.cep.cartridge.spatial.Geometry
メソッドは、com.oracle.cep.cartridge.spatial.Geometry
オブジェクトを2Dタイプのoracle.spatial.geometry.JGeometry
に変換します。
このメソッドは次の引数を使用します。
g
: 変換するcom.oracle.cep.cartridge.spatial.Geometry
オブジェクト。
例
例16-29は、to_JGeometry
メソッドの使用方法を示しています。
構文
注意: これは、Oracle Spatialジオメトリ関係演算子であり、 WITHINDISTANCE@spatial |
目的
この演算子は、GTYPE_POINT
がジオメトリの特定の距離内にある場合にtrue
を返し、それ以外の場合はfalse
を返します。
この演算子は次の引数を使用します。
geom
: サポートされるすべてのジオメトリ・タイプ。
key
: GTYPE_POINT
ジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINT
である必要があり、それ以外の場合はRUNTIME_EXCEPTION
が発生します。
dist
: double
値としての距離。
詳細は、『Oracle Spatial開発者ガイド』のSDO_WITHIN_DISTANCEに関する項を参照してください。
例
例16-27は、Oracle CQL問合せでWITHINDISTANCE
Oracle Spatialジオメトリ関係演算子を使用する方法を示します。
例16-30 ジオメトリ関係演算子WITHINDISTANCEを使用したOracle CQL問合せ
<view id="op_in_where"> RStream( select loc.customerId, shop.shopId from LocGeomStream[NOW] as loc, ShopGeomRelation as shop where WITHINDISTANCE@spatial(shop.geom, loc.curLoc, 5.0d) = true ) </view> <view id="op_in_proj"> RStream( select loc.customerId, shop.shopId, WITHINDISTANCE@spatial(shop.geom, loc.curLoc, 5.0d) from LocGeomStream[NOW] as loc, ShopGeomRelation as shop ) </view>