2.3 テーマ

テーマは、マップ・ビジュアライゼーション・コンポーネントにおける最も重要な概念といえます。テーマは、特定のデータ層のビジュアル表現です。

概念的には、テーマとは類似する属性を共有する地理的地物の集合です。また、地物のレンダリングやラベル付けに使用するスタイルをマップ・ビジュアライゼーション・コンポーネントに指定するためのレンダリング・ルールおよびラベル付けルールも共有されます。より正確に言えば、テーマを定義するときは、実際にはデータを取得する場所とその方法、データをレンダリングおよびラベル付けする方法の情報をマップ・ビジュアライゼーション・コンポーネントに提供します。

テーマはどのように作成されるかによって、事前定義済テーマまたは動的(JDBC)テーマに分類できます。事前定義済テーマの場合、テーマの定義はスタンドアロンのMap Builderツールで作成され、データベースに格納されます。動的テーマの場合、テーマの定義(XML)はアプリケーションによってリアルタイムに作成されます。通常、動的テーマではアプリケーションによって作成されたカスタムのSQL問合せを使用してデータが取得されます。

一般に、テーマのデータは空間的に有効な表、つまりSDO_GEOMETRY型の列を持つデータベース表またはビューから取得されます。たとえば、US_STATESというテーマは、GEOMETRYという列およびその他の非空間属性の列を持つSTATES表に基づきます。このタイプのテーマは、ジオメトリ・テーマと呼ばれることがあります。ジオメトリ・データだけでなく、データベースで管理されるその他のタイプの地理的データを、対応するテーマのタイプに関連付けることができます。たとえば、次のような関連付けが可能です。

  • BLOBに格納された地理参照画像(画像テーマ)

  • Oracle Spatial GeoRasterデータ(GeoRasterテーマ)

  • Oracle Spatialネットワーク・データ・モデル(ネットワーク・テーマ)

  • Oracle Spatialトポロジ・データ・モデル(トポロジ・テーマ)

  • 地図の注釈テキスト(注釈テーマ)

マップ・ビジュアライゼーション・コンポーネント・テーマは、データベースに格納されている地理的データのレンダリングはもちろん、Webサービス(WFS、WMSおよびWMTS)または(カスタム空間データ・プロバイダ・インタフェース経由で)ローカル・ファイル・システムなど他のソースから取得したデータのレンダリングにも使用できます。

テーマに関連付けられているデータのタイプにかかわらず(ただし外部でレンダリングされたマップ層を表すWMSおよびWMTSテーマを除く)、各テーマに対してマップ・ビジュアライゼーション・コンポーネントのスタイリング・ルールを定義する必要があります。また、スタイリング・ルールによって参照されるスタイルは、マッピング・メタデータの一部としてデータベースに存在し、格納されることが必要です。

2.3.1 事前定義済テーマ

事前定義済テーマは、定義がすでにユーザーのデータベース・スキーマに格納されているテーマです。データベース・ユーザーのすべての事前定義済テーマは、そのユーザーのUSER_SDO_THEMESビュー(マップ・ビジュアライゼーション・コンポーネント・メタデータ・ビュー、特にxxx_SDO_THEMESビューを参照)に格納されています。マップ・リクエストに事前定義済テーマを含める場合、指定が必要なのはテーマ名のみです。マップ・ビジュアライゼーション・コンポーネントでは、そのテーマの定義を自動的に検索し、それに基づいて問合せを作成し、関連する空間データおよび属性データを取得して、そのテーマのスタイリング・ルールに従ってデータをレンダリングします。

事前定義済テーマはそれぞれ、実表またはビューと関連付ける必要があります。テーマをビューに基づいたものにする場合は、ビュー所有者のUSER_SDO_GEOM_METADATAビュー(『Oracle Spatial開発者ガイド』を参照)に、ビューとその空間列を指定する行を挿入する必要があります。ビューが結合ビューの場合(つまり、複数の表に基づいている場合)、テーマのスタイリング・ルールでkey_column属性(「テーマ: スタイリング・ルール」を参照)を指定する必要があります。これは、マップ・ビジュアライゼーション・コンポーネントが、デフォルトで実表の行IDに基づき事前定義済テーマのジオメトリをキャッシュするためです。しかし、結合ビューの場合にはROWID擬似列がないため、キー列を指定する必要があります。

ほとんどのタイプの事前定義済テーマ(ただしWMSテーマを除く)は、Map Builderツールを使用して作成し、プレビューを表示できます。Map Builderツールの詳細は、「Oracle Map Builderツール」を参照してください。

2.3.1.1 事前定義済空間ジオメトリ・テーマのスタイリング・ルール

事前定義済テーマは必ず、1つ以上のスタイリング・ルール、すなわちテーマの表示方法を制御するXML形式の仕様に関連付けられています。この項では、事前定義済空間ジオメトリ・テーマ(例2-6に示すAirportテーマなど)のスタイリング・ルールについて説明します。画像、GeoRaster、ネットワークおよびトポロジなど、その他のタイプのテーマには、それぞれに固有のスタイリング・ルールがあり、これらについては、各テーマの項で説明します。ただし、すべてのタイプのテーマのスタイリング・ルールは、XML文書の<styling_rules>要素の下にまとめられており、この要素はUSER_SDO_THEMESビューで各事前定義済テーマのSTYLING_RULES列に格納されています。(<styling_rules> DTDについては、「テーマ: スタイリング・ルール」を参照してください。)

ノート:

この章で示す例のスタイル名の接頭辞には、次のネーミング規則を使用しています。v.は変数(拡張スタイル)、m.はマーカー、c.は色、l.は線、t.はテキストを示します。(スタイルが現行ユーザーのスキーマにない場合は、所有者のスキーマ名の後にコロンを付けて指定する必要があります。たとえば、mdsys:c.redのように指定します。)

XML文書の内容(文字データ)で、<および>を表すには、それぞれ&lt;および&gt;を使用してください。使用しない場合、WHERE CATEGORY > 'B'などにおける<または>が、XMLパーサーによりXMLタグの一部として解釈されます。

例2-6 Airportテーマに対するスタイリング・ルールのXML定義

<?xml version="1.0" standalone="yes"?>
<styling_rules>
  <rule>
    <features style="c.black gray">
    runway_number &gt; 1
    </features>
    <label column="name" style="t.airport name">
      1
    </label>
  </rule>
  <rule>
    <features style="m.airplane">
    runway_number = 1
    </features>
  </rule>
</styling_rules>

各スタイリング・ルールには、必須の<features>要素およびオプションの<label>要素があります。<features>要素では、ユーザー定義の条件や選択された地物に使用されるスタイルに基づいて選択される表またはビューの行(地物)が指定されます。有効なSQL条件をこの要素の値として指定できます。<label>要素では、選択された地物に注釈を付けるかどうか、さらに、注釈を付ける場合はテキスト・ラベルに使用する表またはビュー内の列が指定されます。

例2-6では、Airportテーマに関連付けられた2つのスタイリング・ルールを示します。

  • 1つ目のルールでは、条件runway_number &gt; 1(つまり、1より大きい滑走路番号)を満たす行のみが選択されるように指定しており、これらの行はc.black grayというスタイルを使用してレンダリングされます。値が指定されていない場合、WHERE句の条件は適用されません。たとえば、次のように定義されているとします(つまり、runway_number &gt; 1の条件が省略されています)。

    <?xml version="1.0" standalone="yes"?>
    <styling_rules>
      <rule>
        <features style="c.black gray"/>
        <label column="name" style="t.airport name">
          1
        </label>
      </rule>
    </styling_rules>
    

    この場合、すべての空港地物が選択され、c.black grayという色スタイルを使用してレンダリングされます。

    さらに、1つ目のルールに含まれる<label>要素では、表またはビュー内のNAME列を使用して各空港に注釈を付け、t.airport nameというテキスト・スタイルを使用するように指定しています。<label>要素の値には、数値を評価する任意のSQL式を使用できます。この値を使用して、地物に注釈を付けるかどうかが決定されます。数値が0(ゼロ)より大きい場合、地物に注釈が付けられます。この場合、値が定数1であるため、<features>要素で指定されたすべての地物に、NAME列の値を使用して注釈が付けられます。ある地物について値が0(ゼロ)以下である場合、この地物には注釈が付けられません。

  • 2つ目のルールは、滑走路が1つのみである空港に適用されます。このルールには<label>要素がないため、このような空港にはすべて注釈が付けられません。さらに、2つ目のルールを満たす地物は、<features>要素で指定されるように、異なるスタイル(m.airplane)を使用してレンダリングされます。

各スタイリング・ルールは、テーマの実表またはビューに対するフィルタとして考えることができます。これは、スタイリング・ルールによって行のサブセットのみが選択され、そのルールのレンダリング・スタイルおよびラベリング・スタイルが適用されるためです。実際、マップ・ビジュアライゼーション・コンポーネントは各スタイリング・ルールに対する完全なSQL問合せを作成します。この問合せ文字列が固定形式の後に続きます(スタイリング・ルールに対するマップ・ビジュアライゼーション・コンポーネントでのSQL問合せの作成方法を参照)。

2.3.1.2 スタイリング・ルールに対するマップ・ビジュアライゼーション・コンポーネントでのSQL問合せの作成方法

スタイリング・ルールに対してマップ・ビジュアライゼーション・コンポーネントがSQL問合せを作成する方法を確認するために、Airportテーマの例(事前定義済空間ジオメトリ・テーマのスタイリング・ルール例2-6)の1つ目のスタイリング・ルールについて考えてみます。

<styling_rules>
  <rule>
    <features style="c.black gray">
    runway_number &gt; 1
    </features>
    <label column="name" style="t.airport name">
      1
    </label>
  </rule>
  . . .
</styling_rules>

マップ・ビジュアライゼーション・コンポーネントは、このテーマを処理するときに、このスタイリング・ルールに対して次のような問合せ文字列を作成します。

SELECT ROWID, GEOMETRY, 'C.BLACK GRAY', NAME, 'T.AIRPORT NAME', 1, 'rule#0' 
  FROM AIRPORT_POINT 
  WHERE MDSYS.SDO_FILTER(GEOMETRY, 
    MDSYS.SDO_GEOMETRY(2003, 8265, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),
    MDSYS.SDO_ORDINATE_ARRAY(:mvqboxxl, :mvqboxyl, :mvqboxxh, :mvqboxyh)), 
    'querytype=WINDOW') = 'TRUE'

この問合せ文字列の詳細は次のとおりです。

  • テーマの実表の名前であるAIRPORT_POINTがFROM句に指定されています。

  • SELECT構文のリストには、1つ目の列としてROWIDが含まれています。ROWIDは、事前定義済テーマのデフォルトのkey_column属性です。

  • SELECT構文のリストの次の列はGEOMETRYです。これは、このテーマのジオメトリ列です。

  • SELECT構文のリストの次の列は、リテラル文字列'C.BLACK GRAY'です。これは、このルールのレンダリング・スタイル名です。

  • SELECT構文のリストの次の列はNAMEであり、この列はラベル・テキストを提供します。これは、このスタイリング・ルールの<label>要素で指定されます。

  • SELECT構文のリストの次の列は、リテラル文字列'T.AIRPORT NAME'です。これは、<label>要素で指定されるラベリング・スタイル名です。

  • SELECT構文のリストの次の列は、リテラル値1です。これは、<label>要素自体の値です。

  • SELECT構文のリストの次の列は、リテラル文字列'rule#0'です。これは、マップ・ビジュアライゼーション・コンポーネントによってのみ内部的に使用されます。

  • 長いWHERE句の実態は、Oracle Spatialのフィルタ演算子SDO_FILTERです。このWHERE句はマップ・ビジュアライゼーション・コンポーネントによって自動的に追加されます(テーマを定義するときにユーザーが指定する必要はありません)。これによって、現在のマップ表示ウィンドウに関連する地理的地物のみが実表からフェッチされます。4つのバインディング変数(mvqboxxlmvqboxylmvqboxxhおよびmvqboxyh)には、現在のマップ表示ウィンドウの座標が自動的に代入されます。

マップ・ビジュアライゼーション・コンポーネントは、事前定義済ジオメトリ・テーマのスタイリング・ルールに対するSQL問合せを作成するときは常に、前述の形式を使用します。トポロジ・テーマやGeoRasterテーマなどその他のタイプのテーマに対する問合せについては、別の形式が使用されます。このような他の問合せに使用される形式についてはここでは説明しませんが、興味がある場合は、マップ・ビジュアライゼーション・コンポーネント・インスタンスのロギング・レベルをFINESTに設定し、特定のタイプのテーマを含むマップ・リクエストを発行してからマップ・ビジュアライゼーション・コンポーネントのログ・ファイルを調べれば、マップ・ビジュアライゼーション・コンポーネントによって作成された正確な問合せを確認できます。

この処理により、問合せの結果セットの各行(各地物)に、マップ・ビジュアライゼーション・コンポーネントで必要となるすべての情報(空間データ、レンダリング・スタイル名とラベリング・スタイル名、ラベル・テキストおよびラベル付け条件)が格納されます。マップ・ビジュアライゼーション・コンポーネントは次に各行のメモリー内地物オブジェクトを作成し、レンダリング・パイプラインに送信してマップに表示されるようにします。

1つのテーマに2つ以上のスタイリング・ルールが指定されている場合、ルールのSQL問合せ(1つ目から最後まで)に対しUNION ALL操作が実行され、表またはビューから必要条件を備えた地物がフェッチされます。

ルールに拡張スタイルが指定されている場合は、ルールに対する問合せのSELECT構文のリストにその拡張スタイルで必要となる追加属性の列が加えられます。

2.3.1.3 バインディング・パラメータを含むスタイリング・ルール

スタイリング・ルールに対するマップ・ビジュアライゼーション・コンポーネントでのSQL問合せの作成方法で説明したように、スタイリング・ルールの<features>要素では実表またはビューから地物を選択するための問合せ条件を定義できます。通常、この問合せ条件には、Airportテーマにおけるrunway_num > 1のようなハードコード化されたSQL式が含まれます。ただし、そのかわりに問合せ条件にバインディング変数を含めることもできます。このようなテーマは、基本的に特定の地物の表示方法を示すテンプレートを定義するものであり、問合せ条件にバインディング値を提供することによって地物の正確なセットが実行時に決定されることから、一般にテンプレート付きテーマと呼ばれます。

テンプレート付きテーマの概念により、単一のテーマを定義してマップ・リクエスト間でバインディング値を変更することが可能になります。たとえば、次のスタイリング・ルールについて考えてみます。

<?xml version="1.0" standalone="yes"?>
<styling_rules>
  <rule>
    <features style="C.RED"> (state_abrv=:1) </features>
    <label column="STATE" style="T.STATE NAME"> 1 </label>
  </rule>
</styling_rules>

このスタイリング・ルールでは、state_abrv属性の値に基づく問合せ条件を持つ<features>要素を定義しています。この属性値はアプリケーションにより提供されます。マップ・ビジュアライゼーション・コンポーネント・リクエストには、テーマ・セクションにバインディング・パラメータが定義されている必要があります。各バインディング・パラメータは1つの値およびSQL型で定義されます。次に示すマップ・リクエストのテーマの定義では、州の略記の値はME、可変SQL型はStringです。値MEは、事前定義済テーマのスタイリング・ルールで使用されます。

<theme name="THEME_US_DYN_STATES" >
   <binding_parameters>
      <parameter value="ME" type="String"/>
   </binding_parameters>
</theme>

2.3.1.4 1つのスタイリング・ルールへの複数のレンダリング・スタイルの適用

スタイリング・ルールの<feature>要素では、style属性を使用してレンダリング・スタイルを1つのみ指定できます。複数のテーマを使用せずに1つの地物に複数のレンダリング・スタイルを適用しようとすると、スタイリング・ルールごとに選択される地物のサブセットが異なるため、複数のスタイリング・ルールを指定することはできません。複数のテーマを使用することなく1つの地物に複数のレンダリング・スタイルを適用するには、<features>要素のstyle属性のかわりに<rendering>要素を使用する必要があります。

<rendering>要素では、次の例に示す形式を使用します。

<rendering>
 <style name="V.POIVMK" value_columns="FEATURE_CODE">
  <substyle name="V.POIVBKT" value_columns="POINT_ID" changes="FILL_COLOR"/>
 </style>
</rendering>

<rendering>要素では、地物をレンダリングするときに使用するスタイルの名前、および拡張スタイルで使用する1つ以上の値列(カンマ区切り)を<style>要素で指定します。この例では、スタイル名はV.POIMVK、値列はFEATURE_CODEです。

<style>要素の<substyle>要素により、2種類の属性値の組合せを使用した地物のレンダリングが可能になります。たとえば、地物の形状を<style>要素で定義し、地物の色を<substyle>要素で定義できます。これは、2つの属性値に基づくポイント地物を1回でレンダリングするのに便利です。1つ以上の値列を(カンマ区切りで)指定したり、適用する変更内容(現在サポートされているのはFILL_COLORのみ)を指定したりできます。

<rendering>要素で複数の<style>要素を指定することにより、次のことが可能になります。

  • ベース拡張スタイルに複数の属性(列)を関連付け、サブスタイルを使用して他の属性によりレンダリングが影響を受けるような拡張スタイルを作成する。たとえば、1つの値列に基づきサイズが異なるマーカーを表示する一方で、別の値列に基づき補助的な色スタイルを使用してこれらのマーカーの塗りの色を変更するような拡張スタイルが作成可能です。

  • 1つの地物のレンダリングに複数のスタイルを使用する(積上げスタイルの効果が得られます)。

例2-7は、<rendering>要素を使用する事前定義済テーマのスタイリング・ルールを示しています。<features>要素はルールの一部であり、問合せ条件を指定するために定義が必要です。ただし、style属性は指定されていません。<rendering>要素で地物のレンダリング方法が定義されています。

例2-7 <rendering>要素を使用したスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules>
 <rule>
   <features> </features>
   <label column="NAME" style="T.STREET2"> 1 </label>
   <rendering>
      <style name="V.POIVMK" value_columns="FEATURE_CODE">
        <substyle name="V.POIVBKT" value_columns="POINT_ID" changes="FILL_COLOR"/>
      </style>
   </rendering>
 </rule>
</styling_rules>

<rendering>要素は、動的テーマ、ジオメトリ・テーマおよびトポロジ・テーマでも使用できます。

2.3.1.5 スケール範囲が指定された複数のレンダリング・スタイルの使用方法

<rendering>要素には、複数の<style>要素を定義できます(「1つのスタイリング・ルールへの複数のレンダリング・スタイルの適用」を参照)。また、<style>要素ごとにスケール範囲を割り当てることができます。スケール範囲を持つ複数の積上げスタイルを使用すると、異なるスケールの様々な表現を持つ単一のテーマを定義できます。

例2-8は、積上げスタイルを持つテーマのスタイリング・ルールを示しています。各スタイルには、スケール範囲が定義されています。

例2-8 積上げスタイルを持つテーマのスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules>
  <rule>
    <features> </features>
    <label column="STATE" style="T.S02_STATE_ABBREVS"> 1 </label>
    <rendering>
     <style name="C.COUNTIES" max_scale="5.0E7" scale_mode="RATIO"/>
     <style name="C.RB13_1" min_scale="5.0E7" max_scale="1.0E7" scale_mode="RATIO"/>
     <style name="L.DPH" min_scale="1.0E7" scale_mode="RATIO"/>
    </rendering>
  </rule>
</styling_rules>

2.3.1.6 事前定義済テーマのキャッシュ

デフォルトで、マップ・ビジュアライゼーション・コンポーネントは、事前定義済テーマの空間データがマップ・ビジュアライゼーション・コンポーネントのレンダリング・エンジンによってデータベースから処理のためにフェッチされるときに、それを自動的にキャッシュします。逆に、動的(JDBC)テーマのデータはマップ・ビジュアライゼーション・コンポーネントではキャッシュされません。事前定義済テーマのデータをキャッシュしない場合(ベースとなる実表が常に更新されているテーマの場合など)は、そのテーマの<styling_rules>要素のcaching属性をNONEに設定できます。(caching属性を含む<styling_rules>要素については、「テーマ: スタイリング・ルール」を参照してください。)

ベース・データが静的または読取り専用で、使用頻度の高いテーマの場合、最良のパフォーマンスを得るためにcaching ALLを指定します。これにより、マップ・ビジュアライゼーション・コンポーネントでは、テーマ定義に最初にアクセスした際に、すべての地物(関連付けられた空間データ、属性データ、およびスタイリング情報を含む)をフェッチし、それらをマップ・ビジュアライゼーション・コンポーネントのメモリーにキャッシュして、テーマの空間データ用のメモリー内Rツリーを作成します。そのテーマを要求する後続のリクエストはすべて、データベースに送信されずに、ローカルで発生します。

caching属性値がNORMAL(デフォルト)の場合、そのテーマを必要とするマップがリクエストされるたびに、マップ・ビジュアライゼーション・コンポーネントはデータベースに問合せを実行して空間データと関連の属性データを取得します。ただし、行IDまたはユーザー指定のキー列により参照される空間ジオメトリ・データがすでにキャッシュされている場合は、非Pickle化処理(RAWデータベース・ジオメトリ形式からJavaジオメトリ・オブジェクトへの変換)はスキップされます。それでも、メモリーに問題がなく、使用頻度の高いテーマを完全にキャッシュできる場合、最初のロードの後にそのテーマへのデータベース・アクセスを事実上すべて排除するためには、caching ALLを指定する必要があります。

マップ・ビジュアライゼーション・コンポーネントの空間データ・キャッシュはグローバルなため、マップ・ビジュアライゼーション・コンポーネントによってアクセスされるすべての事前定義済テーマは、グローバルな固定サイズのメモリー・キャッシュを取得しようとします。キャッシュは完全にメモリー内にあり、キャッシュの最大サイズは、「空間データ・キャッシュのカスタマイズ」での説明のとおりに指定できます。キャッシュの上限に達すると、直前にアクセスされたデータ用に、キャッシュ・データが古い順にキャッシュから削除されます。ただし、caching ALLで指定したテーマのデータはキャッシュから削除されず、マップ・ビジュアライゼーション・コンポーネントがこれらのテーマをデータベースに再び問い合せることはありません。

事前定義済の注釈およびカスタム・ジオメトリ・テーマのキャッシュは現在のところ無効です。カスタム・ジオメトリ・テーマについては、プロバイダの実装にキャッシング・メカニズムを実装できます。ただし、各リクエストに対してプロバイダの新しいインスタンスが作成されますが、ローカルのキャッシング・メカニズムを実装した場合、そのインスタンスは失われます。

2.3.1.7 地物ラベルと国際化

マップ・ビジュアライゼーション・コンポーネントは、翻訳されたテーマ・ラベルをサポートしています。事前定義済のマップ・ビジュアライゼーション・コンポーネント・テーマでは通常、それぞれのテーマの地物にラベルを付けるためのすべてのテキスト文字列を提供するラベル列を指定できます。これらのテキスト文字列は、特定の言語(英語など)でデータベースの表列に格納される文字列の値です。ただし、リソース・バンドルを使用して、これらの格納された文字列の値の異なる翻訳を提供することも可能です。このような翻訳済のテキスト文字列が使用可能な場合、特定の言語やロケールを使用してテーマの地物にラベルを付けるようマップ・ビジュアライゼーション・コンポーネントに指示できます。

ノート:

リソース・バンドルは現在のところ、事前定義済のジオメトリ・テーマでのみサポートされています。

翻訳の提供、および特定のユーザー言語を使用してテーマにラベルを付けるようマップ・ビジュアライゼーション・コンポーネントに指示するステップは、次のとおりです。

  1. 翻訳を準備します。

    一般的なマップ・ビジュアライゼーション・コンポーネントの事前定義済ジオメトリ・テーマは、基礎となるすべてのデータを表から取得します。(文字列タイプ)列のいずれかを、このテーマのラベリング列として指定できます。これをラベル列といいます。ラベル列を異なる言語に翻訳する必要がある場合、この表からすべての値を抽出して、StringResources.propertiesなどのプロパティ・ファイルに格納します。(ファイル名StringResources.propertiesは、抽出されたテキストがすべて英語であることを前提とする点に注意してください。英語でない場合、プロパティ・ファイル名は規則に従わねばならず、言語コードおよびオプションのリージョン・コードまたは国コードがファイル名の接頭辞になっている必要があります。たとえば、StringResources_fr.propertiesはフランス語の翻訳のみを含み、StringResources_zh_CN.propertiesは簡体字中国語です。)

    プロパティ・ファイルは、非常に簡単な形式のプレーン・テキスト・ファイルです。たとえば、単純なStringResources.propertiesファイルに以下が含まれるとします。

    # This is the English version of the strings.
    California = California
    Nevada = Nevada
    Montana = Montana
    

    最初の行はコメントで、#記号から始まります。後に続く各行には、1組のキー(1番目の文字列)と値(2番目の文字列)が含まれます。キーはラベル列から直接取得されますが、値は対応する翻訳になります。この特定のファイルにはデフォルトの英語のテキスト文字列が含まれるため、値(翻訳)はどの場合でも同じです。キーは常に英語でなければならない点に注意してください。

    このデフォルトのプロパティ・ファイルから、翻訳の担当者がそれぞれの翻訳ごとに1ファイル、プロパティファイルのセットを作成します。前述の単純な例を使用した場合、簡体字中国語の翻訳済ファイル(StringResources_zh_CN.properties)は以下のようになります。各キーの値はそのキーの中国語の翻訳に置き換わり、Unicodeの文字列としてエンコードされます。

    # This is the Chinese version of the strings.
    California =  \u6CA1\u6709\u8981\u5448\u73B0\u7684\u4E3B\u9898\u3002
    Nevada = \u65E0\u6CD5\u52A0\u8F7D\u4E3B\u9898\u3002
    Montana = \u65E0\u6CD5\u52A0\u8F7D\u6837\u5F0F\u3002
    

    デフォルトのプロパティ・ファイルStringResouces.propertiesと、同じファイル名(言語とリージョンの接頭辞を除く)を共有する言語固有のすべてファイル一式が、リソース・バンドルとなります。この場合は、リソース・バンドル名はStringResourcesです。リソース・バンドルには任意の名前を付けられますが、異なるバンドル(異なるキーのセットを含むもの)には常に別のベース名を使用してください。

    Javaのリソース・バンドルおよびプロパティ・ファイルの詳細は、Java言語のドキュメントを参照してください。

  2. 翻訳済テキスト文字列をJavaリソース・バンドルとして提供します。これは、Javaリソース・クラスまたは標準のプロパティ・クラスを基礎とすることができます。

    すべてのテキスト文字列を翻訳した後、マップ・ビジュアライゼーション・コンポーネントがこれらのファイルを実行時に見つけられるように、すべてのファイル(リソース・バンドル)をマップ・ビジュアライゼーション・コンポーネントCLASSPATH内に配置する必要があります。通常はマップ・ビジュアライゼーション・コンポーネントのWEB-INF/classesフォルダを使用できます。ベースのStringResources.propertiesおよび言語固有のファイル(StringResources_fr.propertiesStringResources_zh_CN.propertiesなど)を含むすべてのファイルを、このフォルダにコピーしてください。

    リソース・バンドルのすべてのファイルをWEB-INF/classesの下にあるサブフォルダに入れる場合、リソース・バンドル名(マップ・ビジュアライゼーション・コンポーネントで認識されているもの)の接頭辞に、このサブフォルダ名を付ける必要があります。これは、Javaクラスをパッケージ名に準じたディレクトリ構造に配置するときに似ています。たとえば、すべてのStringResources*.propertiesファイルをWEB-INF/classes/i18n/に入れる場合、後でリソース・バンドルをマップ・ビジュアライゼーション・コンポーネントに登録する際に、リソース・バンドルの実際の名前をi18n.StringResourcesとする必要があります。

  3. リソース・バンドルをマップ・ビジュアライゼーション・コンポーネントに登録することにより、テーマ定義でリソース・バンドル名を指定します。

    マップ・ビジュアライゼーション・コンポーネントが翻訳済クラスを見つけられるようにするには、テーマ定義にリソース・バンドルのフルネームを指定する必要があります。この最も簡単な方法はMap Builderユーティリティを使用して、テーマ・エディタの「拡張パラメータ」ペイン、でリソース・バンドル名を「翻訳クラス」として指定します。図2-7は、「翻訳クラス」にStringResourcesを指定する様子を示します。

    図2-7 テーマへのリソース・バンドルの指定

    図2-7の説明が続きます
    「図2-7 テーマへのリソース・バンドルの指定」の説明

    1つ前のステップで説明したようにリソース・バンドルのファイルがサブフォルダにある場合、リソース・バンドル・ファイルがパッケージ内のJavaクラスであるかのように、リソース・バンドルのベース名をピリオドで区切ったものをサブフォルダ名にする必要があります。

  4. マップまたはテーマをリクエストする際に言語パラメータを指定します。

    Oracle Maps JavaScript API(「Oracle Maps JavaScript API」を参照)またはXMLマップ・リクエストAPI(「マップ・ビジュアライゼーション・サーバー」を参照)の各マップ・リクエストに優先言語を指定します。

    • JavaScriptコードで、MVThemeBasedFOIクラスのコールにラベル言語コードを指定します。次の例では、FOIテーマに簡体字中国語でラベルが表示されます。

      themebasedfoi = new MVThemeBasedFOI('themebasedfoi1','mvdemo.theme_demo_states');
      themebasedfoi.setLabelLanguageCode("zh-cn");
      themebasedfoi.enableLabels(true);
      

      setLabelLanguageCode(lang_code)メソッドを使用して、マップ・ビジュアライゼーション・コンポーネントが指定された言語のテキスト文字列を使用して地物にラベルが付けられるように、言語コードを指定できます。言語コードは2文字(zhなど)である必要があり、これにオプションでハイフン(-)と2文字の国コード(zh-cn)を続けます。言語コードはISO 639標準で定義されており、http://www.loc.gov/standards/iso639-2/php/English_list.phpなどいくつかのWebサイトに記載されています。指定された言語コードに翻訳済テキスト文字列が見つからない場合、英語のテキスト文字列(またはテーマのデフォルト文字列)がラベル付けに使用されます。

    • XMLマップ・リクエストで、lang属性に言語を指定します。次の例では、簡体字中国語でラベルが表示されます。

      <map_request title="Oracle LBS MAP" 
      basemap="demo_map" 
      datasource = "mvdemo" 
      width="640" height="480" 
      lang="zh-CN" 
      format="PNG_STREAM"> 
       
      <center size="5.15"> 
      <geoFeature> <geometricProperty typeName="center"> 
        <Point> <coordinates>-122.2615, 37.5266</coordinates> 
        </Point> </geometricProperty> 
      </geoFeature> 
      </center> 
      </map_request>
      

      ISO 639標準で指定された言語コードおよび国コードのみが、有効なlang値として使用できます。オプションの国コードを使用する場合、それをハイフン(-)で言語コードにつなげる必要があります。国コードと言語コードでは大/小文字が区別されません。

      lang属性がXMLマップ・リクエストの一部として指定されている場合、結果のマップにレンダリングされるすべてのテーマに関連のリソース・バンドルがないかチェックされます。テーマに関連のリソース・バンドルがなかったり、あるいは指定された言語の翻訳済テキスト文字列が見つからない場合、デフォルト値(表列に格納されたもの)が使用されます。

      lang属性がXMLマップ・リクエストの一部として指定されていない場合、マップ・ビジュアライゼーション・コンポーネント自体で有効となっているロケール(含まれているJVM)に関係なく、デフォルトのテキスト文字列の値(表列に格納されているもの)が常に使用されます。

2.3.1.8 線形地物のプライマリおよびセカンダリ・ラベル

マップ・ビジュアライゼーション・コンポーネントは、プライマリおよびセカンダリ・ラベルを含む線形地物のラベル付けをサポートしています。たとえば、ストリート名にプライマリ・ラベルとして英語名、セカンダリ・ラベルとして現地の言語で(またはその逆)ラベルを付けることができます。線形地物にラベルを付ける場合、プライマリおよびセカンダリ・ラベルが、地物に沿って交互にラベル付けされます(適用可能な場合)。

マップ・ビジュアライゼーション・コンポーネント・テーマにラベル列を指定すると、その列は、プライマリとセカンダリの両方のテキスト文字列を"|||" (3つの垂直の線)で区切って表示します。たとえば、テキスト文字列"Garden St|||Rua Jardim"には、プライマリ・テキスト文字列"Garden St" (英語)とセカンダリ・テキスト文字列"Rua Jardim" (ポルトガル語)が含まれています。実際には、ラベル列は2つの既存列の連結となる場合があり、その2つのベース列との一貫性を維持するためにデータベース・トリガーを採用できます。

2.3.2 JDBCテーマ

JDBCテーマは、mapリクエストによって動的に定義されるテーマです。JDBCテーマは、事前定義済テーマのように、データベースに永続的には格納されません。

JDBCテーマの場合、必須の空間データ(ジオメトリ、または画像、GeoRaster、ネットワーク、トポロジなどのその他のタイプのデータ)をすべて取得する有効なSQL問合せを指定する必要があります。テーマ・マッピングや空間データ分析など、属性データが必要な場合は、問合せでもそれを選択する必要があります。つまり、JDBCテーマに対する正しく完全な問合せを指定することが必要です。問合せの他に、そのテーマに使用するレンダリングおよびラベリングのスタイルも指定できます。

空間ジオメトリに基づいたJDBCテーマの場合、マップ・ビジュアライゼーション・コンポーネントでは次のルールに従い、問合せで指定された列を処理します。

  • SDO_GEOMETRY型の列は、空間データ列として扱われます。

  • 名前または別名がJDBCテーマのlabel_column属性で指定されたものと一致する列は、ラベリング列として扱われ、その値はラベルのテキストとして使用されます。

  • その他の列は属性データ列として扱われ、マップ・ビジュアライゼーション・コンポーネントにより使用される場合も、使用されない場合もあります。たとえば、レンダリング・スタイルが拡張スタイルの場合、すべての属性列は問合せのSELECT構文リストに指定された順序で、そのスタイルによって処理されます。したがって、テーマ・マッピングを実行し、拡張スタイルを使用している場合は、ジオメトリ列とオプションのラベリング列の他に、テーマ・マッピングに必要なすべての属性列を指定する必要があります。(ラベリング列が属性列である場合もあり、その場合はSELECTリストでその列を指定する必要はありません。)

例2-9は、JDBCテーマが含まれるマップ・リクエストです。

例2-9 マップ・リクエストのJDBCテーマ

<?xml version="1.0" standalone="yes"?>
<map_request title="My MAP" datasource = "mvdemo">

  <themes>
    <theme name="jdbc_theme_1">
       <jdbc_query
            datasource="mvdemo"
            jdbc_srid="41052"
            spatial_column="geometry"
            render_style="C.RED">
          SELECT geometry from states where name='MA' 
       </jdbc_query>
     </theme>
  </themes>

</map_request> 

例2-9でJDBCテーマについてマップ・ビジュアライゼーション・コンポーネントが実行する完全な問合せは、次のとおりです。

SELECT geometry FROM states WHERE name='MA';

このリクエストでは、マップ・ビジュアライゼーション・コンポーネントは、このJDBCテーマの問合せの実行結果として、選択されたジオメトリのみが含まれるマップを生成します。ただし、より一般的な場合では、マップ・リクエストで複数のJDBCテーマを使用してベース・マップの上に追加の動的データを表示する必要があります。さらに、マップ・リクエストには問合せウィンドウが関連付けられている場合があります。つまり、ユーザーはベース・マップ全体に含まれる領域の一部のみを参照できます。この場合、JDBCテーマのSQL問合せでは、不必要な結果を排除するために空間ウィンドウの問合せが行われます。

2.3.2.1 2つの列に基づくポイントJDBCテーマの定義

データベース表で2つの列(経度と緯度など)を使用してポイントの座標を表す場合、その2つの列に基づきJDBCテーマを定義してポイントをレンダリングできます。表に空間ジオメトリ列を含める必要はありませんが、含めることは可能です。ただし、テーマ・リクエストでポイント列のみでなくジオメトリ列も定義されている場合、マップ・ビジュアライゼーション・コンポーネントでは、ジオメトリ列ではなく2つの列を使用してポイントをレンダリングしようとします。

例2-10に示すJDBCテーマは、POIという表のLONG_LOCおよびLAT_LOCという2つの列からポイントをレンダリングします。x_column属性およびy_column属性には、ポイントの座標値を含む列を指定します。この例では、ポイントがC.REDスタイルを使用してレンダリングされ、表のNAME列の値がT.POI_NAMEスタイルを使用してレンダリングされます。

例2-10 列に基づくJDBCテーマ

<map_request>
  . . .
  <center>
   . . .
  </center>
  <themes>
    <theme name="theme1" >
       <jdbc_query
         datasource="mvdemo"
         jdbc_srid="8265"
         x_column="long_loc"
         y_column="lat_loc"
         render_style="C.RED"
         label_column="name"
         label_style="T.POI_NAME"
         >SELECT long_loc, lat_loc,name FROM poi
       </jdbc_query>
     </theme>
  </themes>
</map_request>

リクエストで有効な問合せウィンドウ(一部のみ)を指定する場合、リクエスト・ウィンドウのサイズに基づくWHERE式が自動的に問合せに追加されます。

例2-11 列に基づくJDBCテーマ(問合せウィンドウ指定)

表にジオメトリ列が含まれている場合、SQLコードを指定して、そのジオメトリ列をフィルタとして使用できます。例2-11は、例2-10と類似していますが、ここでは、SDO_FILTER演算子を使用して、GEOMETRYという列のジオメトリに基づいて問合せウィンドウを指定します。例2-11で、疑問符(?)は、問合せウィンドウの矩形の左下および右上の座標が実行時に提供された値(この例では表示されていない)から取得されることを示しています。

<map_request>
  . . .
  <center>
   . . .
  </center>
  <themes>
    <theme name="theme1" >
       <jdbc_query
         datasource="mvdemo"
         jdbc_srid="8265"
         x_column="long_loc"
         y_column="lat_loc"
         render_style="C.RED"
         label_column="name"
         label_style="T.POI_NAME"
         >SELECT long_loc, lat_loc FROM poi WHERE
           SDO_FILTER(geometry,MDSYS.SDO_GEOMETRY(2003, 8265, NULL, 
           MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),
           MDSYS.SDO_ORDINATE_ARRAY(?,?,?,?)),
           'querytype=WINDOW') = 'TRUE'
       </jdbc_query>
     </theme>
  </themes>
</map_request>

2.3.2.2 複雑なJDBCテーマのデータベースへの格納

場合によっては、JDBCテーマのSQL問合せは非常に複雑であり、問合せを保存する必要があります。この場合、事前定義済テーマを定義してから(この定義は、データベースのUSER_SDO_THEMESビューに格納されます)、そのテーマのスタイリング・ルールに<features>要素の内容としてSQL全問合せを含めることができます。

<features>要素で指定された地物スタイルは、全問合せを使用して取得されたジオメトリのレンダリングに使用されます。すでにSQL全問合せにFROM句が含まれているため、こうしたテーマに対して定義された実表は無視されます。それでもUSER_SDO_THEMESビューで定義されたジオメトリ列は必要であり、ユーザー指定のSQL問合せで選択されたジオメトリ列と同じである必要があります。スタイリング・ルールに<label>要素がある場合、ラベル・テキストが含まれる列が問合せで選択されているかぎり、指定されたラベル・スタイルがジオメトリのラベル付けに使用されます。

例2-12は、複雑なSQL問合せを含む、事前定義済テーマの<styling_rules>要素の例です。

例2-12 事前定義済テーマの複雑な問合せ

<?xml version="1.0" standalone="yes"?>
 <styling_rules>
   <rule>
     <features style="L.POOR_ROADS" asis="true">
        select sdo_lrs.clip_geom_segment(geometry,start_measure,end_measure)
              geometry 
        from (select /*+ no_merge use_hash(a b) */
                a.street_id, name, start_measure, end_measure, geometry
             from (select /*+ no_merge */ a.street_id, name, geometry
                   from philly_roads a
                   where sdo_filter(geometry,sdo_geometry(2002,41124,null,
                    sdo_elem_info_array(1,2,1),
                                       sdo_ordinate_array(?,?,?,?)),
                                 'querytype=window')='TRUE') a,
                   philly_road_conditions b
             where condition='POOR' and a.street_id = b.street_id)
     </features>
   </rule>
 </styling_rules>

例2-12が事前定義済テーマとして定義されている場合でも、ユーザーがこのテーマを含むマップをリクエストすると、実行時にはマップ・ビジュアライゼーション・コンポーネントによりJDBCテーマとして処理されます。マップ・ビジュアライゼーション・コンポーネントでは、通常のJDBCテーマと同様に、デフォルトでSQL問合せにウィンドウ・フィルタ処理(問合せウィンドウがマップ・リクエストに含まれる場合)が課せられます。このデフォルトの動作を無視して、指定した問合せ文字列が変更なしで実行されるようにするには、例2-12に示すように、<features>要素にasis="true"と指定します。

2.3.3 イメージ・テーマ

イメージ・テーマは、遠隔操作および航空写真術などによる、地理的参照画像(ラスター)データをビジュアル化するのに便利な、特殊なマップ・ビジュアライゼーション・コンポーネント・テーマです。

イメージ・テーマは、動的に、あるいはデータベースで(事前定義済テーマとして)永続的に定義できます。イメージ・テーマは、マップ内でベクトル(非画像)・テーマとともに使用できます。図2-8は、イメージ・テーマ(ボストン市の一部の航空写真を示したもの)に、ボストン市内の様々な種類の道路を示すテーマを重ねたマップを示しています。

図2-8 イメージ・テーマおよびボストンの道路を示すその他のテーマ

図2-8の説明が続きます
「図2-8 イメージ・テーマおよびボストンの道路を示すその他のテーマ」の説明

イメージ・テーマを定義する前に、次のルールに従って画像データを編成する必要があります。

  • 画像データを、データベース表内のBLOB列に元の形式(JPEGなど)で格納するか、元の画像ファイルを指すOracle Multimediaオブジェクト(ORDSYS.ORDImage)として格納します。

  • ジオメトリ(SDO_GEOMETRY)列を同じ表に追加し、各画像の最小外接矩形(MBR)をその列に格納します。

    MBR列の各ジオメトリには、ピクセル領域で表したサイズではなく、画像の地理的範囲を含めます。たとえば、正射写真画像のサイズが2000×2000ピクセルでも、(936000, 248000)の角を始点とした、幅と高さが8000mの土地矩形をその範囲とする場合、ジオメトリ列のMBRには(936000, 248000, 944000, 256000)と移入する必要があります。

  • ジオメトリ列のエントリをUSER_SDO_GEOM_METADATAビューに挿入します。

  • ジオメトリ列に対して空間索引を作成します。

イメージ・テーマを事前定義するには、「事前定義済イメージ・テーマの作成」のガイドラインに従います。マップ・リクエストで動的なイメージ・テーマを定義するには、「JDBCテーマ」で説明しているJDBCテーマの定義に関するガイドラインに従いますが、動的なイメージ・テーマに関する次の追加の考慮事項に注意してください。

  • イメージ・テーマを定義する場合、元の画像解像度情報を指定する必要があります。

  • デフォルトでは、イメージ・テーマを使用したマップを生成する場合、現在の問合せウィンドウに適合するようにマップ・ビジュアライゼーション・コンポーネントによって画像データが自動的にスケール変更されます。この自動スケール変更を無効にするには、マップ・リクエストでimagescaling="false"と指定します。

イメージ・テーマの定義について、マップ・ビジュアライゼーション・コンポーネントでサポートされている画像形式は、GIF、JPEG、PNGおよびTIFFのみです。

2.3.3.1 事前定義済イメージ・テーマの作成

事前定義済イメージ・テーマを作成するには、USER_SDO_THEMESビュー(「xxx_SDO_THEMESビュー」を参照)に行を挿入することにより、イメージ・テーマの定義をデータベースに格納する必要があります。例2-13では、イメージ・テーマの定義を格納します。

  • theme_type: このテーマがイメージ・テーマとして認識されるようにimageにする必要があります。

  • image_column: 実際の画像データが格納される実表またはビューの列を指定します。

  • image_format: 画像データの形式を示す文字列。GIFまたはJPEGと指定した場合、マップ・ビジュアライゼーション・コンポーネントでは常に画像データをレンダリングできます。

  • image_resolutionは、元の画像解像度(ピクセル当たりのimage_unit単位の数)を指定するオプション属性です。

  • image_unitはオプション属性です。ただし、image_resolution属性を指定した場合は必須です。image_unit属性は、メートルに対するMのように、解像度の単位を指定します。この属性の値は、MDSYS.SDO_DIST_UNITS表のSDO_UNIT列に含まれている値のいずれかである必要があります。例2-13では、画像の解像度はピクセル当たり2mです。

<styling_rules>要素のDTDについては、「テーマ: スタイリング・ルール」を参照してください。

例2-13 事前定義済イメージ・テーマの作成

INSERT INTO user_sdo_themes  VALUES (
   'IMAGE_LEVEL_2', 
   'Orthophotos at pyramid level 2', 
   'IMAGES',
   'IMAGE_MBR', 
   '<?xml version="1.0" standalone="yes"?>
    <styling_rules theme_type="image" image_column="image"
                   image_format="JPEG" image_resolution="2"
                   image_unit="M">
      <rule >
        <features style="C.RED"> plevel=2 </features>
      </rule>
    </styling_rules>' );

例2-13では、IMAGE_LEVEL_2という名前のイメージ・テーマを作成しています。実表(すべての画像データおよび関連するMBRが格納される表)の名前はIMAGESで、画像の最小外接矩形(MBR)はIMAGE_MBRという列に格納されます。USER_SDO_THEMESビューのSTYLING_RULES列には、1つの<styling_rules>要素を含むXML文書が挿入されます。

イメージ・テーマの<styling_rules>要素には、次の属性があります。

2.3.4 GeoRasterテーマ

GeoRasterテーマは、GeoRasterオブジェクトをビジュアル化するのに便利な、特殊なマップ・ビジュアライゼーション・コンポーネント・テーマです。GeoRasterは、ラスター画像およびグリッド・データとその関連メタデータの格納、索引付け、問合せ、分析および配信を可能にするOracle Spatialの機能です。GeoRasterオブジェクトは、SDO_GEORASTERデータ型を使用して定義します。GeoRasterの詳細は、『Oracle Spatial GeoRaster開発者ガイド』を参照してください。

マップ・ビジュアライゼーション・コンポーネントでGeoRasterテーマを使用する前に、Java Advanced Imaging (JAI)ライブラリ・ファイル(jai_core.jarおよびjai_codec.jar)がマップ・ビジュアライゼーション・コンポーネントのライブラリ・パスにあることを確認します。GeoRasterデータで次のアクションを実行する必要もあります。

  1. GeoRasterデータのセル座標と現実の地上座標(またはその他のローカル座標)を関連付けるために、GeoRasterデータを地理参照します。

    Oracle Database 10gリリース1(10.1)を使用している場合は、空間解像度の値も設定する必要があります。

  2. ラスター・データと関連付けられた空間エクステント(フットプリント)を生成または定義します。

  3. オプションで、ラスター画像またはデータを異なるサイズと異なる解像度で表す、ピラミッド・レベルを生成します。

  4. USER_SDO_GEOM_METADATAビューに、GeoRaster表の名前とGeoRaster列(つまり、SDO_GEORASTER型の列)のSPATIALEXTENT属性を指定する行を挿入します。次の例では、GEOR_COLUMNというGeoRaster列のあるGEOR_TABLEという表を指定する行を挿入しています。

    INSERT INTO USER_SDO_GEOM_METADATA VALUES
    ( 'geor_table',
      'geor_column.spatialextent',
      SDO_DIM_ARRAY(
        SDO_DIM_ELEMENT('X', 496602.844, 695562.844, 0.000005),
        SDO_DIM_ELEMENT('Y',8788409.499,8973749.499, 0.000005)
      ),
      82279   -- SRID
    );
    
  5. GeoRaster表の空間エクステントに空間索引を作成します。次の例では、GEOR_TABLEという表の空間エクステントにGEOR_IDXという空間索引を作成しています。

    CREATE INDEX geor_idx ON geor_table(geor_column.spatialextent)
      INDEXTYPE IS MDSYS.SPATIAL_INDEX;
    

「事前定義済GeoRasterテーマの作成」例2-17では、使用するGeoRasterデータを準備し、GeoRasterテーマをデータベースに格納します。

マップ・ビジュアライゼーション・コンポーネントでは、GeoRaster表のオブジェクトに関する2種類のマップ・リクエストをサポートします。

  • 1つ以上のGeoRasterオブジェクトを選択するためのSQL文を含むリクエスト

  • ラスター・データ表名とSDO_GEORASTERオブジェクト内のrasterID属性値との組合せにより1つのGeoRasterオブジェクトを指定するリクエスト(SDO_GEORASTERオブジェクト内のrasterID属性値は、GeoRaster表のどの主キー列またはID列とも異なり、関係ありません。)

次の要素と属性は、GeoRasterテーマの定義に適用されます。

  • <jdbc_georaster_query>要素: 動的に定義されるGeoRasterテーマであることを指定します。1つ以上のGeoRasterオブジェクトを選択するためにSQL文を使用するテーマの場合、この要素にはSQL問合せ文(終了セミコロンなし)が含まれます。

  • georaster_table属性: GeoRaster表の名前を指定します。

  • georaster_column属性: GeoRaster表内のSDO_GEORASTER型列の名前を指定します。

  • polygon_mask属性(オプション): GeoRaster画像のポリゴン・マスクの外側の部分を透明にするマスクとして使用されるポリゴンを表す2次元の座標のセットを指定します。座標は、x1、y1、x2、y2、...のように定義します。データ座標領域にマスク座標が格納されている必要があります。

  • raster_bands属性(オプション): 赤、緑および青のチャネルに割り当てられるバンド構成を指定します。1つの値のみを指定すると、その結果表示される画像では1バンド(単色画像のグレー・レベル)が使用されます。2つの値を指定すると、それらは赤と緑のチャネルに使用され、GeoRasterメタデータに格納されているデフォルトの青のバンドが青のチャネルに使用されます。この属性を指定しない場合、マップ・ビジュアライゼーション・コンポーネントではGeoRasterメタデータに格納されているデフォルト値が使用されます。

  • raster_pyramid属性(オプション): ピラミッド・レベル(解像度のレベル)を指定します。この属性を指定しない場合、マップ・ビジュアライゼーション・コンポーネントでは、現行ウィンドウの問合せおよびデバイス領域に最適なピラミッド・レベルが計算されます。

  • raster_id属性(定義にSQL文が含まれていない場合のみ): マップ・リクエスト用に、1つのGeoRasterオブジェクトのSDO_GEORASTERオブジェクト定義内のrasterID属性値を指定します。

  • raster_table属性(オプション、定義にSQL文が含まれていない場合のみ): マップ・リクエスト用に、1つのGeoRasterオブジェクトに関連付けられたラスター・データ表を指定します。

  • transparent_nodata属性(オプション): いずれかのGeoRaster NODATA値を透明としてレンダリングするかどうかを指定します。デフォルト値はfalseです。

例2-14では、1つのGeoRasterオブジェクトを選択するSQL文を含むGeoRasterテーマを定義しています。テーマでは、バンド1を赤チャネル、バンド2を緑チャネル、バンド3を青チャネルに割り当てます。raster_pyramid属性は指定されていないため、地理参照処理の間または後に設定される空間解像度の値を使用して、マップ・ビジュアライゼーション・コンポーネントが最適なピラミッド・レベルを計算します。(例2-14で、WHERE句のgeorid=1は、PCI_IMAGEという名前のGeoRaster表にあるGEORIDという列を参照しています。)

例2-15では、SDO_GEORASTERオブジェクトのrasterID属性値が1 (raster_id="1")である単一のGeoRasterオブジェクトを指定し、RDT_PCIというラスター・データ表に関連付けられているGeoRasterテーマを定義しています。このテーマでは、ピラミッド・レベルを2としています。

サブトピック:

例2-14 SQL文を含むGeoRasterテーマ

<theme name="georaster_theme">
  <jdbc_georaster_query
    georaster_table="pci_image" 
    georaster_column="georaster"
    raster_bands="1,2,3"
    jdbc_srid="82301"
    datasource="mvdemo"
    asis="false"> SELECT georaster FROM pci_image WHERE georid =1
  </jdbc_georaster_query>
</theme>

例2-15 ラスターIDおよびラスター・データ表を指定するGeoRasterテーマ

<theme name="georaster_theme">
  <jdbc_georaster_query
    georaster_table="pci_image"
    georaster_column="georaster"
    raster_id="1"
    raster_table="rdt_pci"
    raster_pyramid="2"
    raster_bands="1,2,3"
    jdbc_srid="82301"
    datasource="mvdemo"
    asis="false">
  </jdbc_georaster_query>
</theme>

2.3.4.1 事前定義済GeoRasterテーマの作成

事前定義済GeoRasterテーマを作成するには、USER_SDO_THEMESビュー(「xxx_SDO_THEMESビュー」を参照)に行を挿入することにより、GeoRasterテーマの定義をデータベースに格納する必要があります。例2-16では、GeoRasterテーマの定義を格納します。

例2-16では、GEOR_BANDS_012というGeoRasterテーマを作成しています。この例では、バンド0が赤チャネル、バンド1が緑チャネル、バンド2が青チャネルに割り当てられています。GeoRaster表の名前(この例ではGEOR_TABLE)はUSER_SDO_THEMESビューのBASE_TABLE列に、GeoRaster列の名前(この例ではGEOR_COLUMN)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

GeoRasterテーマの<styling_rules>要素では、このテーマがGeoRasterテーマとして認識されるように、theme_typegeorasterとする必要があります。

GeoRasterテーマの<styling_rules>要素では、例2-16で示したように、「GeoRasterテーマ」で解説したraster_bandsraster_pyramidraster_idraster_tableなどの属性を指定できます。また、GeoRasterテーマの<styling_rules>要素をルール定義にすることもできます。たとえば、WHERE句の条件georid=1を満たすGeoRasterオブジェクトをGeoRaster表から選択するGeoRasterテーマを作成するには、例2-16<styling_rules>要素を次のように置き換えます。

<styling_rules theme_type="georaster">
  <rule>
    <features> georid=1
    </features>
  </rule>
</styling_rules>

GeoRasterテーマの<styling_rules>要素では、「GeoRasterテーマでのビットマップ・マスクの使用」で説明するビットマップ・マスクを1つ以上指定することもできます。

<styling_rules>要素のDTDについては、「テーマ: スタイリング・ルール」を参照してください。

例2-17では、データベースに格納されているGeoRasterテーマで使用するGeoRasterデータを準備します。コード例のコメントは、主要なステップを簡単に説明しています。GeoRasterデータの要件とデータを使用するためのステップの詳細は、『Oracle Spatial GeoRaster開発者ガイド』を参照してください。

例2-16 事前定義済GeoRasterテーマの作成

INSERT INTO user_sdo_themes  VALUES (
   'GEOR_BANDS_012', 
   'Band 0 for red, 1 for green, 2 for blue', 
   'GEOR_TABLE',
   'GEOR_COLUMN', 
   '<?xml version="1.0" standalone="yes"?>
    <styling_rules theme_type="georaster" raster_table="RDT_PCI"
                   raster_id="1" raster_bands="0,1,2">
    </styling_rules>' );

例2-17 GeoRasterテーマで使用するGeoRasterデータの準備

connect scott
Enter password: password
 
SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 100
SET PAGESIZE 10000
SET SERVEROUTPUT ON SIZE 5000
SET LONG 20000
SET TIMING ON
call dbms_java.set_output(5000);
 
-------------------------------------------------------------------
-- Create a GeoRaster table (a table that has a 
-- column of SDO_GEORASTER object type).
-------------------------------------------------------------------
 
create table georaster_table
    (georid     number primary key, 
     type       varchar2(32), 
     georaster  sdo_georaster);
 
-------------------------------------------------------------------
-- Create the GeoRaster DML trigger on the GeoRaster table, if
-- the Oracle Database release is before 11.1. (In Release 11.1 and later
-- this trigger is created automatically, so you do not need to create
-- it manually.)
-------------------------------------------------------------------
 
call sdo_geor_utl.createDMLTrigger('georaster_table', 'georaster');
 
-------------------------------------------------------------------
-- Create a raster data table (RDT).
--
-- It is used to store cell data of GeoRaster objects.
-- This step is not a requirement. If the RDT table does not
-- exist, the GeoRaster procedures or functions will generate it
-- automatically whenever needed.
-- However, for huge GeoRaster objects, some tuning and setup on those
-- tables can improve the scalability and performance significantly.
-- In those cases, it is better for users to create the RDTs.
-- The primary key must be added to the RDT if you create it.
-------------------------------------------------------------------
 
create table rdt_geor of sdo_raster 
  (primary key (rasterId, pyramidLevel, bandBlockNumber,
                rowBlockNumber, columnBlockNumber))
  lob(rasterblock) store as (nocache nologging);
 
commit;
 
----------------
-- Import the image.
----------------
 
connect system;
Enter password: password
 
call dbms_java.grant_permission('MDSYS','SYS:java.io.FilePermission',
  'lbs/demo/images/l7_ms.tif', 'read' );
 
call dbms_java.grant_permission('SCOTT','SYS:java.io.FilePermission',
  'lbs/demo/images/l7_ms.tif', 'read' );
  
connect scott;
Enter password: password
 
 declare 
  geor SDO_GEORASTER;
begin
  delete from georaster_table where georid = 1;
 insert into georaster_table 
    values( 1, 'TIFF', sdo_geor.init('rdt_geor', 1) );
 select georaster into geor 
    from georaster_table where georid = 1 for update;
  sdo_geor.importFrom(geor, '', 'TIFF', 'file',
    'lbs/demo/images/l7_ms.tif');
  update georaster_table set georaster = geor where georid = 1;
  commit;
end;/
 
connect system;
Enter password: password
 
call dbms_java.revoke_permission('MDSYS','SYS:java.io.FilePermission',
       'lbs/demo/images/l7_ms.tif', 'read' );
 
call dbms_java.revoke_permission('SCOTT','SYS:java.io.FilePermission',
       'lbs/demo/images/l7_ms.tif', 'read' );
       
connect scott;
Enter password: password
 
--------------------------
-- Change the GeoRaster format, if needed.
-- To do this, you can call SDO_GEOR.changeFormatCopy.
-- The following operations for pyramiding, spatial resolution setup, and 
-- spatial extent generation can also be combined into one PLSQL block.
--------------------------
 
declare
  gr1 sdo_georaster;
begin
  --
  -- Using changeFormat with a GeoRaster object:
  --
 
  -- 1. Select the source GeoRaster object.
  select georaster into gr1 
    from georaster_table where georid = 1;
 
  -- 2. Make changes. (Interleaving is application-dependent. For TIFF images,
  --    the default interleaving is BSQ.)
  sdo_geor.changeFormat(gr1, 'blocksize=(512,512,3) interleaving=BIP');
 
  -- 3. Update the GeoRaster object in the GeoRaster table.
  update georaster_table set georaster = gr1 where georid = 1;
 
  commit;
end;/
 
---------------------------
-- Generate pyramid levels (strongly recommended, but optional).
---------------------------
 
declare
  gr sdo_georaster;
begin
 
  -- 1. Select the source GeoRaster object.
  select georaster into gr 
    from georaster_table where georid = 1 for update;
 
  -- 2. Generate pyramids.
  sdo_geor.generatePyramid(gr, 'resampling=NN');
 
  -- 3. Update the original GeoRaster object.
  update georaster_table set georaster = gr where georid = 1;
 
  commit;
end;/
 
-----------------------------
-- Georeference the GeoRaster object.
-----------------------------
 
DECLARE
  gr sdo_georaster;
BEGIN
  SELECT georaster INTO gr FROM georaster_table WHERE georid = 1 FOR UPDATE;
  sdo_geor.georeference(gr, 82216, 1,
                        sdo_number_array(30, 0, 410000.000000),
                        sdo_number_array(0, -30,3759000.000000));
  UPDATE georaster_table SET georaster = gr WHERE georid = 1;
  COMMIT;
END;/

-----------------------------
-- Set the spatial resolutions (required for 10gR1 only)
-----------------------------
-- If you are using Oracle Database Release 10.1, set spatial resolutions. (Not
-- required if you are using Release 10.2.) The spatial resolution values of 
-- (30, 30) are from the ESRI world file or from the georeferencing information; 
-- however, you may have to compute these values if they are not part of 
-- the original georeferencing metadata.
DECLARE
  gr sdo_georaster;
BEGIN
  SELECT georaster INTO gr FROM georaster_table WHERE georid = 1 FOR UPDATE;
  sdo_geor.setSpatialResolutions(gr, sdo_number_array(30, 30));
  UPDATE georaster_table SET georaster = gr WHERE georid = 1;
  COMMIT;
END;
/

------------------------
-- Update the spatial extent.
------------------------
 
DECLARE
  sptext sdo_geometry;
BEGIN
  SELECT sdo_geor.generateSpatialExtent(a.georaster) INTO sptext 
          FROM georaster_table a WHERE a.georid=1 FOR UPDATE;
  UPDATE georaster_table a SET a.georaster.spatialextent = sptext WHERE a.georid=1;
  COMMIT;
END;/
 
commit;
 
------------------------------------------------------------------
-- Create metadata information for the GeoRaster spatial extent column.
------------------------------------------------------------------
 
INSERT INTO USER_SDO_GEOM_METADATA 
  VALUES (
  'GEORASTER_TABLE',
  'georaster.spatialextent',
  SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('X', 410000.0, 470000.0, 0.000005),
    SDO_DIM_ELEMENT('Y', 3699000.0,3759000., 0.000005)
     ),
  82216   -- SRID
);
 
------------------------
-- Create a spatial index on the spatial extent.
------------------------
 
CREATE INDEX georaster_idx ON georaster_table(georaster.spatialextent) 
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
 
---------------------------------------------------------------------------
-- Create a predefined GeoRaster theme for the map visualization component.
---------------------------------------------------------------------------
 
INSERT INTO user_sdo_themes  VALUES (
   'GEORASTER_TABLE', 
   'GeoTiff image', 
   'GEORASTER_TABLE',
   'GEORASTER', 
   '<?xml version="1.0" standalone="yes"?>
    <styling_rules theme_type="georaster" raster_table="RDT_GEOR"
                   raster_id="1" raster_bands="0,1,2">
    </styling_rules>' );
    
commit;

2.3.4.2 GeoRasterテーマでのビットマップ・マスクの使用

Oracle Spatial GeoRasterでは、データベースに格納されているGeoRaster層にビットマップ・マスクを割り当てることができます。ビットマップ・マスクは深度が1ビットの特別な矩形ラスター・グリッドで、各ピクセルの値は0または1のいずれかです。これは、別のイメージ内にある変則的な形をした領域を定義するために使用します。1ビットは領域の内部を定義し、0ビットは領域の外部を定義します。ビットマップ・マスクの詳細は、『Oracle Spatial GeoRaster開発者ガイド』を参照してください。

GeoRasterテーマでビットマップ・マスクを指定するには、例2-18に示すように、事前定義済テーマの<styling_rules>要素の<bitmap_masks>要素を使用します。

<bitmap_masks>要素には1つ以上の<mask>要素が含まれ、それぞれで特定のGeoRasterオブジェクトのマスク定義が指定されます。例2-18では、RDT_MASS_COLOR_MOSAIC表に格納されているラスターIDが1のGeoRasterオブジェクトの層1および2に対して、マスクが定義されています。<mask>要素には次の属性があります。

  • raster_idでは、GeoRasterオブジェクトのラスターIDの値を指定します。

  • raster_tableでは、ラスター・データ表(RDT)を指定します。

  • layersでは、マスクに使用するGeoRasterオブジェクトの層番号を指定します。

  • zeromappingでは、ビットマップ・ピクセルで値0(ゼロ)を使用してレンダリングするときに適用される透明度の値を指定します。属性値は、0(完全な透明)から255(完全な不透明)までの範囲で指定できます。

  • onemappingでは、ビットマップ・ピクセルで値1を使用してレンダリングするときに適用される透明度の値を指定します。属性値は、0(完全な透明)から255(完全な不透明)までの範囲で指定できます。

例2-18 事前定義済GeoRasterテーマのビットマップ・マスク

<styling_rules theme_type="georaster" raster_id="1"
  raster_table="RDT_MASS_COLOR_MOSAIC">
    <bitmap_masks>
      <mask layers="1,2" zeromapping="0" onemapping="255"/>
    </bitmap_masks>
</styling_rules>

2.3.4.3 GeoRasterテーマの再投影

リリース11.2.0.1のOracle Spatial GeoRasterでは、GeoRasterオブジェクトを別のSRIDに再投影できるようになりました。オブジェクトがマップ・ビジュアライゼーション・コンポーネントにレンダリングされるときに、再投影された隣接するGeoRasterオブジェクトの境界線が黒くならないように、Oracle Databaseパッチ10259201を適用することをお薦めします。詳細は、My Oracle SupportのドキュメントID 1272931.1にあるWmsでGeorasterデータを再投影した後のOracle Mapviewerでの黒い線についての説明を参照してください。

マップ・ビジュアライゼーション・コンポーネントでは、GeoRasterテーマのSRIDがマップ・リクエストSRIDと異なると、そのGeoRasterテーマは再投影されます。再投影はレンダリングのみを目的に行われ、元のGeoRasterオブジェクトが変更されることはありません。再投影をサポートしていない以前のデータベースの場合、GeoRasterオブジェクトは再投影されません。

使用可能な再投影モードは、BILINEAR(デフォルトとして使用)、NN、CUBIC、AVERAGE4、AVERAGE16です。再投影の詳細は、『Oracle Spatial GeoRaster開発者ガイド』を参照してください。

GeoRasterテーマで再投影モードを指定するには、例2-19に示すように、事前定義済テーマの<styling_rules>要素のreproj_modeキーワードを使用します。

例2-19 事前定義済GeoRasterテーマにおける再投影モード

<styling_rules theme_type="georaster" reproj_mode="CUBIC">
</styling_rules>

2.3.4.4 仮想モザイク・テーマ

Oracle Spatial GeoRasterでは、仮想モザイクは、1つのGeoRasterオブジェクトであるかのように扱われる1つ以上のGeoRaster表またはビューに基づく、幾何補正の有無を問わない地理参照されたGeoRasterオブジェクトの大規模コレクションとして定義されます。

仮想モザイクは、様々な方法で定義できます。たとえば、1つまたは複数のGeoRaster表(またはGeoRaster列を含むビュー)を使用したり、GeoRasterオブジェクトのコレクションが得られる完全なSQL問合せ文を使用したりできます。

マップ・ビジュアライゼーション・コンポーネントは、次のタイプの事前定義済GeoRaster仮想モザイク・テーマの作成をサポートしています。

  • GeoRaster列があり、問合せ条件を含んでいる可能性のある表に基づいたテーマ。GeoRaster列がある表のリストも定義できます。次のXML定義では、表LANDSAT5_IMAGESとGeoRaster列IMAGEに基づいて仮想モザイク・テーマを定義しています。

    <?xml version="1.0" standalone="yes"?>
    <styling_rules theme_type="georaster" virtual_mosaic="true">
        <virtual_mosaic srid="32617" nodata_cell="true">
            <tables>
                <table name="LANDSAT5_IMAGES" georaster_column="IMAGE"/>
        </tables>
      </virtual_mosaic>
    </styling_rules>
    
  • 完全なSQL問合せに基づいたテーマ。次のXML定義では、SQL問合せに基づいた仮想モザイク・テーマを指定しています。

    <?xml version="1.0" standalone="yes"?>
    <styling_rules theme_type="georaster" virtual_mosaic="true">
        <virtual_mosaic srid="32617" nodata_cell="true">
            <sql>select image from landsat5_images</sql>
      </virtual_mosaic>
    </styling_rules>
    

仮想モザイク・テーマには、次のパラメータを定義できます。

srid: 空間参照システム(座標系)の値。

nodata_cell: 重複する領域の処理時に、NODATA (NODATA値またはNODATAビットマップ・マスク)を考慮するかどうかを指定します。TRUEでは、NODATA値を含むセルがNODATAセルとみなされ、セル値は重複する領域の計算に含まれませんが、FALSEでは、NODATA値を含むセルが通常のセルとみなされ、セル値は重複する領域の計算に含まれます。デフォルト値はFALSEです。この値がTRUEで、リサンプリング・メソッドがBILINEARBIQUADRATICCUBICAVERAGE4またはAVERAGE16の場合、リサンプリングの計算に含まれるセル値がNODATA値であると、リサンプリングの結果も常にNODATA値になります。複数のNODATA値または値の範囲が存在する場合、結果のNODATA値は、現行のラスター・レイヤーに関連付けられているNODATA値の最小値になります。

common_point_rule: 重複している領域のセル値を取得する方法。次のいずれかの値を指定できます。

  • OLDEST: メタデータに最も古いEndDataTimeが含まれるGeoRasterオブジェクトの値が使用されます。

  • END: 最後に出現したGeoRasterオブジェクトの値が使用されます。

  • LATEST: メタデータに最も新しいEndDataTimeが含まれるGeoRasterオブジェクトの値が使用されます。

  • OLDEST: メタデータに最も古いEndDataTimeが含まれるGeoRasterオブジェクトの値が使用されます。

  • CTC: 出力ウィンドウの中心に最も近いGeoRasterオブジェクトの値が使用されます。

  • HIGH: すべての重複するGeoRasterオブジェクトの最大セル値が使用されます。

  • LOW: すべての重複するGeoRasterオブジェクトの最小セル値が使用されます

  • AVERAGE: 重複するGeoRasterオブジェクトのすべてのセル値の平均が使用されます。

  • HISHRES: 空間解像度が最も高いGeoRasterオブジェクトの値が使用されます。

resampling_mode: モザイク操作中に使用するリサンプリング・メソッドを指定します(リサンプリングが含まれるか、幾何補正が必要な場合)。NNBILINEARBIQUADRATICCUBICAVERAGE4またはAVERAGE16のいずれかの値を指定できます。

resampling_tolerance: ソースGeoRasterオブジェクトを完全に揃えられない場合にリサンプリングを実行しない許容差を指定します。値は、0から0.5の間にする必要があり、単位はピクセルまたはセルです(たとえば、0.5は半分のピクセルまたはセルを意味します)。指定しない場合、0.5が使用され、リサンプリングは発生しません。

color_balance: カラー・バランスの方法を指定します。次のいずれかの値を指定できます。NONELINEARSTRETCHINGNORMALIZATION

min_stretch_value: color_balanceLINEARSTRETCHINGでない場合は無視されますが、それ以外の場合は線形ストレッチ・メソッドの範囲で最も小さい値を指定します。デフォルトは0です。

max_stretch_value: color_balanceLINEARSTRETCHINGでない場合は無視されますが、それ以外の場合は線形ストレッチ・メソッドの範囲で最も大きい値を指定します。デフォルトは255です。

mean: color_balanceNORMALIZATIONでない場合は無視されますが、それ以外の場合は正規化メソッドの参照平均値を指定します。

standard_deviation: color_balanceNORMALIZATIONでない場合は無視されますが、それ以外の場合は正規化メソッドの参照標準偏差値を指定します。

2.3.5 ネットワーク・テーマ

ネットワーク・テーマは、Oracle Spatialネットワーク・データ・モデルを使用して定義されているネットワークをビジュアル化する場合に役立つ特殊なマップ・ビジュアライゼーション・コンポーネント・テーマです。ネットワークは一連のノードおよびリンクで構成されています。通常、リンクやパスには方向がありますが、ネットワークは有向にも無向にもできます。また、ネットワークは、ネットワーク階層と呼ばれる様々な抽象レベルに編成可能です。マップ・ビジュアライゼーション・コンポーネントでは、ネットワーク内のネットワーク空間表が同じ座標系を使用していることと、それらの表の索引作成と登録が『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』の説明に従って実施されていることが想定されています。

ネットワークのノード、リンクおよびパス表には、SDO_GEOMETRY型のジオメトリが格納されます。これらのジオメトリを使用するJDBCテーマを作成できます。さらに、有向ネットワークのリンクの方向など、ネットワークの様々な面を考慮した動的テーマを定義できます。

次の要素と属性は、ネットワーク・テーマの定義に適用されます。

  • <jdbc_network_query>要素: 動的に定義されるネットワーク・テーマであることを指定します。

  • network_name属性: ネットワークの名前を指定します。

  • network_level属性(オプション): このテーマを適用するネットワーク階層レベルを指定します。(非階層ネットワークの場合、1を指定します。これがデフォルト値です。)

  • link_style属性(オプション): リンクに使用されるスタイル名を指定します。

  • direction_style属性(オプション): リンクの方向マーカー(方向を示す矢印の画像など)に使用されるスタイル名を指定します。

  • bidirection_style属性(オプション): 双方向リンクに使用されるスタイル名を指定します。

  • direction_position属性(オプション): リンクの始点を基準とした方向マーカーの位置を、0から1の数値で指定します。たとえば、0.85は、リンクの始点と終点の間隔の85パーセントの位置を示します。

  • direction_markersize属性(オプション): 方向マーカーのサイズ(ピクセル数)を指定します。

  • direction_multimarker属性(オプション): リンク上で方向マーカーを繰り返すかどうかを指定します。trueの場合、方向マーカーは指定した開始位置に配置された後、所定の距離ごとに配置されます。false(デフォルト値)の場合、方向マーカーは繰り返されません。

  • link_labelstyle属性(オプション): link_labelcolumn属性で指定した列内のリンク・ラベルに使用されるスタイル名を指定します。

  • link_labelcolumn属性(オプション): link_labelstyle属性で指定されたスタイルを使用してレンダリングされるリンク・ラベルを含む列名を指定します。

  • node_style属性(オプション): ノードに使用されるスタイル名を指定します。

  • node_markersize属性(オプション): ノード・マーカーのサイズ(ピクセル数)を指定します。

  • node_labelstyle属性(オプション): node_labelcolumn属性で指定した列内のノード・ラベルに使用されるスタイル名を指定します。

  • node_labelcolumn属性(オプション): node_labelstyle属性で指定されたスタイルを使用してレンダリングされるノード・ラベルを含む列名を指定します。

  • path_ids属性(オプション): レンダリングされる格納済パスのパスID値を1つ以上指定します。パスが複数の場合は、カンマでパスID値を区切ります。たとえば、path_ids="1,3,4"は、パスID値が1、3および4のパスがレンダリングされることを指定します。

  • path_styles属性(オプション): path_ids属性で指定したパスに関連付けられた1つ以上のスタイル名を指定します。たとえば、path_styles="C.RED,C.GREEN,C.BLUE"は、path_ids属性で指定した1番目、2番目および3番目のパスをそれぞれレンダリングするために使用されるスタイルを指定します。

  • path_labelstyle属性(オプション): path_labelcolumn属性で指定した列内のパス・ラベルに使用されるスタイル名を指定します。

  • path_labelcolumn属性(オプション): path_labelstyle属性で指定されたスタイルを使用してレンダリングされるパス・ラベルを含む列名を指定します。

ネットワーク分析に関連するその他のネットワーク・テーマ属性については、ネットワーク分析でのマップ・ビジュアライゼーション・コンポーネントの使用を参照してください。

ネットワーク・テーマは、リンク、ノードおよびパスの属性、またはこれらの組合せを併用できます。そのような場合、マップ・ビジュアライゼーション・コンポーネントでは、リンク、パス、ノードの順にレンダリングします。

例2-20では、NYC_NETというネットワークのリンクおよびノードを表示する際の属性を指定するネットワーク・テーマを定義しています。

例2-20 ネットワーク・テーマ

<theme name="net_theme" user_clickable="false">
  <jdbc_network_query
    network_name="NYC_NET"
    network_level="1"
    jdbc_srid="8307"
    datasource="mvdemo"
    link_style="C.RED"
    direction_style="M.IMAGE105_BW"
    direction_position="0.85"
    direction_markersize="8"
    node_style="M.STAR"
    node_markersize="5"
    asis="false">
  </jdbc_network_query>
</theme>

2.3.5.1 事前定義済ネットワーク・テーマの作成

事前定義済ネットワーク・テーマを作成するには、USER_SDO_THEMESビュー(「xxx_SDO_THEMESビュー」を参照)に行を挿入することにより、ネットワーク・テーマの定義をデータベースに格納する必要があります。例2-21では、ネットワーク・テーマの定義を格納します。

例2-21 事前定義済ネットワーク・テーマの作成

INSERT INTO user_sdo_themes  VALUES (
   'NYC_NET_1',
   'New York City network',
   'NYC_NET_LINK_TABLE',
   'GEOMETRY',
   '<?xml version="1.0" standalone="yes"?>
    <styling_rules
              theme_type="network"
              network_name="NYC_NET"
              network_level="1">
      <rule>
         <features>
           <link
              style="C.RED"
              direction_style="M.IMAGE105_BW"
              direction_position="0.85"
              direction_markersize="8">
           </link>
           <path
              ids="1,3"
              styles="C.BLUE,C.GREEN">
           </path>
           <node
              style="M.CIRCLE"
              markersize="5">
           </node>
         </features>
         <label>
           <link column="LINK_ID" style="T.STREET NAME"> 1 </link>
         </label>
      </rule>
    </styling_rules>' );

例2-21では、NYC_NETという名前のネットワークのレベル1に対して、NYC_NET_1というネットワーク・テーマを作成しています。ネットワーク表の名前(この例ではNYC_NET_LINK_TABLE)はUSER_SDO_THEMESビューのBASE_TABLE列に、リンク・ジオメトリ列の名前(この例ではGEOMETRY)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

ネットワーク・テーマの<styling_rules>要素では、このテーマがネットワーク・テーマとして認識されるように、theme_typenetworkとする必要があります。リンク、パスおよびノードの要素は、例2-21の場合と同様に、同じ<features>要素で指定できます。

  • リンク地物のルールでは、すべてのリンクのC.REDスタイルと方向マーカーの属性を指定します。

  • パス地物のルールでは、パスID値が1であるパスにC.BLUEスタイルを、パスID値が3であるパスにC.GREENスタイルを指定します。

  • ノード地物のルールでは、M.CIRCLEスタイルを指定し、マーカー・サイズを5と指定します。

例2-21では、リンクに<label>要素も含まれており、リンク列LINK_IDとラベル・スタイルT.STREET NAMEを指定しています。

<styling_rules>要素のDTDについては、「テーマ: スタイリング・ルール」を参照してください。

2.3.5.2 ネットワーク分析でのマップ・ビジュアライゼーション・コンポーネントの使用

ネットワーク・モデルのJava APIには、いくつかのネットワーク分析機能が用意されています。マップ・ビジュアライゼーション・コンポーネント・ネットワーク・テーマを、最短パス分析機能とコスト内分析機能をサポートするように定義できます。属性には、両方の機能に適用されるものと、適切な関連機能に対してのみ適用されるものがあります。

すべてのネットワーク分析機能に対して、「ネットワーク・テーマ」で説明している<jdbc_network_query>要素とネットワーク関連属性が、ネットワーク・テーマの定義に適用されます。

最短パス分析では、次の属性がネットワーク・テーマの定義に適用されます。

  • analysis_algorithm属性: 使用する最短パス分析アルゴリズムを指定します。DIJKSTRAまたはASEARCHのいずれかを指定します。

  • shortestpath_style属性: 最短パスに使用するスタイル名を指定します。

  • shortestpath_startnode属性: 分析に使用する開始ノードを指定します。

  • shortestpath_endnode属性: 分析に使用する終了ノードを指定します。

  • shortestpath_startstyle属性(オプション): 開始ノードに使用されるスタイル名を指定します。

  • shortestpath_endstyle属性(オプション): 終了ノードに使用されるスタイル名を指定します。

例2-22では、最短パス分析に使用できるネットワーク・テーマを定義します。

コスト内分析では、次の属性がネットワーク・テーマの定義に適用されます。

  • analysis_algorithm属性: WITHINCOSTにしてください。

  • withincost_startnode属性: 分析に使用する開始ノードを指定します。

  • withincost_cost属性: 含めるノードのコスト削減値を指定します。開始ノードから指定値以下のコストで到達可能なすべてのノードが、結果として表示されます。開始ノードから到達不能なノード、または到達までに指定値より大きなコストが必要なノードは表示されません。

  • withincost_startstyle属性(オプション): 開始ノードに使用されるスタイル名を指定します。

  • withincost_style属性: 開始ノードと指定したコスト削減値内の各ノード間のパス表示で、リンクに使用されるスタイル名を指定します。

例2-23では、コスト内分析に使用可能なネットワーク・テーマを定義しています。

例2-22 最短パス分析用のネットワーク・テーマ

<theme name="shortest_path_theme" user_clickable="false">
  <jdbc_network_query
    network_name="BI_TEST"
    network_level="1"
    jdbc_srid="0"
    datasource="mvdemo"
    analysis_algorithm="DIJKSTRA"
    shortestpath_style="L.PH"
    shortestpath_startnode="20"
    shortestpath_endnode="101"
    shortestpath_startstyle="M.STAR"
    shortestpath_endstyle="M.CIRCLE"
    asis="false">
  </jdbc_network_query>
</theme>

例2-23 コスト内分析用のネットワーク・テーマ

<theme name="within_cost_theme" user_clickable="false">
  <jdbc_network_query
    network_name="BI_TEST"
    network_level="1"
    jdbc_srid="0"
    datasource="mvdemo"
    analysis_algorithm="WITHINCOST"
    withincost_startnode="20"
    withincost_style="L.PH"
    withincost_cost="1"
    withincost_startstyle="M.STAR"
    asis="false">
  </jdbc_network_query>
</theme>

2.3.6 トポロジ・テーマ

トポロジ・テーマは、Oracle Spatialトポロジ・データ・モデルを使用して定義されているトポロジをビジュアル化する場合に役立つ特殊なマップ・ビジュアライゼーション・コンポーネント・テーマです。トポロジ・データ・モデルを使用することにより、トポロジ内のノード、エッジおよびフェースに関するデータを処理できます。ノード、エッジおよびフェースの空間表現は、SDO_GEOMETRY型の空間ジオメトリです。ノードやエッジの場合、ジオメトリは明示的に格納されます。フェースの場合は、基線(外側と内側)が格納され、その結果フェース・ジオメトリを生成できます。

トポロジには、ノード、エッジ、フェースの空間表現の他に、地物も指定できます。地物(トポロジ・ジオメオリとも呼ばれる)は、実際のオブジェクトの空間表現です。各地物はSDO_TOPO_GEOMETRY型のオブジェクトとして定義されます。このオブジェクトはトポロジ・ジオメトリ・タイプ、トポロジ・ジオメトリID、トポロジ・ジオメトリ層IDおよびトポロジIDです。詳細は、『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照してください。

マップ・ビジュアライゼーション・コンポーネントでは、トポロジ地物をレンダリングできます。トポロジのノード、エッジおよびフェースを表示するために、デバッグ・モード(この項の後半で説明)でテーマをレンダリングすることもできます。マップ・ビジュアライゼーション・コンポーネントでは、トポロジ・テーマごとに、USER_SDO_TOPO_METADATAビューに格納されているトポロジ・メタデータ情報を使用します。

次の要素と属性は、トポロジ・テーマの定義に適用されます。

  • <jdbc_topology_query>要素: これが動的に定義されるトポロジ・テーマであることを指定します。この要素にはSQL問合せ文(終了セミコロンなし)を指定できます。

  • topology_name属性: トポロジ名を指定します。

  • feature_table属性: 地物表名を指定します。

  • spatial_column属性: SDO_TOPO_GEOMETRY型の空間地物列名を指定します。

  • label_column属性: 各地物で使用されるテキスト・ラベルを含む地物表の列を指定します。

  • label_style属性: ラベル列のラベルをレンダリングするために使用されるテキスト・スタイル名を指定します。

  • render_style属性: トポロジのレンダリングに使用されるスタイル名を指定します。

例2-24では、CITY_DATAトポロジのLAND_PARCELS表の地物およびラベルを表示するための属性を指定するトポロジ・テーマを定義しています。SQL文は、空間地物列およびラベル列を指定し、地物表のすべての行を含みます。

マップ・ビジュアライゼーション・コンポーネントでは、トポロジのノード、エッジおよびフェースをレンダリングするデバッグ・モードもサポートしています。デバッグ・モードを指定するには、<theme>要素にmode="debug"属性を含めます。この項で前述した<jdbc_topology_query>属性の他に、デバッグ・モードでは次の属性を使用できます。

  • edge_style属性: エッジのレンダリングに使用されるスタイル名を指定します。

  • edge_label_style属性: エッジ・ラベルのレンダリングに使用されるテキスト・スタイル名を指定します。

  • edge_marker_style属性: エッジ・マーカーに使用されるマーカー・スタイル名を指定します。

  • edge_marker_size属性: エッジ・マーカーのサイズ(ピクセル数)を指定します。

  • node_style属性: ノードのレンダリングに使用されるスタイル名を指定します。

  • node_label_style属性: ノード・ラベルのレンダリングに使用されるテキスト・スタイル名を指定します。

  • face_style属性: フェースのレンダリングに使用されるスタイル名を指定します。

  • face_label_style属性: フェース・ラベルのレンダリングに使用されるテキスト・スタイル名を指定します。

例2-25では、CITY_DATAトポロジのすべての地物表の地物、エッジ、ノードおよびフェースをレンダリングするための、デバッグモード・トポロジ・テーマを定義しています。

例2-24 トポロジ・テーマ

<theme name="topo_theme" user_clickable="false">
  <jdbc_topology_query
    topology_name="CITY_DATA"
    feature_table="LAND_PARCELS"
    label_column="FEATURE_NAME"
    spatial_column="FEATURE"
    label_style="T.CITY NAME"
    render_style="C.COUNTIES"
    jdbc_srid="0"
    datasource="topology"
    asis="false">select feature, feature_name from land_parcels
  </jdbc_topology_query>
</theme>

例2-25 デバッグ・モードを使用するトポロジ・テーマ

<theme name="topo_theme" mode="debug" user_clickable="false">
  <jdbc_topology_query
    topology_name="CITY_DATA"
    edge_style="C.RED"
    edge_marker_style="M.IMAGE105_BW"
    edge_marker_size="8"
    edge_label_style="T.EDGE"
    node_style="M.CIRCLE"
    node_label_style="T.NODE"
    face_style="C.BLUE"
    face_label_style="T.FACE"
    jdbc_srid="0"
    datasource="topology"
    asis="false">
  </jdbc_topology_query>
</theme>

2.3.6.1 事前定義済トポロジ・テーマの作成

事前定義済トポロジ・テーマを作成するには、USER_SDO_THEMESビュー(「xxx_SDO_THEMESビュー」を参照)に行を挿入することにより、トポロジ・テーマの定義をデータベースに格納する必要があります。例2-26では、トポロジ・テーマの定義を格納します。

例2-26では、CITY_DATAというトポロジ用にLANDPARCELSというトポロジ・テーマを作成しています。地物表の名前(この例ではLAND_PARCELS)はUSER_SDO_THEMESビューのBASE_TABLE列に、地物列の名前(この例ではFEATURE)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

トポロジ・テーマの<styling_rules>要素では、このテーマがトポロジ・テーマとして認識されるように、theme_typetopologyとする必要があります。例2-26のテーマでは、CITY_DATAトポロジのすべての土地区画地物をC.REDスタイルを使用してレンダリングし、地物表のFEATURE_NAME列の値にはT.TEXT STYLEラベル・スタイルを使用する、1つのスタイリング・ルールを定義しています。

<styling_rules>要素のDTDについては、「テーマ: スタイリング・ルール」を参照してください。

例2-26 事前定義済トポロジ・テーマの作成

INSERT INTO user_sdo_themes  VALUES (
   'LANDPARCELS',
   'Topology theme for land parcels',
   'LAND_PARCELS',
   'FEATURE',
   '<?xml version="1.0" standalone="yes"?>
    <styling_rules theme_type="topology" topology_name="CITY_DATA">
      <rule>
        <features style="C.RED"></features>
        <label column="FEATURE_NAME" style="T.TEXT STYLE"> </label>
      </rule>
    </styling_rules>' );

2.3.7 WFSテーマ

WFSテーマは、Open GIS Consortium (OGC)のWeb Feature Service (WFS)プロトコル、特にWFS 1.0.0の実装仕様を使用して配信されるデータのレンダリングをサポートする、特殊なマップ・ビジュアライゼーション・コンポーネント・テーマです。

WFSは概念的にはジオメトリ・テーマに類似しており、ユーザーは地物のレンダリングやラベル付けを行うことができます。WFSテーマをレンダリングするときは、WFSのGetCapabilitiesDescribeFeatureTypeおよびGetFeatureという操作が使用されます。WFSサービスにアクセスすると、マップ・ビジュアライゼーション・コンポーネントは機能および地物のタイプに関する情報をキャッシュします。

  • GetCapabilitiesは、サーバーの一般情報(リクエストを発行するためのURLアドレスなど)および使用可能な地物を取得します。通常、WFS機能リクエストは次の形式をとります。

    http://localhost:1979/geoserver/wfs/GetCapabilities?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetCapabilities
    

    結果には、WFSリクエスト用のURLアドレスを含む<Capabilities>要素が含まれます。たとえば、次の結果にはHTTPのGETおよびPOSTリクエスト用のGetCapabilities URLが含まれています。

    <Capability>
     <Request>
      <GetCapabilities>
       <DCPType>
        <HTTP>
         <Get onlineResource="http://localhost:1979/geoserver/wfs/GetCapabilities?" />
        </HTTP>
       </DCPType>
       <DCPType>
        <HTTP>
         <Post onlineResource="http://localhost:1979/geoserver/wfs/GetCapabilities?" /> 
        </HTTP>
        </DCPType>
      </GetCapabilities>
    . . .
    </Capability>
    
  • DescribeFeatureTypeは、地物の属性やタイプなどの情報を取得します。

  • GetFeatureは、地物のジオメトリおよび属性を取得します。GetFeatureリクエストに対する出力形式はGML2です。

WFSテーマの定義には次の属性が適用されます。

  • datasource属性: スタイルがロードされるマップ・ビジュアライゼーション・コンポーネント・データソースを指定します。

  • feature_attributes属性: 拡張スタイルに使用できる地物属性(さらにジオメトリ列とラベル列)を指定します。

  • feature_ids属性: 取得するWFS地物IDを指定します。地物IDは、WFSレスポンスではfid名で表されます。地物IDが指定されている場合、WFSリクエストでは空間フィルタおよび問合せ条件は使用されません。

  • feature_name属性: WFS地物名を指定します。

  • key_column属性: キー列として使用する属性を指定します。事前定義済テーマに適用され、Oracle Mapsアプリケーションで使用できます。key_columnを指定しない場合は、fidがキー列として使用されます。

  • label_column属性: 各WFS地物で使用されるテキスト・ラベルを含む地物表の列を指定します。

  • label_style属性: ラベル列のラベルをレンダリングするために使用されるテキスト・スタイル名を指定します。

  • query_condition属性: WFSテーマに適用するWHERE句の条件を指定します。複数のカッコを使用して定義した式の階層を持つ複雑な条件は指定できません。問合せ内の各文字列は、スペースで区切る必要があります。解析できない条件はWFSリクエストで無視されます。feature_ids属性を指定した場合は、すべての問合せ条件が無視されます。有効な式の例を次に示します。

    state_name = 'New Hampshire' or state_name = 'New York'
    (state_name = 'New Hampshire' or state_name = 'New York') and top_pop > 700000
    (state_name = 'New Hampshire' or state_name = 'New York') and (top_pop > 700000)
    
  • render_style属性: ジオメトリのレンダリングに使用されるスタイル名を指定します。

  • service_url属性: HTTP GETリクエスト用の機能アドレスに対応します。マップ・ビジュアライゼーション・コンポーネントのservice_urlパラメータは、<GetCapabilities>要素のHTTP GETのオンライン・リソース・アドレスであることが必要です。前述の例の場合、使用される値はhttp://localhost:1979/geoserver/wfs/GetCapabilities?です。

    CapabilitiesのパラメータのSERVICEVERSIONおよびREQUESTは含めず、機能情報のURLのみを使用してください。

  • spatial_column属性: SDO_TOPO_GEOMETRY型の空間地物列名を指定します。

  • srs属性: WFS地物の空間参照システム(座標系)の名前をEPSGまたはOracle Spatialの書式で指定します。たとえば、EPSG:4325SDO:8307および8307 (Spatial SRID値)では、同じSRSを指定します。EPSG SRS値を指定すると、マップ・ビジュアライゼーション・コンポーネントでは同等のSpatial (SDO) SRIDを識別しようとします。一致するSRIDが見つからなかったときには、該当するテーマのSRIDがゼロ(0)とみなされます。マップ・ビジュアライゼーション・コンポーネントは、一致するSRID値を次のようにして探します。

    1. マップ・ビジュアライゼーション・コンポーネント構成ファイルで指定したSDO SRIDからEPSG SRIDへのマッピング・ファイルに指定されているカスタム・マッピングを使用します(SRSマッピングのカスタマイズを参照)。

    2. SpatialファンクションのSDO_CS.MAP_EPSG_SRID_TO_ORACLEを使用して同等のSDOコードを取得します(このファンクションがデータの格納に使用するOracle Databaseのバージョンで利用できる場合)。

    3. 一致する値が見つからなかった場合は、MDSYS.CS_SRS表にあるEPSGコードを使用します。

  • userおよびpassword属性は、Basic認証を使用するセキュアなWFSサーバーにアクセスするよう定義できます。

    WFSサーバーがWebLogic Application Serverにデプロイされている場合、パラメータ-DUseSunHttpHandler=trueをWebLogicサーバーの起動スクリプトに追加する必要があります。

例2-27は、動的WFSテーマを含むリクエストを示しています。WFSサービスはgeoserverで、ローカル・システムにインストールされています。

例2-27 動的WFSテーマを含むWFSリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
             title="WFS MAP"
             datasource = "mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="true"
             mapfilename="wfs_map"
             format="PNG_URL">
  <center size="20.">
     <geoFeature  >
         <geometricProperty typeName="center">
             <Point>
                 <coordinates>-70., 44.</coordinates>
             </Point>
         </geometricProperty>
     </geoFeature>
  </center>
 
  <themes>
   <theme name="wfs" >
     <wfs_feature_request 
         service_url="http://localhost:1979/geoserver/wfs/GetCapabilities?"
         srs="EPSG:4326"
         feature_name="states"
         spatial_column="the_geom"
         render_style="C.COUNTIES"
         label_column="STATE_NAME"
         label_style="T.STATE NAME"
         datasource="mvdemo" />
    </theme> 
  </themes>
 
</map_request>

2.3.7.1 事前定義済WFSテーマの作成

事前定義済WFSテーマを作成するには、USER_SDO_THEMESビュー(「xxx_SDO_THEMESビュー」を参照)に行を挿入することにより、WFSテーマの定義をデータベースに格納する必要があります。例2-28では、WFSテーマの定義を格納します。

例2-28では、WFS地物POIが実表として使用され、属性THE_GEOMが空間列です。スタイリング・ルール情報にはservice_urlおよびsrs情報が含まれており、例2-28では指定されていませんが、key_column値を指定することもできます。スタイリング・ルールの<features>要素と<label>要素は、ジオメトリ・テーマで使用されるルールとほぼ同じです。非表示情報(<hidden_info>要素)を定義してOracle Mapsアプリケーションで使用することもできます。

例2-29は、例2-28で作成された事前定義済テーマを使用するマップ・リクエストを示しています。

場合によっては、プロキシ情報がWFSサーバーへのアクセスに影響することがあります。そのような場合は、マップ・ビジュアライゼーション・コンポーネント構成ファイルで適切なプロキシ・パラメータを指定します。

例2-28 事前定義済WFSテーマの作成

INSERT INTO user_sdo_themes  VALUES (
   'WFS_THEME1', 
   'WFS', 
   'POI',
   'THE_GEOM',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wfs" service_url="http://localhost:1979/geoserver/wfs/GetCapabilities?" srs="EPSG:4326">
    <hidden_info>
        <field column="NAME" name="name"/>
        <field column="MAINPAGE" name="mainpage"/>
  </hidden_info>
    <rule>
        <features style="M.STAR"> </features>
        <label column="NAME" style="T.STREET NAME"> 1 </label>
  </rule>
</styling_rules>' );

例2-29 事前定義済WFSテーマを含むマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
             title="Predefined WFS MAP"
             datasource = "mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="true"
             format="PNG_STREAM">
 
  <themes>
   <theme name="wfs_theme1" />
  </themes>
 
</map_request>

2.3.8 WMTSテーマ

WMTSテーマでは、Open GIS Consortium (OGC)のWeb Map Tile Service (WMTS)標準、特にWMTS 1.0.0の実装標準を使用した配信データのレンダリングがサポートされます。

WMTSテーマは、WMTS対応サーバーからインターネット経由でタイル画像をフェッチし、それらの画像をレンダリングします。WMTS対応サーバー上のタイル画像は、事前定義済コンテンツ、エクステントおよび解像度を使用して空間参照されます。

WMTSテーマをレンダリングするときは、WMTSのGetCapabilitiesGetTileおよびGetFeatureInfoという操作が使用されます。WMTSサービスにアクセスすると、マップ・ビジュアライゼーション・コンポーネントはそのWMTSサービスの機能情報をキャッシュします。WMTSテーマの作成時にMap Builderでプロキシ・サーバーを指定したり、WMTSテーマの使用時にマップ・ビジュアライゼーション・コンポーネント構成ファイル(MapViewerConfig.xml)を編集することが必要になる場合があります。

  • GetCapabilities操作は、サーバーの一般情報(リクエストを発行するためのURLアドレスなど)および使用可能な地物を取得します。通常、WMTS機能リクエストは次の形式をとります。

    http://maps.opengeo.org/geowebcache/service/wmts?service=WMTS&version=1.0.0&request=GetCapabilities
    

    結果には、WMTSリクエスト用のURLアドレスを含む<Capabilities>要素が含まれます。たとえば、次の結果にはHTTPのGETまたはPOSTリクエスト用のGetCapabilities URLが含まれています。

    <?xml version="1.0" encoding="UTF-8"?>
    <Capabilities xmlns="http://www.opengis.net/wmts/1.0"
    xmlns:ows="http://www.opengis.net/ows/1.1"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd"
    version="1.0.0">
    <ows:ServiceIdentification>
      <ows:Title>Web Map Tile Service - GeoWebCache</ows:Title>
      <ows:ServiceType>OGC WMTS</ows:ServiceType>
      <ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
    </ows:ServiceIdentification>
    <ows:ServiceProvider>
      <ows:ProviderName>http://maps.opengeo.org/geowebcache/service/wmts</ows:ProviderName>
      <ows:ProviderSite xlink:href="http://maps.opengeo.org/geowebcache/service/wmts" />
      <ows:ServiceContact>
        <ows:IndividualName>GeoWebCache User</ows:IndividualName>
      </ows:ServiceContact>
    </ows:ServiceProvider>
    <ows:OperationsMetadata>
      <ows:Operation name="GetCapabilities">
        <ows:DCP>
          <ows:HTTP>
            <ows:Get xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?">
              <ows:Constraint name="GetEncoding">
                <ows:AllowedValues>
                  <ows:Value>KVP</ows:Value>
                </ows:AllowedValues>
              </ows:Constraint>
            </ows:Get>
          </ows:HTTP>
        </ows:DCP>
      </ows:Operation>
      <ows:Operation name="GetTile">
        <ows:DCP>
          <ows:HTTP>
            <ows:Get xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?">
              <ows:Constraint name="GetEncoding">
                <ows:AllowedValues>
                  <ows:Value>KVP</ows:Value>
                </ows:AllowedValues>
              </ows:Constraint>
            </ows:Get>
          </ows:HTTP>
        </ows:DCP>
      </ows:Operation>
      <ows:Operation name="GetFeatureInfo">
        <ows:DCP>
          <ows:HTTP>
            <ows:Get xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?">
              <ows:Constraint name="GetEncoding">
                <ows:AllowedValues>
                  <ows:Value>KVP</ows:Value>
                </ows:AllowedValues>
              </ows:Constraint>
            </ows:Get>
          </ows:HTTP>
        </ows:DCP>
      </ows:Operation>
    </ows:OperationsMetadata>
    <Contents>
      <Layer>
        <ows:Title>bluemarble</ows:Title>
        <ows:WGS84BoundingBox>
          <ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
          <ows:UpperCorner>180.0 90.0</ows:UpperCorner>
        </ows:WGS84BoundingBox>
        <ows:Identifier>bluemarble</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>_null</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Format>image/jpeg</Format>
        <TileMatrixSetLink>      
          <TileMatrixSet>EPSG:4326</TileMatrixSet>
        </TileMatrixSetLink>    
        <TileMatrixSetLink>
          <TileMatrixSet>EPSG:900913</TileMatrixSet>
        </TileMatrixSetLink>  
      </Layer>
      ...
      <TileMatrixSet>
        <ows:Identifier>EPSG:4326</ows:Identifier>
        <ows:SupportedCRS>urn:ogc:def:crs:EPSG::4326</ows:SupportedCRS>
        <TileMatrix>
          <ows:Identifier>EPSG:4326:0</ows:Identifier>
          <ScaleDenominator>2.795411320143589E8</ScaleDenominator>
          <TopLeftCorner>90.0 -180.0</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>2</MatrixWidth>
          <MatrixHeight>1</MatrixHeight>
        </TileMatrix>
       ...
      </TileMatrixSet>
      ...
    </Contents>
    <ServiceMetadataURL xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?REQUEST=getcapabilities&amp;VERSION=1.0.0"/>
    </Capabilities>
    
  • GetTile操作は、WMTSサーバーからタイル画像を取得します。サーバーへのリクエストには、タイル画像を定義するキーと値のペア(KVP)のパラメータが含まれます。

  • GetFeatureInfo操作により、WMTSクライアントは、特定の問合せ層の特定のタイルに含まれる特定の位置の情報をリクエストできるようになります。

これらの操作の詳細は、http://www.opengeospatial.org/standards/wmtsを参照してください。

WMTSテーマの定義には、次の属性が適用されます。

  • current_threads属性(オプション): 整数値(int)の変数。デフォルトは8です。WMTSサーバーからタイル画像を取得するための同時スレッド数です。通常は、同時スレッド数が多いほど、より多くのスレッドで同時にマップ・サーバーから画像タイルを取得できます。他の制約要因により、100という単位の数は使用できない場合がありますが、16、32またはそれよりも少し大きい値を指定すると、処理を高速化できます。

  • format属性: WMTSサーバーに格納されるタイル画像の形式を指定します。マップ・ビジュアライゼーション・コンポーネントでサポートされる形式は、tif、jpeg、pngおよびpng8です。

  • layer属性: タイル画像をフェッチする層の名前を指定します。

  • matrix_set_id属性: タイル画像をフェッチするマトリックス・セットのIDを指定します。

  • service_url属性: HTTP GETリクエスト用の機能アドレスに対応します。マップ・ビジュアライゼーション・コンポーネントのservice_urlパラメータは、<GetCapabilities>要素のHTTP GETのオンライン・リソース・アドレスであることが必要です。前述の例では、http://maps.opengeo.org/geowebcache/service/wmts?という値が使用されます。

  • snap_to_tile_scale属性(オプション): ブール値(trueまたはfalse)。デフォルトはfalseです。

    snap_to_tile_scaletrueに設定すると、リクエスト・スケール(デバイス・ウィンドウのサイズとリクエスト・データ・ウィンドウのサイズから導出されます)は最も近いタイル・スケールにスナップされます。マップ・スケールにはタイル・スケールが使用されます。たとえば、タイルの一連のスケールが1:4000、1:2000、1.1000、1:500…の場合、リクエスト・スケール1:1600はタイル・スケール1:2000にスナップされ、マップには同じスケール1:2000が使用されます(図2-9を参照)。

    図2-9 snap_to_tile_scale属性

    図2-9の説明が続きます
    「図2-9 snap_to_tile_scale属性」の説明

    マップ・リクエストに含まれる複数のWMTSテーマでsnap_to_tile_scaletrueに指定されている場合、1つ目のWMTSで指定されたsnap_to_tile_scaleのみがtrueに設定され、他はすべてfalseにリセットされます。これは論理的な動作です。たとえば、そのような2つのテーマで、この属性が両方ともtrueに設定されていて、それぞれが異なる一連のWMTSタイル・スケールを使用する場合(所有する機関が異なり、使用する一連のスケールも異なる2台のマップ・サーバーなど)、1つ目のテーマは最も近いタイル・スケールを、タイル・データの取得と最終的なリクエスト・スケールに使用します。同時に、2つ目のテーマはsnap_to_tile_scalefalseにリセットし、tile_resizing_optionに従って独自のタイル・スケールを検出した後、1つ目のテーマのタイル・スケールに合せて、タイルのサイズを変更する必要があります。

  • style属性: マップ・ビジュアライゼーション・コンポーネントでは現在使用されていません。デフォルトは文字列defaultです。

  • tile_resizing_option属性(オプション): 文字列unbiasedexpand_biasedまたはcontract_biased。デフォルトはunbiasedです。snap_to_tile_scaletrueに設定されている場合、tile_resizing_optionは無視されます。

    詳細は、「tile_resizing_option属性の動作」を参照してください。

  • timeout属性(オプション): リクエストのタイムアウトを指定する整数(ミリ秒単位)。デフォルトは0です(つまり、リクエストがレスポンスを待機する時間は制限されません)。

    この属性を指定すると、指定した時間内にマップ・サーバーが応答しなかった場合はマップ・リクエストが終了し、リソースが解放されます。たとえば、30000 (30,000ミリ秒、つまり30秒)を指定します。

  • top_left_corner_x属性(オプション): WMTSサーバーによって提供される、タイル画像全体を含むエクステントの左上隅を示すx座標値。指定しなかった場合、WMTSサーバーから取得された値が使用されます。この属性を指定する場合は、top_left_corner_y属性も指定します。

  • top_left_corner_y属性(オプション): WMTSサーバーによって提供される、タイル画像全体を含むエクステントの左上隅を示すy座標値。指定しなかった場合、WMTSサーバーから取得された値が使用されます。この属性を指定する場合は、top_left_corner_x属性も指定します。

  • version属性: WMTSサーバーによって実装されたWMTS仕様のバージョン。

関連項目:

マップ・ビジュアライゼーション・コンポーネント用のWMTSサービス、WMTS操作およびマップ・ビジュアライゼーション・コンポーネント用のWMTSサービスの準備の詳細は、マップ・ビジュアライゼーション・コンポーネントでのOGC WMTSのサポートを参照してください。

2.3.8.1 tile_resizing_option属性の動作

WMTSテーマのsnap_to_tile_scale属性がfalse (デフォルト)に設定されているか省略されている場合は、常にリクエスト・スケールが適用され、tile_resizing_option属性の値(指定した値またはデフォルト値)を使用して適切なタイル・スケールが選択されます。ただし、snap_to_tile_scaleがtrueの場合、tile_resizing_option属性の値は無視されます。

tile_resizing_option属性の値には、文字列unbiased (デフォルト)、expand_biasedまたはcontract_biasedを指定できます。

  • unbiased (デフォルト): 最も近いレベルのタイル・スケールを選択した後、タイル・イメージを拡大または縮小してリクエスト・スケールのマップを生成します。たとえば図2-10では、リクエスト・スケールの範囲が1:3000から1:1500の場合、常に1:2000を使用してマップが生成されます。

    図2-10 tile_resizing_optionのunbiased値

    図2-10の説明が続きます
    「図2-10 tile_resizing_optionのunbiased値」の説明
  • expand_biased: リクエスト・スケールのマップを生成するための適切なタイル・スケールを識別する際に、タイル画像の拡大によるリクエスト・マップのレンダリングに関するプリファレンスを使用します。つまり、リクエスト・スケールのマップを生成する際に、より小さいタイル・スケールをプリファレンスとして使用します。現在実装されている拡大率のプリファレンスは8:2です。たとえば図2-11では、リクエスト・スケールの範囲が1:2400から1:1200の場合、タイル・スケール1:2000を使用してリクエスト・マップが生成されます。

    図2-11 tile_resizing_optionのexpand_biased値

    図2-11の説明が続きます
    「図2-11 tile_resizing_optionのexpand_biased値」の説明
  • contract_biased: リクエスト・スケールのマップを生成するための適切なタイル・スケールを識別する際に、タイルの縮小によるリクエスト・マップのレンダリングに関するプリファレンスを使用します。つまり、リクエスト・スケールのマップを生成する際に、より大きいタイル・スケールをプリファレンスとして使用します。現在実装されている縮小率のプリファレンスは8:2です。たとえば図2-12では、リクエスト・スケールの範囲が1:3600から1:1800の場合、タイル・スケール1:2000を使用してリクエスト・マップが生成されます。

    図2-12 tile_resizing_optionのcontract_biased値

    図2-12の説明が続きます
    「図2-12 tile_resizing_optionのcontract_biased値」の説明

「snap_to_tile_scaleおよびtile_resizing_option属性の使用に関するガイドライン」も参照してください。

2.3.8.2 snap_to_tile_scaleおよびtile_resizing_option属性の使用に関するガイドライン

この項では、snap_to_tile_scaleおよびtile_resizing_option属性を使用して、より質の高いマップを生成するための一般的なガイドラインを示します。マッピングには様々な用途があるため、使用中のドメインに関する知識を生かし、その要件に最も合った属性値を設定することもできます。

マップの質が最も高いのは元のタイル・マップであるため、可能なかぎりsnap_to_tile_scaletrueに設定して、リクエスト・スケールのかわりに、最も近いタイル・スケールを使用します。

ただし、リクエスト・スケールを使用することが必須である場合は、属性を設定する際に、次のことを考慮します。

  • tile_resizing_optionの値を設定する場合、snap_to_tile_scale属性を省略するか、この属性をfalse (デフォルト)に設定します。snap_to_tile_scaletrueに設定されている場合、リクエスト・スケールは適用されず、かわりに最も近いタイル・スケールが使用されます。

  • マップが注釈と細い線形地物を含む地形マップである場合、expand_biasedオプションを使用できます。

  • マップが土地被覆マップなどのテーマ・マップである場合、contract_biasedオプションを使用できます。

  • マップが衛星画像である場合、unbiasedまたはcontract_biasedオプションを使用できます。

tile_resizing_optionの値については、次のことに注意してください。

  • 通常は、contract_biasedオプションを指定すると、より詳細なマップを生成できますが、これらのマップはexpand_biasedオプションを指定した場合よりも多くのタイルを必要とするため、タイルの取得に時間がかかります。

  • リクエスト・スケールが適用される際に(snap_to_tile_scale属性がfalseに設定されている場合)、リクエスト・スケールがタイル・スケールとほぼ等しい場合、tile_resizing_optionに指定された値とは無関係に、同じ操作(拡大または縮小)が実行されます。たとえば、「tile_resizing_option属性の動作」の図では、リクエスト・スケールが1:1900の場合、unbiasedexpand_biasedまたはcontract_biasedのうち、いずれのオプションが指定されていても、1:2000のタイル・マップが取得され、そのマップが、リクエスト・マップを1:1900のマップ・スケールでレンダリングするために拡大されます。同様に、リクエスト・スケールが1:2100の場合も、1:2000のタイル・マップが取得され、そのマップが、リクエスト・マップを1:2100のスケールでレンダリングするために縮小されます。

例2-30は、snap_to_tile_scale="true"が指定された動的WMTSテーマを含むリクエストを示しています。

例2-30 動的WMTSテーマを含むリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="OpenGeo wmts theme (bluemarble)" 
  datasource="mvdemo" 
  width="1024" 
  height="900" 
  mapfilename="Bluemarble" 
  format="PNG_STREAM">
  <center size="80.0">
    <geoFeature>
      <geometricProperty typeName="center">
        <Point>
          <coordinates>-112, 42.0</coordinates>
        </Point>
      </geometricProperty>
    </geoFeature>
  </center>
<themes>
  <theme name="wmtstheme: Earth" timeout="10000" snap_to_tile_scale="true">
    <wmts_gettile_request>
      <service_url> http://maps.opengeo.org/geowebcache/service/wmts </service_url>
      <version> 1.0.0 </version>
      <layer> bluemarble </layer>
      <matrix_set_id> EPSG:4326 </matrix_set_id>
      <format> image/png </format>
      <style> default </style>
      <top_left_corner_x> -180.0 </top_left_corner_x>
      <top_left_corner_y> 90.0 </top_left_corner_y>
    </wmts_gettile_request>
  </theme></themes>
</map_request>

2.3.8.3 事前定義済WMTSテーマの作成

事前定義済WMTSテーマを作成するには、USER_SDO_THEMESビュー(「xxx_SDO_THEMESビュー」を参照)に行を挿入することにより、WMTSテーマの定義をデータベースに格納する必要があります。例2-31では、WMTSテーマの定義を格納します。

例2-31において、earth_imageはWMTSテーマの名前、table_spaceholdergeom_col_spaceholderはUSER_SDO_THEMESビューのBASE_TABLEおよびGEOMETRY_COLUMN列に値を格納するためのダミー値です。スタイリング・ルール情報にはservice_urllayermatrix_set_idformatおよびstyle情報が含まれます。top_left_corner_xおよびtop_left_corner_y属性は指定されていないため、デフォルトではWMTSサーバーから取得した値が使用されます。

例2-32は、例2-31で作成された事前定義済テーマを使用するマップ・リクエストを示しています。

例2-31 事前定義済WMTSテーマの作成

INSERT INTO user_sdo_themes  VALUES (
'earth_image',
'Opengeo.org demo',
'table_spaceholder',
'geom_col_spaceholder',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wmts">
    <version> 1.0.0 </version>
    <service_url> http://maps.opengeo.org/geowebcache/service/wmts </service_url>
    <layer> bluemarble </layer>
    <matrix_set_id> EPSG:4326 </matrix_set_id>
    <format> image/png </format>
    <style> default </style>
</styling_rules>');

例2-32 事前定義済WMTSテーマを含むマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request 
  title="OpenGeo predefined wmts theme" 
  datasource="mvdemo" 
  width="1024" 
  height="768"   mapfilename="Bluemarle: Earth" 
  format="PNG_STREAM">
  <center size="10.0">
    <geoFeature>
      <geometricProperty typeName="center">
        <Point>
          <coordinates>-75.0,42.0</coordinates>
        </Point>
      </geometricProperty>
    </geoFeature>
  </center>
<themes>
  <theme name="earth_image" />
</themes>
</map_request>

2.3.9 カスタム・ジオメトリ・テーマ

カスタム・ジオメトリ・テーマは、外部空間データ(Shapefileなど、Oracle Spatial以外のネイティブ形式の空間データ)に関連付けられます。カスタム・ジオメトリ・テーマは空間プロバイダ・クラスを使用してネイティブ・データを取得します。また、外部プロバイダは空間データ・プロバイダ・プラグイン・メカニズムを使用する必要があります。マップ・ビジュアライゼーション・コンポーネントには、外部プロバイダが実装する必要がある空間プロバイダ・インタフェース・クラスが用意されています。このインタフェース実装には、次のメソッドが含まれます(一部のメソッドは、Map Builderなどのアプリケーションのユーザー・インタフェースで使用できる情報を主に提供します)。

public interface SDataProvider
{
  /**
   * Returns the initialization parameters for the provider.
   * @return String[] - array with initialization parameter names
   */
  public String[] getInitParameterNames();
 
  /**
   * Returns runtime parameter names. Runtime parameters are additional parameters
   * that the provider may use when retrieving the data objects.
   * @return String[] - array with runtime parameter names
   */
  public String[] getRuntimeParameterNames();
 
  /**
   * Returns a value that gives a hint for the runtime parameter value.
   * This hin can be used as a tooltip in user intefaces.
   * @param runtimeParam
   * @return   a String representing the hint value, or null if no hint is available
   */
  public String getRuntimeParameterHintValue(String runtimeParam);
 
  /**
   * This method is used to set the initialization parameters for the specific
   * data provider.
   * @param params - parameters to be used by the initialization method.
   * @return boolean - true if success; false otherwise
   */
  public boolean init(Properties params);
 
  /**
   * This method creates and returns an instance of SDataSet which contains
   * all the Spatial data produced by this provider, based on
   * the given parameters for a specific incoming map request.
   * <br>
   * The map visualization component calls this method on the custom theme producer implementation.
   *
   * @param queryWin the search area to retrieve spatial objects. The window is
   * assumed to be already on data provider spatial reference system.
   * @param nonSpatialColumns - the list of attributes that will return with objects.
   * @param queryCondition - query condition expression (may have binding parameters).
   * @param bindingParameters - binding variables for query condition with binding parameters.
   * @param params  - parameters that the provider may use to retrieve the data.
   * @return SDataObject - an instance of SDataSet class; null if failed.
   */
  public SDataSet buildDataSet(Rectangle2D queryWin,String []nonSpatialColumns,
                               String queryCondition,Object[] bindingParameters,
                                Properties params);
 
  /**
   * Returns the list of existing attributes for this data provider.
   * @param params  parameters that the provider may use to get the attribute list.
   * @return Field[] - array of attributes for this provider.
   */
  public Field[] getAttributeList(Properties params);
 
  /**
   * Returns the data set spatial extent MBR.
   * @param params  parameters that the provider may use to get the data extents
   * @return Rectangle2D - data spatial extent for this provider.
   */
  public Rectangle2D getDataExtents(Properties params);
 
 /**
   * Returns if provider can build spatial indexes.
   * If true, means that buildSpatialIndex method can be called.
   * @return
   */
  public boolean canBuildSpatialIndex();
 
  /**
   * Builds a spatial index on the data set.
   * @param params  parameters that the provider may use to build the spatial index.
   * @return boolean - true if saptial index creation is successful.
   */
  public boolean buildSpatialIndex(Properties params);
 
  /**
   * Clears provider internal caches (if provider implement caches).
   */
  public void clearCache();
 
 
  /**
   * Returns the parameter names that can be used to query for spatial tables.
   * Can be used more as information for user interfaces.
   * @return
   */
  public String[] getParametersToQuerySpatialMetadata();
 
  /**
   * Returns the spatial tables and spatial columns.
   * @param params must define the parameters returned from
   * getParametersToQuerySpatialMetadata.
   * @return  an array list defining the table name(index [0])
   *          and spatial column (index[1])
   */
  public String[][] getSpatialTables(Properties params);
}

initメソッドおよびbuildDataSetメソッドは必ず実装する必要があります。その他のメソッドの実装は空でもかまいませんが、Oracle Map Builderツールなどのアプリケーションではこれらのメソッドを利用して、空間データ・プロバイダに関する情報を処理することが可能です。プロバイダは、各自に固有の空間索引付けメカニズムを実装できます。たとえば、マップ・ビジュアライゼーション・コンポーネントにはシェイプファイル・プロバイダ用の実装が用意されており、buildSpatialIndexメソッドによって、.oixという拡張子が付いた索引付けファイルがshapefileディレクトリに作成されます。カスタム空間データ・プロバイダの作成および登録に、マップ・ビジュアライゼーション・コンポーネントでサンプル空間プロバイダを実装および登録する方法の例が記載されています。

カスタム・ジオメトリ・テーマを含むマップ・ビジュアライゼーション・コンポーネントのネイティブ・データをレンダリングするには、次のステップを実行します。

  1. プラグイン・インタフェースに基づく空間プロバイダ・クラスを実装し、そのプロバイダの実装を含むjarファイルを生成します。このjarファイルを、マップ・ビジュアライゼーション・コンポーネントのCLASSPATH定義に含まれるディレクトリにコピーします。
  2. プロバイダをマップ・ビジュアライゼーション・コンポーネント構成に登録します。マップ・ビジュアライゼーション・コンポーネントには、ESRIシェイプファイルにアクセスするためのシェイプファイル・プロバイダ、OGRでサポートされるデータ形式にアクセスするためのGDAL-OGRプロバイダ、およびTeradataデータベースに格納されているデータにアクセスするためのTeradataプロバイダが付属しています。(これらの環境における空間データの処理の詳細は、GDAL-OGRとTeradataのドキュメントを参照してください。)GDAL-OGRライブラリgdal.jarと、Teradataライブラリterajdbc4.jarおよびtdgssconfig.jarは、サーバーのクラスパスに配置されている必要があります。マップ・ビジュアライゼーション・コンポーネント構成ファイルの登録セクションは、次のようになります。
    <s_data_provider
      id="shapefileSDP"
      class="oracle.sdovis.ShapefileDataProvider"
      >
      <parameters>
        <parameter name="datadir" value="/temp/data" />
      </parameters>
    </s_data_provider>
    

    各プロバイダにはid名とclass名の定義が必要です。idはプロバイダを識別する一意の名前で、classはJavaクラスの実装に対応します。<parameters>要素では、プロバイダの初期化パラメータを定義します。

    シェイプファイル・プロバイダの場合、初期化パラメータdatadirが、マップ・ビジュアライゼーション・コンポーネントによってデータ・ファイルが検索される場所を定義するため、これはマップ・ビジュアライゼーション・コンポーネントがアクセス可能なディレクトリである必要があります。マップ・ビジュアライゼーション・コンポーネントは、まずテーマ定義情報に基づいてデータファイルを探します。テーマ定義に定義されたデータ・パスにアクセスできない場合は、構成ファイルに定義されたデータ・パスを探します。

  3. 外部空間データ・プロバイダに関連付けられたカスタム・ジオメトリ・テーマを作成します。

例2-33 動的カスタム・ジオメトリ・テーマの定義

<theme name="custom_geom_theme_1" >
   <custom_geom_theme
     provider_id="shapefileSDP"
     srid="26986"
     render_style="C.RED"
     label_column="parcel_id"
     label_style="T.CITY NAME"
     datasource="mvdemo">
   <parameters>
    <parameter name="filename" value="/lbs/demo/shapefile/parcel.shp"/>
   </parameters>
  </custom_geom_theme>
</theme>

例2-34 事前定義済カスタム・ジオメトリ・テーマの格納

insert into user_sdo_themes values ( 
'SHAPE_THEME', 
'Shapefile theme', 
'CUSTOM_TABLE', 
'GEOMETRY', 
'<?xml version="1.0" standalone="yes"?> 
<styling_rules theme_type="geom_custom" srid="26986" provider_id="shapefileSDP"> 
  <rule> 
    <features style="C.RED"> </features> 
    <label column="PARCEL_ID" style="T.CITY NAME"> 1 </label> 
  </rule> 
  <parameters> 
    <parameter name="filename" value="/lbs/demo/shapefile/parcel.shp"/> 
  </parameters> 
</styling_rules>' 
);

外部空間データはOracleデータベースの外側にありますが、このデータをレンダリングするためにはデータベース接続が必要です。データベースは、データのレンダリングやラベル付けに使用されるスタイリング情報の他、テーマに関連するメタデータ情報を格納するために使用されます。

例2-33は、動的カスタム・ジオメトリ・テーマの定義を示しています。<custom_geom_theme>は、カスタム・ジオメトリ・テーマを指定するXML要素です。<parameters>要素では、プロバイダによって使用されるランタイム・パラメータを定義します。この場合は"filename"がランタイム・パラメータで、"/lbs/demo/shapefile/parcel.shp"がファイル・パスを定義しています。マップ・ビジュアライゼーション・コンポーネントは最初にこのファイル・パス定義を使用しますが、このパスにアクセスできない場合は、シェイプファイル空間プロバイダの構成ファイルに定義されているデータ・ディレクトリの値を使用します。

使用可能な空間プロバイダ用のランタイム・パラメータは、次のとおりです(Map Builderにはパラメータ値を暗号化するためのオプションが用意されています)。

  • シェイプファイル・プロバイダの場合:

    • filename: ディスク上のシェイプファイル(.shp)へのフルパス

  • GDAL-OGRの場合:

    • datasource: OGRデータソースを示す全文字列この文字列は、データソースの形式によって異なります。(GDAL-OGRでサポートされる様々な形式への接続の詳細は、GDAL-OGRのドキュメントを参照してください。)

      ファイル形式の場合、このパラメータの値は通常、アーカイブへのフルパスです。

      データベース接続の場合、空間表と空間列にアクセスするための全接続文字列を入力します。たとえば、1つの空間列を含むPostgis表名STATESの場合、値は次のようになります。

      datasource = PG:dbname='template_postgis' host='localhost' port='5432' user='postgres' password='manager' tables=states
      
  • Teradataプロバイダの場合:

    • jdbcurl: TeradataデータベースへのJDBC接続。文字列の形式は次のとおりです。

      jdbc:teradata://<host_address>/DATABASE=<db_name>,DBS_PORT=<db_port>,TMODE=ANSI,CHARSET=UTF8
      
    • user: データベース・ユーザー。

    • password: データベース・パスワード。

    • containerds: オプション。アプリケーション・サーバーで定義されたTeradataコンテナ・データソースの名前(WebLogicなど)。定義されている場合、この値がまず、マップ・ビジュアライゼーション・コンポーネントでjdbcurl値のかわりに使用されます。

    • basetable: 空間表の名前。

    • geomcolumn: 空間列の名前。

    • fetchsize: オプション。プリフェッチする行の数。

動的カスタム・ジオメトリ・テーマに対して使用可能な属性は次のとおりです。

  • provider_idでは、空間プロバイダを指定します。

  • datasourceでは、Oracleデータベース接続を指定します。この接続は、空間データをレンダリングするためのスタイルを取得するときに使用されます。

  • sridでは、空間参照システム(Oracle Spatialの座標系)を指定します。

  • render_styleでは、地物をレンダリングするときに使用されるスタイルを指定します。

  • label_columnでは、テーマで使用されるラベル・テキストを含む列の名前を指定します。

  • label_styleでは、地物にラベル付けするときに使用されるスタイルを指定します。

  • feature_attributesでは、拡張スタイルで使用可能な追加の属性を指定します。

  • key_columnでは、Oracle Mapsアプリケーションで使用できるキー属性を指定します。

  • query_conditionでは、機能選択をフィルタ処理するためのWHERE句を指定します。シェイプファイル・プロバイダでは、問合せ条件がサポートされていません。ただし、OGRプロバイダを使用すると、問合せ条件を含むシェイプファイルをレンダリングできます。問合せ条件の式では、バインディング・パラメータを定義できます(attr = :1など)。

例2-34は、事前定義済カスタム・ジオメトリ・テーマの定義を格納する方法を示しています。GEOMETRYをジオメトリ列名として使用し、実表名には任意の名前を指定できます。"theme_type=geom_custom"属性は、テーマをカスタム・テーマとして識別します。<rule>要素は、Oracle Spatialジオメトリ・テーマのものと同様に機能します。<parameters>要素では、プロバイダが受け入れるランタイム・パラメータを定義します。シェイプファイル・プロバイダの場合、ランタイムparameterファイル名は、シェイプファイル・データへのパスを定義します。

事前定義済カスタム・ジオメトリ・テーマのランタイム・パラメータ・セクションは、map_request内にパラメータを指定することによってオーバーライドできます。たとえば、<map_request>要素に次のようなパラメータを含めることができます。

<theme name="CUSTOM_THEME" >
  <parameters>
    <parameter name="filename" value="/lbs/demo/shapefile/counties.shp"/>
  </parameters>
</theme>

2.3.10 注釈テキスト・テーマ

Oracle Spatialでは、『OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture』で規定されている注釈テキストをサポートしています。この仕様では、注釈テキストは、地理関連データまたはアドホック・データ、およびプロセス関連情報を表示可能なテキストとして含む、単純に挿入されたテキストとして定義されています。このテキストは、エディタまたは単純な地図で表示するために使用できます。通常、完全な地図製作における品質としては不十分ですが、あらゆるアプリケーションで必要となるテキスト機能をほぼ果たすことができます。

Oracle Spatialでは、注釈テキストの格納用としてST_ANNOTATION_TEXTオブジェクト型を使用できます。また、注釈テキストに関連するメタデータの格納用としてUSER_ANNOTATION_TEXT_METADATAビューとALL_ANNOTATION_TEXT_METADATAビューを使用できます。注釈テキストのサポートの詳細は、『Oracle Spatial開発者ガイド』を参照してください。

各注釈テキスト・オブジェクトは1つ以上の要素で構成され、各要素は次の項目によって定義されます。

  • 値: 要素に関連付けられるテキスト。値がNULLの場合、テキストは最初のNULL以外の先行する要素の値から取得されます。先行する要素の値がいずれもNULLである場合は、メタデータから取得されたテキスト式の値がテキストになります。

  • 位置: 注釈テキスト・オブジェクトに関連付けられる空間的位置。

  • 引出し線: 注釈テキスト・オブジェクトに関連付けられる線形地物。

  • 属性: テキストの表示に使用される図形属性。値がNULLの場合、図形属性はメタデータの属性値から取得されます。

メタデータ・ビューのテキスト式は、次のいずれかになります。

  • 列の名前。

  • 列名に適用される関数。たとえば: substr(my_col,1,3)

  • 連結した複数の列名。たとえば: column_1 || column_2 || column_3

  • 列名とは無関係のテキスト値。この場合、NULL値を持つテキスト要素に使用される単純なテキスト文字列とみなされます。

マップ・ビジュアライゼーション・コンポーネントの注釈テキスト・テーマは、ST_ANNOTATION_TEXT型の列を持つデータベース表に関連付けられます。各注釈テキスト要素について、マップ・ビジュアライゼーション・コンポーネントでは次のものがレンダリングされます。

  • 注釈テキスト要素の値(NULL以外の場合)。要素の属性に基づきリアルタイムに作成されるテキスト・スタイルを使用して、文字列としてレンダリングされます。

  • 注釈テキスト要素に関連付けられた引出し線(NULL以外の場合)。この場合、ユーザーは引出し線をレンダリングするためのマップ・ビジュアライゼーション・コンポーネント・スタイルを選択できます。

各注釈テキスト要素にはジオメトリによって表されるエンベロープが含まれており、空間索引付けに使用されます。そのため、マップ・ビジュアライゼーション・コンポーネントの注釈テキスト表で空間索引付けを使用するには、次を実行する必要があります。

  1. USER_ANNOTATION_TEXT_METADATAビューに、注釈テキスト表の名前および注釈テキスト列(つまり、ST_ANNOTATION_TEXT型の列)のPRIVATEENVELOPE属性を指定する行を挿入します。

    次の例では、TEXTOBJという注釈テキスト列を含むANNOTEXT_TABLEという名前の表に行を挿入しています。

    INSERT INTO USER_SDO_GEOM_METADATA 
      VALUES (
      'ANNOTEXT_TABLE',
      'TEXTOBJ.PRIVATEENVELOPE',
      SDO_DIM_ARRAY(
        SDO_DIM_ELEMENT('X', 0.0, 10.0, 0.0005),
        SDO_DIM_ELEMENT('Y', 0.0,10.0, 0.0005)
         ),
      null   -- SRID
    );
    
  2. 指定した注釈テキスト表の注釈テキスト・エンベロープに空間索引を作成します。

    次の例では、ANNOTEXT_TABLEという表の注釈エンベロープにANNO_TEXT_IDXという空間索引を作成しています。

    CREATE INDEX anno_text_idx ON annotext_table(textobj.privateenvelope)
      INDEXTYPE IS mdsys.spatial_index;
    

有効なSRID情報を持つテーマの場合、メタデータ・ベース・マップ・スケールを定義すると、要素のテキスト・サイズは、マップのズームインやズームアウトにあわせて変更されます。

例2-35では、マップ・ビジュアライゼーション・コンポーネントの事前定義済注釈テキスト・テーマのスタイリング・ルールを定義しています。構成は他のマップ・ビジュアライゼーション・コンポーネント・テーマと同様です。現在のところ、各注釈テーマに対して処理されるスタイリング・ルールは1つのみです。この例では、テーマのタイプはannotation、引出し線のレンダリングに使用される地物スタイルはL.PHで、問合せ条件(id = 1 or id = 2)が最後の問合せに追加されます。

例2-36は、動的注釈テキスト・テーマのテーマ定義を示しています。定義されるパラメータは次のとおりです。

  • datasource: データソース名

  • jdbc_srid: 空間参照ID

  • annotation_table: 注釈テキスト表

  • annotation_column: 注釈テキスト列

  • leaderline_style: 使用される引出し線のスタイル

例2-37は、例2-36と類似していますが、ここでは、annotation_column列にNULL値が含まれる場合にtextexpr_columnの値が注釈に使用されるという動作が追加されています。例2-37では、ANNOTATION_TABLE表にDEFAULT_ANNOTATIONという列(例2-38で使用)が含まれているものとします。この追加列は、textexpr_column属性とSELECT文に指定されます。

例2-38では、注釈テキスト表を作成し、マップ・ビジュアライゼーション・コンポーネントで使用できるように準備します。

例2-35 事前定義済注釈テキスト・テーマのスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="annotation">
    <rule>
        <features style="L.PH"> (id = 1 or id = 2) </features>
  </rule>
</styling_rules>

例2-36 動的注釈テキスト・テーマの定義

<themes>
  <theme name="theme1" >
     <jdbc_annotation_query
       datasource="tilsmenv"
       jdbc_srid="0"
       annotation_table="ANNOTEXT_TABLE"
       annotation_column="textobj"
       leaderline_style="L.PH"
       >select textobj from annotext_table
     </jdbc_annotation_query>
   </theme>
</themes>

例2-37 デフォルト注釈列を含む動的注釈テキスト・テーマ

<themes>
  <theme name="theme1" >
     <jdbc_annotation_query
       datasource="tilsmenv"
       jdbc_srid="0"
       annotation_table="ANNOTEXT_TABLE"
       annotation_column="textobj"
       textexpr_column="default_annotation"
       leaderline_style="L.PH"
       >select textobj, default_annotation from annotext_table
     </jdbc_annotation_query>
   </theme>
</themes>

例2-38 注釈テキスト・データを生成するためのスクリプト

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 100
SET PAGESIZE 10000
SET SERVEROUTPUT ON SIZE 5000
SET LONG 20000
SET TIMING ON
call dbms_java.set_output(5000);
 
---------------------------------------------------------------------
-- Create an annotation text table (a table that has a
-- column of ST_ANNOTATION_TEXT object type), and insert some records.
---------------------------------------------------------------------
 
create table annotext_table (
  id number, 
  default_annotation varchar2(32), 
  textobj ST_ANNOTATION_TEXT);
 
insert into annotext_table values (1,'Text_1',
ST_ANNOTATION_TEXT(
   ST_ANNOTATIONTEXTELEMENT_ARRAY(
          ST_ANNOT_TEXTELEMENT_ARRAY(
                ST_ANNOTATIONTEXTELEMENT('Sample Label 1',
                   SDO_GEOMETRY(2001, null, sdo_point_type(1,1,null),null,null),
                   SDO_GEOMETRY(2002,null,null,
                       SDO_ELEM_INFO_ARRAY(1,2,1),
                       SDO_ORDINATE_ARRAY(0,0, 1,1)), NULL)))));
 
insert into annotext_table values (2,'Text_2',
ST_ANNOTATION_TEXT(
   ST_ANNOTATIONTEXTELEMENT_ARRAY(
          ST_ANNOT_TEXTELEMENT_ARRAY(
                ST_ANNOTATIONTEXTELEMENT('Sample Label 2',
                   SDO_GEOMETRY(2001,null,sdo_point_type(10,10,null),null,null),
                   SDO_GEOMETRY(2002,null,null,
                       SDO_ELEM_INFO_ARRAY(1,2,1),
                       SDO_ORDINATE_ARRAY(5,10, 10,10)), NULL)))));
 
insert into annotext_table values (3, 'Text_3',
ST_ANNOTATION_TEXT(
   ST_ANNOTATIONTEXTELEMENT_ARRAY(
          ST_ANNOT_TEXTELEMENT_ARRAY(
                ST_ANNOTATIONTEXTELEMENT(null,
                   SDO_GEOMETRY(2002, null, null,
                       SDO_ELEM_INFO_ARRAY(1,2,1),
                       SDO_ORDINATE_ARRAY(2,5,4,5,6,5)),
                   SDO_GEOMETRY(2002,null,null,
                       SDO_ELEM_INFO_ARRAY(1,2,1),
                       SDO_ORDINATE_ARRAY(4,3, 4,5)),
'<?xml version="1.0" encoding="UTF-8" ?>
<textAttributes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:noNamespaceSchemaLocation="../../annotation_text.xsd">
 <textStyle fontFamily="Dialog" fontSize="14" fill="blue"/>
 <textlayout/>
</textAttributes>'
)))));
 
---------------------------------------------------------------------
-- Register the annotation text table in the user metadata view.
---------------------------------------------------------------------
 
insert into USER_ANNOTATION_TEXT_METADATA values(
  'ANNOTEXT_TABLE', 'TEXTOBJ', null, null, null);
 
---------------------------------------------------------------------
-- Update the metadata information.
---------------------------------------------------------------------
 
update user_annotation_text_metadata set
text_expression='default_annotation',
text_attributes =
'<?xml version="1.0" encoding="UTF-8" ?>
<textAttributes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:noNamespaceSchemaLocation="../../annotation_text.xsd">
 <textStyle fontFamily="Serif" fontSize="14" fill="#ff0000"/>
 <textlayout/>
</textAttributes>';
 
---------------------------------------------------------------------
-- Register the annotation text geometry envelope on the user
-- metadata view of geometries.
---------------------------------------------------------------------
 
INSERT INTO USER_SDO_GEOM_METADATA
 VALUES (
 'ANNOTEXT_TABLE',
 'TEXTOBJ.PRIVATEENVELOPE',
 SDO_DIM_ARRAY(
   SDO_DIM_ELEMENT('X', 0.0, 10.0, 0.0005),
   SDO_DIM_ELEMENT('Y', 0.0,10.0, 0.0005)
    ),
 null   -- SRID
);
 
---------------------------------------------------------------------
-- Create a spatial index on the annotation text envelope.
---------------------------------------------------------------------
 
create index anno_text_idx on annotext_table(textobj.privateenvelope)
  indextype is mdsys.spatial_index;
 
-------------------------------------------------------------------------------
-- Insert a predefined theme into the map visualization component's theme view.
-------------------------------------------------------------------------------
 
INSERT INTO user_sdo_themes  VALUES (
  'ANNOTEXT_THEME',
  'Annotation text',
  'ANNOTEXT_TABLE',
  'TEXTOBJ',
  '<?xml version="1.0" standalone="yes"?>
   <styling_rules theme_type="annotation">
     <rule >
      <features style="L.PH"> </features>
     </rule>
   </styling_rules>' );
 
commit;

2.3.11 線形参照システム(LRS)テーマ

LRSテーマは、Oracle Spatialの線形参照システム(LRS)を使用して定義されている地物をビジュアル化する場合に役立つ特殊なマップ・ビジュアライゼーション・コンポーネント・テーマです(『Oracle Spatial開発者ガイド』を参照)。

LRSテーマには、2つの表が必要です。それらは、LRSジオメトリ列を含むLRS表と、1つまたは2つのメジャー列を含む結合表です。点イベントには、結合表に1つのメジャー列が必要です(たとえば、メジャーm1に配置された道路標識およびメジャーm2で発生した事故)。一方、線形イベントには2つのメジャー列が必要です。開始メジャーに1つおよび終了メジャーに1つです(たとえば、メジャーm1からメジャーm2までは道路の舗装状態が悪く、メジャーn1からメジャーn2までは状態がよい)。各イベントは、結合表内の1つの行に格納されます。

LRSテーマを定義した後は、テーマの使用時にマップ・リクエストにテーマ名のみを指定します。マップ・ビジュアライゼーション・コンポーネントにより自動的にテーマの定義が検索され、これら2つの指定された表を結合する問合せが作成されます。また、LRSファンクションが内部で使用され(点イベントの場合はSDO_LRS.LOCATE_PT、線形イベントの場合はSDO_LRS.CLIP_GEOM_SEGMENT)、ジオメトリ・データが生成されます。マップ・ビジュアライゼーション・コンポーネントでは、テーマのスタイリング・ルールに従って、点または線形セグメントがそれらの属性データとともにレンダリングされます。

事前定義済LRSテーマを作成するには、USER_SDO_THEMESビューに行を挿入することにより、LRSテーマの定義をデータベースに格納する必要があります。例2-39では、LRS_THEMEというLRSテーマの定義を格納します。

例2-39では、LRS表の名前(GEOM、HIGHWAYおよびROUTENの3列が含まれるINTERSTATES_LRS)はUSER_SDO_THEMESビューのBASE_TABLE列に、LRSジオメトリ列(GEOM)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

LRSテーマの<styling_rules>要素では、このテーマがLRSテーマとして認識されるように、theme_typelrsとする必要があります。

オプションのkey_column属性を省略すると、データベースからデータをフェッチするためのクエリー文字列が作成されるとき、キー列は含まれません。これは、ROWID列がデフォルトのキー列である事前定義済ジオメトリ・テーマとは異なります。

子要素の<rule><hidden_info><join_table>および<join_columns>は、<styling_rules>要素内に含めることができます。子要素の<join_table>および<join_columns>は、LRSテーマに固有です。

LRSテーマの<rule>要素は事前定義済テーマでの定義に類似していますが、その子要素である<features>では、asis属性の値がtrueに設定されている必要があります(asis="true")。<styling_rules>要素には、0個、1個またはそれ以上の<rule>要素を含めることができます。

<hidden_info>要素は、LRSテーマではオプションです。これはOracle Mapsアプリケーションでの使用のために定義されています。LRS表または結合表のいずれか一方、あるいはその両方からの属性のリストを指定します。

<join_table>要素のname属性は、結合表の名前を指定します(この例ではpavement_condition)。この例の結合表には、id、seg_id、condition、from_measure、to_measureなどの列が含まれています。結合表の線形イベントの定義に2つのメジャー列を使用する場合は、start_measure属性およびend_measure属性(この例では、from_measureおよびto_measure)を指定する必要があります。これらは結合表のメジャー列の名前を示します。結合表に点イベントのメジャーが1つ含まれる場合、この<join_table>要素にはmeasure属性が指定されます。

<join_columns>要素には、lrs_table_column属性およびjoin_table_column属性を指定する必要があります。lrs_table_columnはLRS表からの列を定義し、join_table_columnは、これらの2つの表を結合する結合表からの列を指定します。

例2-40は、例2-39の事前定義済LRSテーマを使用するマップ・リクエストを示しています。

関連項目:

LRSテーマに固有の要素および属性(<join_table>および<join_columns>要素など)の詳細は、「スタイル、テーマ、ベース・マップおよびマップ・タイル層のためのXML形式」を参照してください。

例2-39 LRSテーマの作成

INSERT INTO user_sdo_themes (name, description, base_table, geometry_column, styling_rules)
VALUES (
'LRS_THEME',
'LRS theme example with 3 rules, 2 measure columns',
'INTERSTATES_LRS',
'GEOM',
'<?xml version="1.0" standalone="yes"?>
<styling_rules key_column="id" theme_type="lrs">
  <rule>
    <features  asis="true">
      condition=''good''
    </features>
    <label column="condition" style="T.STREET NAME"/>  
    <rendering>
      <style name="L.PTH"/>
    </rendering>
  </rule>
  <rule>
    <features  asis="true">
      condition=''fair''
    </features>
    <label column="condition" style="T.STREET NAME"/>  
    <rendering>
      <style name="L.SH"/>
    </rendering>
  </rule>
  <rule>
    <features  asis="true">
      condition=''poor''
    </features>
    <label column="condition" style="T.STREET NAME"/>  
    <rendering>
      <style name="L.MAJOR STREET"/>
    </rendering>
  </rule>
  <hidden_info>
    <field column="highway"      name="highway name"/>
    <field column="routen"       name="highway number"/>
    <field column="condition"    name="pavement condition"/>
  </hidden_info>
  <join_table
    name="pavement_condition"
    start_measure="from_measure"
    end_measure="to_measure"
  />
  <join_columns
    lrs_table_column="highway"
    join_table_column="seg_id"
  />
</styling_rules>'
);

例2-40 事前定義済LRSテーマを含むマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
  title="LRS Theme test"
  datasource="mvdemo"
  width="640"
  height="480"
  bgcolor="#a6caf0"
  antialiase="true"
  format="PNG_STREAM">
  <center size="45">
    <geoFeature>
      <geometricProperty typeName="center">
        <Point>
          <coordinates>-95, 35</coordinates>
        </Point>
      </geometricProperty>
    </geoFeature>
  </center> 
  <themes>  
    <theme name="LRS_THEME"/>
  </themes>
</map_request>

2.3.12 テーマ・マッピング

テーマ・マッピングは、属性値に基づいた空間地物の描画を意味します。マップ・ビジュアライゼーション・コンポーネントでは、テーマ・マッピングにより、地物の属性を示すために色または記号が地物に適用されたマップが作成されます。たとえば、Countiesテーマは、各郡の人口密度に直接マップされる様々な色相の色を使用して描画できます。また、Earthquakesテーマは塗りつぶした円によって表示でき、円のサイズは各地震の規模または被害にマップされます。

テーマ・マッピングを実行するには、まずテーマ・マップのタイプに適した拡張スタイルを作成し、次にレンダリング・スタイルとして拡張スタイルを指定して、地物のテーマを作成する必要があります。テーマのスタイリング・ルールでは、表またはビューで属性列も指定する必要があります。この値は、拡張スタイルにより地物をテーマ別にレンダリングする方法を厳密に決定するために使用されます。

たとえば、各地域に使用されている色が、ある製品の売上高のレベルを反映するマップを表示するとします。このためには、個々の範囲ベースの一連のバケットを定義する拡張スタイルを作成します(「個々の範囲ベース・バケット」を参照)。各バケットには製品売上高の値の事前定義済範囲が含まれており、バケットはレンダリング・スタイルに関連付けられています。(各地域は、売上高の値が含まれている範囲に関連付けられたスタイルを使用してレンダリングされます。)また、範囲に対してチェックされる属性値を示す列の名前も指定します。つまり、拡張スタイルは売上高の値に基づいて地域をマップする方法を定義し、テーマのスタイリング・ルールは拡張スタイルと実際の売上高の値を含む属性列を関連付けます。

図2-13は、拡張スタイルとテーマとの関係と、スタイルおよびテーマが実表とどのように関連しているかを示しています。この図では、V.SALESという拡張スタイルによって一連のバケットが定義されています。SALES_BY_REGIONという事前定義済テーマでは、そのスタイリング・ルール内でスタイルV.SALESを指定しています。また、このテーマでは、REGIONS表のSALES列を、値がスタイル内のバケット範囲と比較される列として識別します。(各バケットは、「バケットのラベル・スタイルの指定」で説明しているように、レンダリング・スタイルに加えて、あるいはそのかわりに、ラベリング・スタイルと関連付けることができます。)

図2-13 テーマ・マッピング: 拡張スタイルとテーマの関係

図2-13の説明が続きます
「図2-13 テーマ・マッピング: 拡張スタイルとテーマの関係」の説明

マップ・ビジュアライゼーション・コンポーネントでは、図2-13で示した個々の範囲ベースのバケットに加えて、バケット・スタイルで説明しているその他のバケット・スタイルもサポートします。円グラフを描く場合など、テーマ・マッピングに複数の属性列を使用することもできます。

この項の後半では、テーマ・マッピングのその他の例を示します。

例2-41は、EarthquakesテーマのXML定義です。

ノート:

label属性値(label="less than 4"など)はマップに表示されず、拡張スタイル用にコンパイルされたラベルにのみ使用されます。

seq属性値(seq="0"など)はマップ・ビジュアライゼーション・コンポーネントにより無視されます。マップ・ビジュアライゼーション・コンポーネントでは、定義内の要素の順序によってのみ順序が決まります。

例2-42では、<VariableMarkerStyle>タグを使用しました。次の各例では、カリフォルニアにおける国勢調査区画のテーマ・マッピングの作成で、<ColorSchemeStyle>タグが使用されています。例2-43では、人口密度のテーマ・マッピングに目盛付きカラー・スケールを使用しています。例2-44は、目盛付きカラー・スケールを使用した平均世帯収入のテーマ・マッピングです。例2-45も平均世帯収入のテーマ・マッピングですが、各収入範囲に、目盛付きスケールではなく固有の色スタイルが使用されています。

  • m.esso gasstationm.texaco gasstationおよびその他のスタイル名は、名前の単語間にスペースがあります。

  • 表の名前は大/小文字が区別されません。したがって、名前を区別する手段として大/小文字を使用しないでください。たとえば、m.esso gasstationM.ESSO GASSTATIONは同じ名前とみなされます。

  • デフォルト・コレクション・バケットは、バケットの値として#DEFAULT#を使用することで指定できます。このバケットは、他のバケットで指定されていない列値(ガソリン・スタンド名)に使用します。

次に、会社名が含まれる表内の列(MERK)を指定するテーマ(theme_gasstation)が定義されます。例2-47では、このテーマのスタイリング・ルールを示します。

表2-2 Gasoline Stationsテーマで使用される表

データ型

FID

NOT NULL NUMBER

ID

NUMBER

NAAM

VARCHAR2(31)

STRAAT_

VARCHAR2(30)

NR

NUMBER

TV

VARCHAR2(1)

AAND

VARCHAR2(2)

PCODE

VARCHAR2(6)

PLAATS

VARCHAR2(10)

GEOM

SDO_GEOMETRY

MERK

VARCHAR2(40)

この表では、GEOM列には空間ジオメトリが含まれ、MERK列には会社名(ShellEssoなど)が含まれます。

theme_gasstationテーマのスタイリング・ルールでは、GEOM列の内容により指定された場所のマーカー(v.gasstationsスタイル)が、その行のMERK列の値によって決定されるように指定しています。スタイルv.gasstations(例2-46を参照)では、列値がShellの場合はスタイルm.shell gasstationを使用し、列値がEssoの場合はスタイルm.esso gasstationを使用する、などのように指定しています。また、列値がAviaBenzinexQ8TotalおよびWitte Pompのいずれかの場合はスタイルm.generic gasstationを使用し、列値が前述のいずれでもない場合はスタイルm.default gasstationを使用するように指定しています。

例2-41 Earthquakesテーマに対するスタイリング・ルールのXML定義

<?xml version="1.0" standalone="yes"?> 
<styling_rules theme_type="nature"> 
  <rule column="RICHTER_SCALE"> 
    <features style="v.earthquakes"> 
    </features> 
  </rule> 
</styling_rules>

例2-41のテーマには、ルールが1つのみ含まれます。<rule>要素には、例2-6Airportテーマにはないcolumnという属性が含まれます。column属性では、テーマ・マッピングに必要な属性値を指定する1つ以上の列(カンマ区切り)が指定されます。<features>要素に指定されたスタイルは、v.earthquakesという拡張スタイルです。

Earthquakesテーマの定義のもう1つの部分では、レンダリングされるデータが含まれる表が指定されます。この表には、空間データの(SDO_GEOMETRY型の)列に加えて、RICHTER_SCALEという列も含める必要があります。(該当する表とSDO_GEOMETRY型の列はそれぞれ、USER_SDO_THEMESビューのBASE_TABLE列およびGEOMETRY_COLUMN列で指定する必要があります(USER_SDO_THEMESビューについては、「xxx_SDO_THEMESビュー」を参照してください。))RICHTER_SCALE列はNUMBER型である必要があります。その理由については、例2-42の拡張スタイル定義を参照してください。

例2-42 Earthquakesテーマの拡張スタイル定義

<?xml version="1.0" ?> 
<AdvancedStyle> 
  <VariableMarkerStyle basemarker="m.circle" startsize="7" increment="4"> 
     <Buckets> 
          <RangedBucket seq="0"  label="less than 4"  high="4"/> 
          <RangedBucket seq="1"  label="4 - 5" low="4" high="5"/> 
          <RangedBucket seq="2"  label="5 - 6" low="5" high="6"/> 
          <RangedBucket seq="3"  label="6 - 7" low="6" high="7"/> 
          <RangedBucket seq="4"  label="7 and up" low="7"/> 
      </Buckets> 
  </VariableMarkerStyle> 
</AdvancedStyle> 

このスタイルでは、m.circleというマーカーを使用して地震の場所を示すように指定されています。地震についてレンダリングされるマーカーのサイズは、その行のRICHTER_SCALE列の数値によって左右されます。この例では5つのバケットがあり、それぞれが事前に決定された値の範囲に相当します。たとえば、地震がリヒター・スケールでマグニチュード5.7である場合、マーカー・サイズは15ピクセル(7 + 4 + 4)となります。これは、5.7という値が3つ目のバケット(5 - 6)に分類され、開始マーカー・サイズが7ピクセル(startsize="7")であり、各範囲の増分が4 (increment="4")であるためです。

例2-43 目盛付きカラー・スキームを使用した人口密度のマッピング

# ca pop density usbg_hhinfo 
<?xml version="1.0" standalone="yes"?> 
<styling_rules theme_type="political"> 
<rule column="densitycy"> 
   <features style="v.CA Pop density"> 
   </features> 
 </rule> 
</styling_rules> 

USBG_HHINFOという表には、DENSITYCYという列(例2-43で使用)が含まれています。この人口密度テーマに対応するスタイル(v.CA Pop density)の定義は、次のとおりです。

<?xml version="1.0" ?> 
<AdvancedStyle> 
  <ColorSchemeStyle basecolor="#ffff00" strokecolor="#00aaaa"> 
     <Buckets low="0.0" high="20000.0" nbuckets="10"/> 
  </ColorSchemeStyle> 
</AdvancedStyle> 

基本色(basecolor)およびストロークの色(strokecolor)は、16進法を使用して指定された24ビットRGB(赤-緑-青)値です。基本色の値は、1つ目のバケットに使用されます。後続の各バケットの色値は、最初に基本色をRGBからHSB(色相-彩度-輝度)モデルに変換してから、輝度を各バケットの固定増分ずつ下げることで取得されます。したがって、1つ目のバケットの輝度が最も高くなり、最後のバケットの輝度が最も低くなります。

例2-44では、例2-43と同様に基本色および目盛付きカラー・スキームを使用していますが、今回は世帯収入を示すことが目的です。

例2-44 目盛付きカラー・スキームを使用した平均世帯収入のマッピング

<?xml version="1.0" standalone="yes"?> 
<!-- # ca hh income theme  table = usbg_hhinfo  --> 
<styling_rules> 
<rule column="avghhicy"> 
   <features style="v.ca income"> 
   </features> 
 </rule> 
</styling_rules> 

USBG_HHINFOという表には、AVGHHICYという列(例2-44および例2-45で使用)が含まれています。この平均世帯収入テーマに対応するスタイル(v.ca income)の定義は、次のとおりです。

<?xml version="1.0" ?> 
<AdvancedStyle> 
  <ColorSchemeStyle basecolor="#ffff00" strokecolor="#00aaaa"> 
  <!-- # income range with a color gradient --> 
     <Buckets> 
          <RangedBucket seq="0" label="less than 10k"  high="10000"/> 
          <RangedBucket seq="1" label="10-15k" low="10000" high="15000"/> 
          <RangedBucket seq="2" label="15-20k" low="15000" high="20000"/> 
          <RangedBucket seq="3" label="20-25k" low="20000" high="25000"/> 
          <RangedBucket seq="4" label="25-35k" low="25000" high="35000"/> 
          <RangedBucket seq="5" label="35-50k" low="35000" high="50000"/> 
          <RangedBucket seq="6" label="50-75k" low="50000" high="75000"/> 
          <RangedBucket seq="7" label="75-100k" low="75000" high="100000"/> 
          <RangedBucket seq="8" label="100-125k" low="100000" high="125000"/>
          <RangedBucket seq="9" label="125-150k" low="125000" high="150000"/>
          <RangedBucket seq="10" label="150-250k" low="150000" high="250000"/>
          <RangedBucket seq="11" label="250-500k" low="250000" high="500000"/>
          <RangedBucket seq="12" label="500k and up"   low="500000"/>
      </Buckets> 
  </ColorSchemeStyle> 
</AdvancedStyle> 

個々の範囲ベースのバケットでは、下限値は含まれますが上限値は含まれません(ただし、他の範囲の値より大きい値が含まれる範囲では、上限値は含まれます)。いずれの範囲にも、他の範囲の値と重複する値の範囲を含めることはできません。

例2-45では、各平均世帯収入範囲に固有の色スタイルが使用されています。

例2-45 各収入範囲の色を使用した平均世帯収入のマッピング

<?xml version="1.0" standalone="yes"?> 
<!-- # ca hh income theme  table = usbg_hhinfo  --> 
<styling_rules> 
<rule column="avghhicy"> 
   <features style="v.ca income 2"> 
   </features> 
 </rule> 
</styling_rules> 

v.ca income 2スタイルの定義は、次のとおりです。

<?xml version="1.0" ?>
<AdvancedStyle>
 <BucketStyle>
  <Buckets>
   <!-- # income ranges with specific colors -->
   <RangedBucket seq="0" label="less than 10k"  high="10000" style="c.rb13_1"/>
   <RangedBucket seq="1" label="10-15k" low="10000" high="15000" style="c.rb13_2"/>
   <RangedBucket seq="2" label="15-20k" low="15000" high="20000" style="c.rb13_3"/>
   <RangedBucket seq="3" label="20-25k" low="20000" high="25000" style="c.rb13_4"/>
   <RangedBucket seq="4" label="25-35k" low="25000" high="35000" style="c.rb13_5"/>
   <RangedBucket seq="5" label="35-50k" low="35000" high="50000" style="c.rb13_6"/>
   <RangedBucket seq="6" label="50-75k" low="50000" high="75000" style="c.rb13_7"/>
   <RangedBucket seq="7" label="75-100k" low="75000" high="100000" style="c.rb13_8"/>
   <RangedBucket seq="8" label="100-125k" low="100000" high="125000" style="c.rb13_9"/>
   <RangedBucket seq="9" label="125-150k" low="125000" high="150000" style="c.rb13_10"/>
   <RangedBucket seq="10" label="150-250k" low="150000" high="250000" style="c.rb13_11"/>
   <RangedBucket seq="11" label="250-350k" low="250000" high="350000" style="c.rb13_12"/>
   <RangedBucket seq="12" label="350k and up"   low="350000" style="c.rb13_13"/>
  </Buckets>
 </BucketStyle>
</AdvancedStyle>

<RangedBucket>の各定義には、スタイルが指定されています。

次の各例では、様々な石油会社が経営するガソリン・スタンドを識別するための拡張スタイルと、このスタイルを使用したテーマを作成しています。例2-46では、<CollectionBucket>タグを使用して、列値(ShellEssoTexacoBP、およびAviaBenzinexQ8TotalWitte Pompのいずれかと、その他すべてのデフォルト・カテゴリ)をその会社のガソリン・スタンドに適したスタイルに関連付けます。

例2-46 Gasoline Stationsテーマの拡張スタイル定義

<?xml version="1.0" ?> 
<AdvancedStyle> 
<BucketStyle> 
 <Buckets> 
  <CollectionBucket seq="0" label="Shell" style="m.shell gasstation"> 
   Shell 
  </CollectionBucket> 
  <CollectionBucket seq="1" label="Esso" style="m.esso gasstation"> 
   Esso 
  </CollectionBucket> 
  <CollectionBucket seq="2" label="Texaco"  style="m.texaco gasstation"> 
   Texaco 
 </CollectionBucket> 
  <CollectionBucket seq="3" label="BP"  style="m.bp gasstation"> 
   BP 
  </CollectionBucket> 
  <CollectionBucket seq="4" label="Other"  style="m.generic gasstation"> 
   Avia,Benzinex,Q8,Total,Witte Pomp 
  </CollectionBucket> 
  <CollectionBucket seq="5" label="DEFAULT" style="m.default gasstation">
   #DEFAULT#
  </CollectionBucket>
  </Buckets>
</BucketStyle> 
</AdvancedStyle> 

例2-46に関するノート:

例2-47 Gasoline Stationsのテーマ定義のスタイリング・ルール

<?xml version="1.0" standalone="yes"?> 
<styling_rules> 
  <rule column="merk"> 
    <features style="v.gasstations"> 
    </features> 
    <label column="merk" style="t.SansSerif red 10"> 
      1 
    </label> 
  </rule> 
</styling_rules> 

このテーマは、表2-2に示す列が含まれるNED_GASSTATIONS表に依存しています(開発者の言語がオランダ語であることを反映した列名となっています)。

2.3.12.1 外部属性データを使用したテーマ・マッピング

先に説明したテーマ・マッピングでは、属性データ(総売上高の母集団など)も地理空間データ(境界線や位置などを表すジオメトリ・オブジェクト)も同じデータベース内にあることが前提でした。ただし、属性データは、現在のデータベースの外部にあるソースから得られる場合もあります。たとえば、別のデータベース上で実行されるビジネス・インテリジェンス(BI)問合せの集約結果が反映されることもあれば、スプレッドシートからエクスポートされた売上高値のカンマ区切りリストから得られることもあります。そのような属性データ、つまり地理空間データが含まれるデータベースの外部から得られる属性データは、外部属性データと呼ばれています。

マップ・ビジュアライゼーション・コンポーネントで外部属性データを使用するには、非空間データ・プロバイダ・プラグイン・メカニズムを使用する必要があります。このメカニズムでは、マップ・ビジュアライゼーション・コンポーネントが、同一のマップ・リクエスト内でマップ・ビジュアライゼーション・コンポーネント・テーマ(事前定義済または動的)と関連付けられます。マップ・ビジュアライゼーション・コンポーネントは、該当するテーマを処理する際、非空間データ・プロバイダをコールし、該当するテーマのためにフェッチされている空間データと非空間属性データを結合します。

非空間データ・プロバイダを使用するには、次のステップを実行します。

  1. マップ・ビジュアライゼーション・コンポーネントの定義済インタフェースoracle.mapviewer.share.ext.NSDataProviderを実装することにより、Java非空間データ・プロバイダを実装します。

  2. (構成ファイル内で)非空間データ・プロバイダの実装をマップ・ビジュアライゼーション・コンポーネントに登録します。その場合、実装で依存する可能性がある一連のグローバル・パラメータを指定することもできます。カスタム・データ・プロバイダの各実装クラスには、一意のIDを割り当てる必要があります。

  3. 非空間データ・プロバイダの実装クラスが含まれるライブラリを、マップ・ビジュアライゼーション・コンポーネントのライブラリ・パス(そのweb/WEB-INF/libディレクトリなど)に入れます。

  4. 次のメソッドをマップ・ビジュアライゼーション・コンポーネントJavaクライアントのAPIクラスMapViewer上で起動し、非空間データ・プロバイダの実装をマップ・リクエストに含めます。

    addNSDataProvider(java.lang.String providerId,
                      java.lang.String forTheme,
                      java.lang.String spatialKeyColumn,
                      java.lang.String customRenderingStyle,
                      java.util.Properties params,
                      long timeout)
    

    addNSDataProviderのパラメータについては、マップ・ビジュアライゼーション・コンポーネントに関するJavadocリファレンス情報を参照してください。この情報は、http://host:port/mapviewer/mapclientという形式のURLで入手できます。ここで、hostおよびportは、Oracle Fusion Middlewareが着信リクエストをリスニングする場所です。たとえば、http://www.mycorp.com:8888/mapviewer/mapclientです。

例2-48は、単純な非空間データ・プロバイダの実装を示しています。この実装は、デフォルトの非空間データ・プロバイダとしてマップ・ビジュアライゼーション・コンポーネントにも提供されます。

例2-48 非空間(外部)データ・プロバイダの実装

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Properties;
import java.util.Vector;
 
import oracle.mapviewer.share.ext.NSDataSet;
import oracle.mapviewer.share.ext.NSDataProvider;
import oracle.mapviewer.share.ext.NSRow;
import oracle.lbs.util.Logger;
 
import oracle.mapviewer.share.Field;
 
/**
 * A simple implementation of the NSDataProvider interface. When invoked, it supplies tabular attribute data to the map visualization component out
 * of a file or URL. The data in the file must be orgazined as following: <br>
 * <UL>
 *   <LI> The first line contain a single character which is the delimiter
 *        between columns in the subsequent lines.
 *   <LI> Each line after the first in the file represent one data row
 *   <LI> Each field in the row must be separated by the delimiter char only
 *   <LI> The first field in each line must be a string (key) that serves as the
 *         key; the rest of the fields must be numeric values
 * </UL>
 *
 * When incorporating this data provider in a map request, one of the following
 * two parameters must be specified:
 * <UL>
 *   <LI> file  if the custom data is stored in a local file; this parameter
 *        specifies the full path to that file
 *   <LI> url  if the custom data can be accessed from a web; this parameter
 *        specifeis the full URL to the data file.
 * </UL>
 *
 *
 */
public class NSDataProviderDefault implements NSDataProvider
{
  private static Logger log = Logger.getLogger("oracle.sdovis.nsdpDefault");
 
  public boolean init(Properties params)
  {
    return true;
  }
 
  public NSDataSet buildDataSet(Properties params)
  {
    String file = params.getProperty("file");
    if(file!=null)
      return readFromFile(file);
 
    String url = params.getProperty("url");
    if(url!=null)
      return readFromUrl(url);
 
    log.error("Must supply either file or url for default NS data provider.");
    return null;
  }
 
  public void destroy()
  {
  }
 
  protected NSDataSet readFromFile(String file)
  {
    BufferedReader in = null;
    try{
      in   = new BufferedReader(new FileReader(file));
      String line = in.readLine();
      String delimiter = line.substring(0,1);
 
      Vector rows = new Vector();
 
      while ( (line=in.readLine()) != null)
      {
        NSRow row = buildRow(line, delimiter);
        if(row!=null)
          rows.add(row);
      }
 
      NSDataSet res = new NSDataSet(rows);
      return res;
    }catch(Exception ex)
    {
      log.error(ex);
      return null;
    } finally
    {
      try{
        if(in!=null)
          in.close();
      }catch(Exception e){}
    }
  }
 
  protected NSDataSet readFromUrl(String url)
  {
    log.error("url not supported yet.");
    return null;
  }
 
  protected NSRow buildRow(String line, String delimiter)
  {
    if(line==null || line.length()<1)
      return null;
 
    String[] fields = line.split(delimiter);
    if(fields==null || fields.length==0)
      return null;
 
    Field[] row = new Field[fields.length];
 
    Field a = new Field(fields[0]);
    a.setKey(true);
 
    row[0] = a;
 
    for (int i = 1; i < fields.length; i++)
    {
      try{
        double d = Double.parseDouble(fields[i]);
        a = new Field(d);
        row[i] = a;
      }catch(Exception e)
      {
        log.warn("invalid row field (key="+fields[0]+")");
        return null;
      }
    }
 
    return new NSRow(row);
 
  }
}

2.3.13 テーマの外観に影響を与える属性

<theme>要素の一部の属性は、テーマに関連付けられるデータを決定するかわりに、マップ表示の外観にのみ影響を与えます。これらの外観関連の属性は、マップの生成時にテーマの処理およびレンダリングを行うかどうか、またその方法を制御します。例には次の属性が含まれています。

  • min_scaleおよびmax_scaleは、テーマを様々なマップ・スケール(解像度のレベル)で表示するかどうかを決定します。たとえば街路のマップを表示する場合、州全体を表示するときなど、街路の表示が密集しすぎるため使用しづらいマップ・スケールがあります。このような場合は街路用のテーマを作成し、スケールが適切なときにはテーマの影響を受ける個々の街路が表示され、適切でないときには表示されないように、最小および最大のスケール値を指定します。

  • labels_always_onは、テーマのラベルが別のラベルと重なる場合に表示するかどうかを決定します。適切なlabels_always_on値を選択し、マップ・リクエスト内で処理されるテーマの適切な順序を選択することで、ラベルの重複の度合いと、どのラベルを優先的に表示するかを制御できます。

  • fast_unpickleは、使用する非Pickle化(アンストリーム)の方法を決定します。表示のパフォーマンスと精度のどちらを優先するかの選択となる場合があります。

  • fixed_svglabelvisible_in_svgselectable_in_svgonclickonmousemoveonmouseoverおよびonmouseoutは、SVGマップの外観に影響を与えます。

外観に関連する属性を指定するには、XML APIとともに<theme>要素を使用します([31.2.20]を参照)。