Maps > 定義済みリーダー > Oracle Spatial 機能 > リレーショナル・モデル・クラス
 
リレーショナル・モデル・クラス
このセクションでは、以下のトピックを取り上げます。
*Oracle Spatial データベースからデータを読み込むためのクラス
*Oracle Spatial データベースにデータを書き込むためのクラス
Oracle Spatial データベースからデータを読み込むためのクラス
Oracle SDO リレーショナル・モデルのリーダー・クラスは次のとおりです。
*Oracle Spatial レイヤー・データを IlvSDOFeatureIterator オブジェクトに変換するための IlvMapFeature オブジェクト。
*リレーショナル Oracle Spatial データにロード・オン・デマンドを実装するための IlvSDOLayer
*IlvSDOLayer に Oracle 問い合わせを定義するための IlvSDOTileLoader 抽象クラス。サブクラスの IlvDefaultSDOTileLoader (最適化されている) は、IlvSDOLayer によって使用されます。
IlvSDOFeatureIterator
このクラスは、リレーショナル Oracle Spatial レイヤーへの SQL 問い合わせの結果からデータを読み込み、それらのデータを IlvMapFeature オブジェクトに変換します。Rogue Wave Views Maps アプリケーションは、このクラスを使って Oracle Spatial データを透過的に処理できます。以下の C++ コードの例では、ROADS_SDOGEOM という Oracle Spatial レイヤーからデータを読み込むための問い合わせを、(Rogue Wave DB Link を使用して) 実行します。
IlString query = IlString("SELECT * FROM ROADS_SDOGEOM ORDER BY 1, 2, 4");
//keep always the ORDER BY statement
IldDbms* myDbms = IldNewDbms("oracle8", "scott/tiger@myDomain");
IldRequest* resultSet = myDbms->getFreeRequest();
resultSet->execute(query.getValue());
 
問い合わせの結果は、次の 3 つの基準を使って次に示す順序通りに並べられます。
1. GID (Geometric ID)
2. ESEQ (要素シーケンス)
3. SEQ (行シーケンス)
メモ: この順序は、IlvSDOFeatureIterator を正常に動作させるために必要です。
Oracle Spatial レイヤーへの問い合わせの ResultSet を使って、IlvSDOFeatureIterator を初期化できますが、SDO のすべての列が resultSet (GID、ESEQ、ETYPE、SEQ およびそれらの座標を定義する列) にある必要があります。
このイテレーターが返す機能にアトリビュートはありません。ただし、Oracle Spatial ジオメトリーの GID を各機能の識別子として使うと、この識別子を使ってデータベースのその他のアトリビュートを取得できます。getId() メソッドを参照してください。
IlvSDOLayer
このクラスは、リレーショナル Oracle Spatial データ・ソースにロード・オン・デマンドを実装します。デフォルトの実装は、空間インデックスが実行された Oracle Spatial レイヤーを使って、Oracle Spatial タイリングと同等のタイリングで内容を読み込みます。
以下の例では、ROADS_SDOGEOM という Oracle Spatial レイヤーで IlvSDOLayer を作成します。
IldDbms* myDbms = IldNewDbms("oracle8", "scott/tiger@myDomain");
IlvMapAdapter* adapter = new IlvMapAdapter(0.5);
// Create an adapter that fits your data.
IlvSDOLayer* layer = new IlvSDOLayer(adapter, myDbms, "ROADS_SDOGEOM");
manager->addLayer(layer);
 
IlvSDOTileLoader
このクラスは、Oracle Spatial データベースからデータを取得する際に追加機能を提供します。これらの機能には、IlvSDOLayer のデフォルトの振る舞いを補完する役割があります。たとえば、Oracle のタイリングとは異なるタイリング定義を行う場合があります。
IlvDefaultSDOTileLoader
このクラスは、IlvSDOTileLoader のサブクラスで、IlvSDOLayer で使用します。このクラスは部分的に最適化されています。たとえば、メソッド setTileGroupingCount() を使って、データベースへの単一問い合わせにグループ化されるタイル数を設定できます。実際に、各タイルは空間問い合わせに対応します。ロード・オン・デマンドを実行するたびに平均 n のタイルがある場合は、すべての n の問い合わせが、データベースに送られる単一問い合わせにグループ化される setTileGroupingCount(n) を使用する必要があります。
メモ: IlvSDOLayer レイヤーのロード・オン・デマンドで取得した各 IlvMapFeature で特別な操作を処理する場合、IlvDefaultSDOTileLoader をサブクラス化して getFeatureIterator メソッドをオーバーライドする必要があります。このメソッドでは、getNextFeature メソッドをオーバーライドした IlvSDOFeatureIterator のサブクラスのインスタンスを返す必要があります
(この中で、レイヤーから返された各 IlvMapFeature で特別な処理を実行できます)。最後に、IlvDefaultSDOTileLoader のサブクラスをレイヤーのタイル・ローダーとして設定する必要があります。
Oracle Spatial データベースにデータを書き込むためのクラス
このセクションでは、リレーショナル Oracle Spatial データベースに地図機能を書き込む IlvSDOWriter クラスについて説明します。
IlvSDOWriter
IlvSDOWriter クラスは、Oracle Spatial (ベクトル・ジオメトリー) のリレーショナル・モデルでサポートされているジオメトリーが、機能に含まれる IlvMapFeatureIterator を記述し、それらを次の例のようにデータベースに書き込むことができます。
IldDbms* myDbms = IldNewDbms("oracle81", "scott/tiger@myDomain");
IlvSDOWriter* writer = new IlvSDOWriter(myDbms, "MyLayer", 135);
// Create a source feature iterator.
IlvShapeFileReader* reader = new IlvShapeFileReader("foo.shp", 0);
IlvInt geomCount;
// Dump its content to the Oracle layer.
writer->writeFeatureIterator(reader, geomCount);
IlvSDOWriterwrite メソッドは、機能のアトリビュートを書き込みません。機能のアトリビュートを書き込む場合は、親クラスの writeFeature(feature) メソッドを呼び出した後、IlvSDOWriterwriteFeature メソッドをサブタイプ化できます。
メモ: Oracle Spatial ライターでサポートしているジオメトリーは、次のとおりです。IlvMapPointIlvMapLineStringIlvMapPolygonIlvMapMultiPoint、および IlvMapMultiCurve (複数行文字列用)、 IlvMapMultiArea (複数多角形
用)。

Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.