プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle MapViewerユーザーズ・ガイド
12c リリース1 (12.1)
E59442-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 MapViewerの概念

この章では、MapViewerの使用前に熟知しておく必要がある概念について説明します。

基本概念には、スタイルテーマベース・マップマッピング・メタデータおよびマップがあります。

この章の主な項目は、次のとおりです。

2.1 MapViewerの概要

アプリケーションでMapViewerを使用すると、特定のスタイル(色、パターンなど)が特定のテーマ(つまり、都市、河川、高速道路などの空間地物の集合)に適用され、マップ(Webページに表示するGIF画像など)がレンダリングされます。たとえば、アプリケーションにより表示するマップで、州立公園を緑色で示し、レストランを赤い星印でマーク付けします。通常、マップには、政治的または物理的エンティティ(あるいはその両方)を表す複数のテーマがあります。たとえば、マップに表示されるのは、国や州の境界線、都市、山脈、河川および史跡などです。レンダリングされたマップでは、各テーマは、画像全体の1つの層を表します。

MapViewerでは、スタイル、テーマおよびベース・マップの他、各テーマに1つ以上のスタイルを適用するためのルールを定義できます。これらのスタイル、テーマ、ベース・マップおよび関連するルールは、データベース内の、MDSYSスキーマのマップ定義表に格納され、メタデータ・ビューを使用して参照可能です。データベース・インスタンス内のすべてのスタイルは、全ユーザーによって共有されます。ユーザーがアクセスできるマッピング・メタデータ(一連のスタイル、テーマおよびベース・マップ)は2.9項で説明するMapViewerメタデータ・ビュー(USER_SDO_STYLES、USER_SDO_THEMES、USER_SDO_MAPSなど)によって決定されます。特定のユーザーがアクセスできるマップ定義オブジェクトのセットは、ユーザーのマッピング・プロファイルとも呼ばれます。スタイル、テーマおよびベース・マップは、スタンドアロンのMap Builderツール(第7章を参照)を使用して管理できます。

2.2 スタイル

スタイルは、空間地物を表す際に使用できる視覚属性です。ポイント地物、線地物および領域地物を表す基本的なマップの記号やラベルは、個別のスタイルとして定義および格納されます。各スタイルには一意の名前があり、1つ以上のグラフィック要素がXML構文で定義されます。

各スタイルは、次のいずれかのタイプとなります。

  • 色: 塗りまたはストローク(枠線)あるいはその両方の色。

  • マーカー: 指定された塗りおよびストロークの色の形状、または画像。マーカーは多くの場合、空港、スキー場および歴史的施設などのポイント地物を表すアイコンです。

    ある線地物に対してマーカー・スタイルが指定されている場合、レンダリング・エンジンにより、この線上の適切なポイントが選択され、その点にマーカー・スタイル(米国州間高速道路の盾マーカーなど)が適用されます。

  • 線: 線スタイル(幅、色、終端スタイル、結合スタイル)、オプションの中心線、輪郭およびハッシュ・マーク。通常、線は高速道路、河川、パイプラインおよび送電線などの線形地物に使用されます。また、街路や高速道路を描画するのに便利な縁取り付き線スタイルも使用できます。

  • 領域: 色またはテクスチャ、(オプションの)ストロークの色。通常、領域は郡および国勢調査単位などのポリゴン地物に使用されます。

  • テキスト: フォント指定(サイズおよびファミリ)、オプションのハイライト(太字、イタリック)、フォアグラウンド・カラー。通常、テキストは注釈およびラベル付け(都市や河川の名前など)に使用されます。

  • 拡張: 主にテーマ・マッピング(2.3.12項を参照)に使用される複合物。基本的な拡張スタイルであるBucketStyleでは、単純なレンダリング(およびオプションでラベリング)のスタイルのセットとバケットのセットとの関係が定義されます。表示される各地物について、その地物の指定値または値セットにより分類されるバケットが決まり、そのバケットに関連付けられたスタイルが地物の表示に使用されます。バケット・スタイルについては、A.6.1項を参照してください。

    さらに、カラー・スキーム(A.6.2項を参照)および可変(目盛付き)マーカー(A.6.3項を参照)という2種類の特殊なバケット・スタイルが提供されています。その他の拡張スタイルとしては、ドット密度(A.6.4項を参照)、棒グラフ(A.6.5項を参照)、コレクション(A.6.6項を参照)、可変円グラフ(A.6.7項を参照)、ヒート・マップ(A.6.8項を参照)があります。

表2-1は、各タイプのスタイルに適用可能なジオメトリ・タイプをリストしています。

表2-1 スタイル・タイプおよび適用可能なジオメトリ・タイプ

スタイル・タイプ 適用可能なジオメトリ・タイプ

(任意のタイプ)

マーカー

ポイント、線

領域

ポリゴン

テキスト

(任意のタイプ)

拡張

(任意のタイプ)


データベース・ユーザーが使用できるスタイルはすべて、そのユーザーのUSER_SDO_STYLESビューに格納されます。このビューについては、2.9項および2.9.3項を参照してください。

マップ・リクエストの一部として、任意のスタイル・タイプの動的に定義されるスタイル(一時的スタイル)も作成できます。これらを作成する方法は、次のどのAPIを使用するかによって異なります。

  • ネイティブXML API。<map_request>要素内のXML要素を使用してスタイルを定義します。

  • JavaBean API。動的に定義されるスタイルをマップ・リクエストに追加します(4.3.4項を参照)。

  • Oracle Maps JavaScript API。クラスおよびメソッドを使用して、すべてのタイプのスタイルを動的に作成します。

どの場合でも、実際に作成するのはスタイルのXML定義です。この定義に基づいて動的に定義されるスタイルは、MapViewerサーバーにマップ・リクエストがあるときにMapViewerサーバーによって作成されます。動的に作成されたスタイルは、リクエストが完了するとMapViewerサーバーによって破棄されます。

スタイルのタイプの詳細(各タイプを定義するためのXML形式に関する情報を含む)は、付録Aを参照してください。

この項の主な内容は次のとおりです。

2.2.1 スタイルのサイズ変更(スケーラブルなスタイル)

スタイル定義で、デフォルトのピクセル(px)以外の単位を指定した場合、そのスタイルはスケーラブルになります。つまり、スタイルに関連付けられた地物のサイズをマップ上でズームインまたはズームアウトすることにより変更できます。たとえば、マーカー・スタイルの幅と高さを100mと指定すると、マーカーは、現在のズーム・レベルのマップ・スケールにあわせて、各辺が100メートルの正方形として表示されます。

次に示すのは、スタイル・タイプと、関連のサイズ単位を持つ属性です。

  • マーカー・スタイル: マーカー・サイズ(高さと幅)およびテキスト属性(フォント・サイズ、ラベル・オフセット)

  • 線スタイル: 全体的な線の幅、中心線の幅と破線パターン、矢印線と破線パターン、ハッシュ・マーク、マーカー・パターン(サイズ、オフセット、間隔)

  • テキスト・スタイル: フォント・サイズ、ハローの幅

  • 棒グラフ・スタイル: バーの幅と高さ

  • ドット密度スタイル: ドットの幅と高さ

  • 円グラフ・スタイル: ピット半径

例2-1では、各サイズを15キロメートル(15.0km)とする枠ボックス内の星型マーカーを定義します。この定義は、ある国のすべてまたは大部分を表示する地図上で州の主要な都市を識別する場合に便利ですが、特定の都市やその周辺地域をズームインする場合には役に立ちません。

例2-1 スケーラブルなマーカー・スタイル

<style name="M.STAR_CAPITAL_CITY">
  <svg width="1in" height="1in">
    <desc/>
    <g class="marker" style="stroke:#000000;fill:#FF0000;fill-opacity:0;width:15.0km;height:15.0km;font-family:Dialog;font-size:12;font-fill:#FF0000">
        <polyline points="138.0,123.0,161.0,198.0,100.0,152.0,38.0,198.0,61.0,123.0,0.0,76.0,76.0,76.0,100.0,0.0,123.0,76.0,199.0,76.0"/>
    </g>
  </svg>
</style>

例2-2では、全体的な線の幅を10メートル(10.0m)、枠線の幅を1メートル(1.0m)として、線スタイルを定義します。この定義は、主要な高速道路沿いの主要な都市を識別する場合に便利です。

例2-2 スケーラブルな線スタイル

<style name="L.PRIMARY_HIGHWAY">
  <svg width="1in" height="1in">
    <desc></desc>
    <g class="line" cased="true" style="fill:#33a9ff;stroke-width:10.0m">
      <line class="parallel" style="fill:#aa55cc;stroke-width:1.0m"/>
    </g>
  </svg>
</style>

MapViewerでは、ピクセル以外のサイズ単位を持つスタイルをレンダリングまたはラベル付けする場合、現在のマップ領域および表示領域に基づいて、そのサイズ単位を画面ピクセルに変換してから、スタイルのレンダリングやラベル付けを行います。スケーラブルなスタイルのサイズは、マップ上でズームインまたはズームアウトすることにより変化します。ズームアウトで、スタイルの全体サイズが0(ゼロ)以下になると、そのスタイルはレンダリングもラベル付けもされません。

サイズ単位は、既知の空間参照システム(SRS)に関連付けられたデータについてのみ使用できます。データのSRSが存在しなかったり未知のものである場合、すべてのサイズ値にピクセルが使用されます。また、Map Builderユーティリティでレンダリングされたプレビューや凡例では、指定したサイズ単位のかわりにピクセル値が使用されます。(凡例については、2.4.2項を参照してください。)

スケーラブルなスタイルは、MapViewerのリリース11g (11.1.1)以上で機能します。それ以前のリリースのMapViewerでは使用できません。

2.2.2 バケットのラベル・スタイルの指定

コレクションベースのバケット・スタイルおよび個々の範囲ベースのバケット・スタイル(それぞれA.6.1.1項A.6.1.2項で説明)には、各バケット要素でlabel_style属性を使用して、ラベリング・スタイルを指定できます。例2-3では、V.COUNTY_POP_DENSITYという拡張スタイルを作成します。このスタイルでは、各バケットにテキスト・ラベル・スタイルが割り当てられ(label_style属性を使用)、一部のスタイルは複数のバケットに使用されます。

例2-3 各バケットにテキスト・ラベル・スタイルを指定した拡張スタイル

<?xml version="1.0" ?>
<AdvancedStyle>
     <BucketStyle>
        <Buckets>
            <RangedBucket seq="0" label="&lt;150k" 
              low="-Infinity" high="150000" 
              style="C.CB_QUAL_8_CLASS_DARK2_1" 
              label_style="T.BLUE_SERIF_12"/>
            <RangedBucket seq="1" label="150k - 350k" 
              low="150000" high="350000" 
              style="C.CB_QUAL_8_CLASS_DARK2_2" 
              label_style="T.BLUE_SERIF_12"/>
            <RangedBucket seq="2" label="350k - 600k" 
              low="350000" high="600000" 
              style="C.CB_QUAL_8_CLASS_DARK2_3" 
              label_style="T.BROWN_SERIF_12"/>
            <RangedBucket seq="3" label="600k - 1000k" 
              low="600000" high="1000000" 
              style="C.CB_QUAL_8_CLASS_DARK2_4" 
              label_style="T.BROWN_SERIF_12"/>
            <RangedBucket seq="4" label="1000k - 1500k" 
              low="1000000" high="1500000" 
              style="C.CB_QUAL_8_CLASS_DARK2_5" 
              label_style="T.GREY_SERIF_12"/>
            <RangedBucket seq="5" label="1500k - 2500k" 
              low="1500000" high="2500000" 
              style="C.CB_QUAL_8_CLASS_DARK2_6" 
              label_style="T.GREY_SERIF_12"/>
            <RangedBucket seq="6" label="2500k - 5000k" 
              low="2500000" high="5000000" 
              style="C.CB_QUAL_8_CLASS_DARK2_7" 
              label_style="T.GREEN_SERIF_12"/>
            <RangedBucket seq="7" label="&gt;=5000k" 
              low="5000000" high="Infinity" 
              style="C.CB_QUAL_8_CLASS_DARK2_8" 
              label_style="T.GREEN_SERIF_12"/>
    </Buckets>
   </BucketStyle>
</AdvancedStyle>

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

例2-3V.COUNTY_POP_DENSITYスタイルがマップ・リクエストで使用されると、図2-1のようなマップが表示されます。ここでは、郡名が様々なテキスト・スタイル(この場合は郡の総人口により異なる)を反映したラベルで表示されています。

図2-1 異なるバケットに応じた様々なラベル・スタイル

図2-1の説明は図の下のリンクをクリックしてください。
「図2-1 異なるバケットに応じた様々なラベル・スタイル」の説明

例2-3では、最後のバケットを除くすべてのバケットでラベル・スタイルを指定しています。ラベル・スタイルが指定されていないバケットに分類される地物の場合、その地物に適用されるラベル・スタイル(ある場合)は、次の条件によって決まります。

  • テーマのスタイリング・ルールの<label>要素で、拡張スタイル以外のラベル・スタイルが指定されている場合、その地物のラベルには指定されたラベル・スタイルが使用されます。次の例では、<label>要素のスタイル指定(T.STATE_NAME)が<features>要素のスタイル指定(V.COUNTY_POP_DENSITY)と異なっているため、指定されたラベル・スタイルを持たないバケットに分類される地物はT.STATE_NAMEスタイルを使用してラベルが付けられています。

    <?xml version="1.0" standalone="yes"?>
    <styling_rules>
      <rule column="TOTPOP">
        <features style="V.COUNTY_POP_DENSITY">
        </features>
        <label column="county" style="T.STATE NAME">
            1
        </label>
      </rule>
    </styling_rules>
    
  • テーマのスタイリング・ルールの<label>要素で、ラベル・スタイルとして拡張スタイルが指定されている場合、地物にはラベルが付きません。(図2-1で一部の郡にラベルがないのはこのためです。)次の例では、<features>要素と<label>要素の両方で拡張スタイルV.COUNTY_POP_DENSITYが指定されているため、ラベル・スタイルの指定がないバケットに分類される地物にはラベルが付きません。

    <?xml version="1.0" standalone="yes"?>
    <styling_rules>
      <rule column="TOTPOP">
        <features style="V.COUNTY_POP_DENSITY">
        </features>
        <label column="county" style="V.COUNTY_POP_DENSITY">
            1
        </label>
      </rule>
    </styling_rules>
    

2.2.3 テキスト・ラベルおよびマーカーの方向設定

テキスト・ラベルおよびマーカーの方向は、方位ポイントを使用して、マップ上で制御できます。方位ポイントは、Oracle Spatial and Graphに用意されている特殊なタイプのポイント・ジオメトリです。方位ポイントでは、座標がそのポイントの位置と仮想終点の両方を表し、方位ベクターを示します。方位ベクターに従い、テキストの整列やマーカー記号の回転が行われます。方位ベクターについては、3.2.5項およびその項の図3-3を参照してください。方位ポイントの詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。

2.2.3.1 テキスト・スタイルの方位の制御

ポイントのテキスト・ラベルを方位ベクターの方向に向けるには、マップ・リクエストでOracle Spatial and Graph方位ポイントとしてポイントを指定します。MapViewerで方位ポイントのラベルを付けると、ポイントの位置のテキスト・ラベルは自動的に中央揃えになり、ラベルが方位ベクターの方向を指すように位置が調整されます。

各地物を同様にラベル付けするには、その位置を方位ポイントとして指定する必要があります。これらの方位ポイントを1つの表にまとめ、ポイント・ジオメトリを含む列で空間索引を作成できます。これにより、ラベリングとして希望するテキスト・スタイルを指定し、ポイント自体がマップ上に表示されないようにレンダリング・スタイルに透明の色スタイルを指定することで、表に基づいたテーマを作成できます。

例2-4は、座標(12,14, 0.3,0.2)を持つ1つの方位ポイントにラベルを付けるマップ・リクエストで、(12,14)はポイントのX座標およびY座標を表し、(0.3,0.2)は方位ベクターを表します。ここでは、テキストは表示されても、下にあるポイントが表示されないようにするために、動的に定義される透明色スタイル(transparent_color)を使用して、ポイントをレンダリングします。

例2-4 方位ポイントのラベル付け

<map_request
  title="Labeling Oriented Points"
  datasource="my_datasource"   width="400"  height="300"
  antialiase="true"
  format="PNG_STREAM">
 
  <themes>
    <theme name="theme1">
       <jdbc_query
         spatial_column="geom"  jdbc_srid="8265"
         render_style="transparent_color" 
         label_column="label" label_style="t.street name"
         datasource="tilsmenv">
         SELECT SDO_GEOMETRY(2001, 8265, NULL, 
                      SDO_ELEM_INFO_ARRAY(1, 1, 1, 3, 1, 0), 
                      SDO_ORDINATE_ARRAY(12, 14, .3, .2))
         geom, 'Oriented Point' label FROM dual
       </jdbc_query>
     </theme>
  </themes>
 
  <styles>
    <style name="transparent_color">
      <svg width="1in" height="1in">
        <g class="color" style="stroke:#ff0000;stroke-opacity:0">
          <rect width="50" height="50"/>
        </g>
      </svg>
    </style>
  </styles>
</map_request>

図2-2は、例2-4のリクエストにより生成されるマップの一部を示しています。(ラベルは方位ポイントという語句です。)

図2-2 方位ポイントのラベルのマップ表示

図2-2の説明は図の下のリンクをクリックしてください。
「図2-2 方位ポイントのラベルのマップ表示」の説明

2.2.3.2 マーカーの方位の制御

方位ポイントにマーカー・スタイルが適用される場合、MapViewerではマーカー・スタイルを自動的に回転し、方位ベクターの方向を指すようにします。マーカー・スタイルを回転する場合は、マーカーの中央を中心にして回転します。

図2-3は、方位ポイントを使用してマーカー・スタイルの方位を制御する方法を示しています。この図では、まず元のマーカー・スタイルが回転なしで示されています。しかし、マーカーが2.2.3.1項例2-4と同じ方位ポイントに適用されると、マーカー・スタイルは方位ベクターを反映するために、それに応じて回転します(この例では約34度左回り)。

図2-3 方位マーカー

図2-3の説明は図の下のリンクをクリックしてください。
「図2-3 方位マーカー」の説明

2.2.4 テキスト・スタイルのスティッキー化

テキスト・スタイルを「スティッキー」として指定すると、そのテキスト・スタイルをラベル・スタイルとして使用する地物はすべて、該当するテキスト・ラベルが常にマップに描画されます。例2-5に示すスタイルのXML定義では、sticky属性をtrueに設定しています。

例2-5 sticky属性を持つテキスト・スタイル

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
 <g class="text" sticky="true" style = "font-style:plain;font-family:Serif;font-size:11pt;font-weight:bold;fill:#000000">
    Hello World!
</g>
</svg>

2.2.5 任意のスタイルを持つサンプル画像の取得

データベースに格納されている事前定義済スタイルのサンプル画像を取得する場合は、単純なHTTPリクエストをMapViewerサーバーに発行します。このリクエストでは、サンプル画像のサイズ、バックグラウンド・カラーおよび返される画像の形式を指定できます。このようなリクエストは、スタイルの視覚リストをWebページに表示したり、カスタムのマップ凡例を作成したり、様々なスタイルの表示様式を見たりする場合に便利です。

HTTPリクエストには次のようなパラメータがあり、styを除いてすべてオプションです。

  • sty(必須)ではスタイルの名前を指定します。

  • dsでは該当するスタイルにアクセスできるデータソースを指定します。デフォルト時は、MapViewerのデフォルトのデータソースが使用されます。

  • wでは、サンプル画像の幅(ピクセル数)を指定します。デフォルト値は20です。

  • hでは、サンプル画像の高さ(ピクセル数)を指定します。デフォルト値は20です。

  • fでは、サンプル画像の形式を指定します。指定可能な値は、png(直接PNG画像ストリーム)、png_url (PNG画像のURL)、gif(直接GIF画像ストリーム)またはgif_url (GIF画像のURL)です。デフォルト値はpngです。その場合、MapViewerサーバーは、生成されたPNG画像データをサーバー・ディスクに保存することなく、ストリーミングによりクライアントに直接返します。

  • bgでは、サンプル画像のバックグラウンド・カラーを指定します。形式は0xrrggbbのように16進文字列である必要があります。たとえば、グレーの場合は0x808080となります。デフォルト値は、0xffffff(白)です。

    バックグラウンドを透明にするには、bgを拡張16進文字列として指定し、アルファ値を0xaarrggbbの形式で含めます。たとえば、0x00ffffffではスタイル画像のバックグラウンドが完全に透明になり、0x55ffffffは透明値が0x55 (10進値の80)の白のバックグラウンドです。アルファ値の範囲は、0x00(完全な透明)から0xff(完全な不透明)までです。

  • aaでは、サンプル画像をアンチエイリアシング・モードでレンダリングするかどうかを指定します。デフォルト値は、文字列trueです。アンチエイリアシングを使用しない場合は、文字列falseを指定します。

次の例では、グレーのバックグラウンド・カラーでデフォルト・サイズの20x20ピクセルのアンチエイリアシングされたPNG画像を生成し、MapViewerデフォルト・データソースのM.STARというマーカー・スタイルを表示しています。

http://www.mycorp.com/mapviewer/omserver?sty=m.star&bg=808080

先のリクエストでは、図2-4のような表示が生成されます。

図2-4 指定したマーカー・スタイルのサンプル画像

図2-4の説明は図の下のリンクをクリックしてください。
「図2-4 指定したマーカー・スタイルのサンプル画像」の説明

次の例では、デフォルトの白のバックグラウンド・カラーで幅が60ピクセル、高さが25ピクセルのアンチエイリアシングされたGIF画像を生成し、mvdemoというMapViewerデータソースのL.PHという線スタイルを表示しています。

http://www.mycorp.com/mapviewer/omserver?sty=l.ph&ds=mvdemo&f=gif&w=60&h=25&aa=true

先のリクエストでは、図2-5のような表示が生成されます。

図2-5 指定した線スタイルのサンプル画像

図2-5の説明は図の下のリンクをクリックしてください。
「図2-5 指定した線スタイルのサンプル画像」の説明

2.3 テーマ

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

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

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

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

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

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

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

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

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

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

この項の主な内容は次のとおりです。

2.3.1 事前定義済テーマ

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

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

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

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

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


注意:

この章で示す例のスタイル名の接頭辞には、次のネーミング規則を使用しています。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)を使用してレンダリングされます。

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

2.3.1.2 スタイリング・ルールに対するMapViewerでのSQL問合せの作成方法

スタイリング・ルールに対してMapViewerがSQL問合せを作成する方法を確認するために、Airportテーマの例(2.3.1.1項例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>

MapViewerは、このテーマを処理するときに、このスタイリング・ルールに対して次のような問合せ文字列を作成します。

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'です。これは、MapViewerのみが内部で使用します。

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

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

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

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

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

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

2.3.1.2項で説明したように、スタイリング・ルールの<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>要素を定義しています。この属性値はアプリケーションにより提供されます。MapViewerリクエストには、テーマ・セクションにバインディング・パラメータが定義されている必要があります。各バインディング・パラメータは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>要素を含むスタイリング・ルールの使用は、リリース10.1.3.1以前のバージョンのMapViewerとは互換性がありません。

例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>要素を使用する例が記載されている3.1.12項も参照してください。

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

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

<rendering>要素には、複数の<style>要素を定義できます(2.3.1.4項「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 事前定義済テーマのキャッシュ

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

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

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

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

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

2.3.1.7 地物ラベルと国際化

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


注意:

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

翻訳の提供、および特定のユーザー言語を使用してテーマにラベルを付けるようMapViewerに指示する手順は、以下のとおりです。

  1. 翻訳を準備します。

    一般的なMapViewerの事前定義済ジオメトリ・テーマは、基礎となるすべてのデータを表から取得します。(文字列タイプ)列のいずれかを、このテーマのラベリング列として指定できます。これをラベル列といいます。ラベル列を異なる言語に翻訳する必要がある場合、この表からすべての値を抽出して、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リソース・クラスまたは標準のプロパティ・クラスを基礎とすることができます。

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

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

  3. リソース・バンドルをMapViewerに登録することにより、テーマ定義でリソース・バンドル名を指定します。

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

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

    図2-6の説明は図の下のリンクをクリックしてください。
    「図2-6 テーマへのリソース・バンドルの指定」の説明

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

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

    Oracle Maps JavaScript API(6.6項を参照)またはXMLマップ・リクエストAPI(第3章を参照)の各マップ・リクエストに優先言語を指定します。

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

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

      setLabelLanguageCode(lang_code)メソッドを使用して、MapViewerが指定された言語のテキスト文字列を使用して地物にラベルが付けられるように、言語コードを指定できます。言語コードは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マップ・リクエストの一部として指定されていない場合、MapViewer自体で有効となっているロケール(含まれているJVM)に関係なく、デフォルトのテキスト文字列の値(表列に格納されているもの)が常に使用されます。

2.3.2 JDBCテーマ

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

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

空間ジオメトリに基づいたJDBCテーマの場合、MapViewerでは次のルールに従い、問合せで指定された列を処理します。

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

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

  • その他の列は属性データ列として扱われ、MapViewerにより使用される場合も、使用されない場合もあります。たとえば、レンダリング・スタイルが拡張スタイルの場合、すべての属性列は問合せの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テーマについてMapViewerが実行する全問合せは、次のとおりです。

SELECT geometry FROM states WHERE name='MA';

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

JDBCテーマの詳細は、3.2.9項<jdbc_query>要素を参照してください。

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

データベース表で2つの列(経度と緯度など)を使用してポイントの座標を表す場合、その2つの列に基づきJDBCテーマを定義してポイントをレンダリングできます。表に空間ジオメトリ列を含める必要はありませんが、含めることは可能です。ただし、テーマ・リクエストでポイント列だけでなくジオメトリ列も定義する場合、MapViewerでは、ジオメトリ列ではなく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式が自動的に問合せに追加されます。

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

例2-11 列に基づく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 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が事前定義済テーマとして定義されている場合でも、ユーザーがこのテーマを含むマップをリクエストすると、実行時にはMapViewerによりJDBCテーマとして処理されます。MapViewerでは、通常のJDBCテーマと同様に、デフォルトでSQL問合せにウィンドウ・フィルタ処理(問合せウィンドウがマップ・リクエストに含まれる場合)が課せられます。このデフォルトの動作を無視して、指定した問合せ文字列が変更なしで実行されるようにするには、例2-12に示すように、<features>要素にasis="true"と指定します。(asis属性の詳細は、3.2.9項を参照してください。)

2.3.3 イメージ・テーマ

イメージ・テーマは、遠隔操作および航空写真術などによる、地理的参照画像(ラスター)データを視覚化するのに便利な、特殊なMapViewerテーマです。

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

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

図2-7の説明は図の下のリンクをクリックしてください。
「図2-7 イメージ・テーマおよびボストンの道路を示すその他のテーマ」の説明

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

  • 画像データを、データベース表内のBLOB列に元の形式(JPEGなど)で格納するか、元の画像ファイルを指すOracle Multimediaオブジェクト(ORDSYS.ORDImage)として格納します。ORDSYS.ORDImageオブジェクトの作成については、『Oracle Multimediaユーザーズ・ガイド』を参照してください。

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

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

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

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

イメージ・テーマを事前定義するには、2.3.3.1項のガイドラインに従います。マップ・リクエストで動的なイメージ・テーマを定義するには、2.3.2項および3.2.9項で説明しているJDBCテーマの定義に関するガイドラインに従いますが、動的なイメージ・テーマに関する次の考慮事項にも注意してください。

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

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

イメージ・テーマの定義について、MapViewerでサポートされている画像形式は、GIF、JPEG、PNGおよびTIFFのみです。MapViewerで他の画像形式のデータを視覚化するには、Javaのoracle.sdovis.CustomImageRendererインタフェースを使用してカスタム・イメージ・レンダラを実装した後、実装クラスをmapViewerConfig.xmlファイルに登録し、特殊な形式の画像データに使用するカスタム・イメージ・レンダラをMapViewerに通知する必要があります。カスタム・イメージ・レンダラの実装および登録の詳細は、付録Cを参照してください。

イメージ・テーマを指定したマップ・リクエストの例と、MapViewerによるリクエストの処理方法の説明は、3.1.6項例3-6を参照してください。

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

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

例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>要素には、次の属性があります。

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

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

  • image_format: 画像データの形式を示す文字列。GIFまたはJPEGと指定した場合、MapViewerでは常に画像データをレンダリングできます。他の値(ECWなど)を指定した場合は、画像を正しくレンダリングするために、カスタム・イメージ・レンダラを実装してMapViewerに登録している必要があります。カスタム・イメージ・レンダラの実装の詳細は、付録Cを参照してください。

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

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

<styling_rules>要素のDTDについては、A.7項を参照してください。

2.3.4 GeoRasterテーマ

GeoRasterテーマは、GeoRasterオブジェクトを視覚化するのに便利な、特殊なMapViewerテーマです。GeoRasterはOracle Spatial and Graphの機能で、ラスター画像およびグリッド・データとその関連メタデータの格納、索引付け、問合せ、分析および配信を行います。GeoRasterオブジェクトは、SDO_GEORASTERデータ型を使用して定義します。GeoRasterの詳細は、Oracle Spatial and Graph GeoRaster開発者ガイドを参照してください。

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

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

    Oracle Databaseリリース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;
    

2.3.4.1項例2-17では、使用するGeoRasterデータを準備し、GeoRasterテーマをデータベースに格納します。

MapViewerでは、GeoRaster表のオブジェクトに関する2種類のマップ・リクエストをサポートします。

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

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

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

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

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

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

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

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

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

  • 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属性は指定されていないため、地理参照処理の間または後に設定される空間解像度の値を使用して、MapViewerが最適なピラミッド・レベルを計算します。(例2-14で、WHERE句のgeorid=1は、PCI_IMAGEという名前のGeoRaster表にあるGEORIDという列を参照しています。)

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

例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ビュー(2.9.2項を参照)に行を挿入することにより、GeoRasterテーマの定義をデータベースに格納する必要があります。例2-16では、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-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で示したように、2.3.4項で解説した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>要素では、2.3.4.2項で説明するビットマップ・マスクを1つ以上指定することもできます。

<styling_rules>要素のDTDについては、A.7項を参照してください。

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

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

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

例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>

<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.3.4.3 GeoRasterテーマの再投影

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

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

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

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

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

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

2.3.5 ネットワーク・テーマ

ネットワーク・テーマは、Oracle Spatial and Graphネットワーク・データ・モデルを使用して定義されるネットワークを視覚化するのに便利な、特殊なMapViewerテーマです。ネットワークは一連のノードおよびリンクで構成されています。通常、リンクやパスには方向がありますが、ネットワークは有向にも無向にもできます。また、ネットワークは、ネットワーク階層と呼ばれる様々な抽象レベルに編成可能です。MapViewerは、ネットワーク内のネットワーク空間表が同じ座標系を使用し、これらの表がOracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドの説明に従って索引付けおよび登録されていることを想定しています。

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

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

  • <jdbc_network_query>要素: 動的に定義されるネットワーク・テーマであることを指定します。この要素の完全なDTDは、3.2項のマップ・リクエストDTDに含まれています。

  • 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.3.5.2項を参照してください。

ネットワーク・テーマは、リンク、ノードおよびパスの属性、またはこれらの組合せを併用できます。そのような場合、MapViewerでは、リンク、パス、ノードの順にレンダリングします。

例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ビュー(2.9.2項を参照)に行を挿入することにより、ネットワーク・テーマの定義をデータベースに格納する必要があります。例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については、A.7項を参照してください。

2.3.5.2 ネットワーク分析でのMapViewerの使用

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

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

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

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

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

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

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

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

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

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

例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>

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

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

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

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

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

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

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

例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 and Graphトポロジ・データ・モデルを使用して定義されるトポロジを視覚化するのに便利な、特殊なMapViewerテーマです。トポロジ・データ・モデルを使用することにより、トポロジ内のノード、エッジおよびフェースに関するデータを処理できます。ノード、エッジおよびフェースの空間表現は、SDO_GEOMETRY型の空間ジオメトリです。ノードやエッジの場合、ジオメトリは明示的に格納されます。フェースの場合は、基線(外側と内側)が格納され、その結果フェース・ジオメトリを生成できます。

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

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

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

  • <jdbc_topology_query>要素: これが動的に定義されるトポロジ・テーマであることを指定します。この要素にはSQL問合せ文(終了セミコロンなし)を指定できます。この要素の完全なDTDは、3.2項のマップ・リクエストDTDに含まれています。

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

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

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

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

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

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

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

例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>

MapViewerでは、トポロジのノード、エッジおよびフェースをレンダリングするデバッグ・モードもサポートしています。デバッグ・モードを指定するには、<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-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ビュー(2.9.2項を参照)に行を挿入することにより、トポロジ・テーマの定義をデータベースに格納する必要があります。例2-26では、トポロジ・テーマの定義を格納します。

例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-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については、A.7項を参照してください。

2.3.7 WFSテーマ

WFSテーマは、Open GIS Consortium (OGC)のWeb Feature Service (WFS)プロトコル、特にWFS1.0.0の実装仕様を使用して配信されるデータのレンダリングをサポートする、特殊なMapViewerテーマです。

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

  • 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属性: スタイルがロードされるMapViewerデータソースを指定します。

  • 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リクエスト用の機能アドレスに対応します。MapViewerの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 and Graphの形式で指定します。たとえば、EPSG:4325SDO:8307および8307 (Spatial and GraphのSRID値)は、同じSRSを表します。EPSGのSRS値を指定した場合、MapViewerでは等価のSpatial and Graph (SDO) SRIDを識別しようとし、一致するSRIDが見つからなかったときは、該当するテーマのSRIDはゼロ(0)とみなされます。MapViewerは、一致するSRID値を次のようにして探します。

    1. MapViewer構成ファイルで指定したSDO SRIDからEPSG SRIDへのマッピング・ファイルに指定されているカスタム・マッピングを使用します(1.6.2.11項を参照)。

    2. Spatial and Graphファンクションの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ビュー(2.9.2項を参照)に行を挿入することにより、WFSテーマの定義をデータベースに格納する必要があります。例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-28では、WFS地物POIが実表として使用され、属性THE_GEOMが空間列です。スタイリング・ルール情報にはservice_urlおよびsrs情報が含まれており、例2-28では指定されていませんが、key_column値を指定することもできます。スタイリング・ルールの<features>要素と<label>要素は、ジオメトリ・テーマで使用されるルールとほぼ同じです。非表示情報(<hidden_info>要素)を定義してOracle Mapsアプリケーションで使用することもできます。

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

例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>

WFSのマップ・リクエストの例は、3.1.14項も参照してください。

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

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サービスにアクセスすると、MapViewerはそのWMTSサービスの機能情報をキャッシュします。WMTSテーマの作成時にMap Builderでプロキシ・サーバーを指定したり、WMTSテーマの使用時にMapViewer構成ファイル(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サーバーに格納されるタイル画像の形式を指定します。MapViewerでサポートされる形式は、tif、jpeg、pngおよびpng8です。

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

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

  • service_url属性: HTTP GETリクエスト用の機能アドレスに対応します。MapViewerの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-8を参照)。

    図2-8 snap_to_tile_scale属性

    図2-8の説明は図の下のリンクをクリックしてください。
    「図2-8 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属性: MapViewerでは現在使用されていません。デフォルトは文字列defaultです。

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

    詳細は、第2.3.8.1項「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仕様のバージョン。


関連項目:

MapViewer用のWMTSサービス、WMTS操作およびMapViewer用のWMTSサービスの準備の詳細は、付録F「MapViewerでの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-9では、リクエスト・スケールの範囲が1:3000から1:1500の場合、常に1:2000を使用してマップが生成されます。

    図2-9 tile_resizing_optionのunbiased値

    図2-9の説明は図の下のリンクをクリックしてください。
    「図2-9 tile_resizing_optionのunbiased値」の説明

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

    図2-10 tile_resizing_optionのexpand_biased値

    図2-10の説明は図の下のリンクをクリックしてください。
    「図2-10 tile_resizing_optionのexpand_biased値」の説明

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

    図2-11 tile_resizing_optionのcontract_biased値

    図2-11の説明は図の下のリンクをクリックしてください。
    「図2-11 tile_resizing_optionのcontract_biased値」の説明

第2.3.8.2項「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に指定された値とは無関係に、同じ操作(拡大または縮小)が実行されます。たとえば、第2.3.8.1項「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ビュー(第2.9.2項を参照)に行を挿入することにより、WMTSテーマの定義をデータベースに格納する必要があります。例2-31では、WMTSテーマの定義を格納します。

例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-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-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 カスタム・ジオメトリ・テーマ

カスタム・ジオメトリ・テーマは、外部空間データ(シェープファイルなど、Oracle Spatial and Graph以外のネイティブ形式の空間データ)に関連付けられます。カスタム・ジオメトリ・テーマは空間プロバイダ・クラスを使用してネイティブ・データを取得します。また、外部プロバイダは空間データ・プロバイダ・プラグイン・メカニズムを使用する必要があります。MapViewerには、外部プロバイダが実装する必要がある空間プロバイダ・インタフェース・クラスが用意されています。このインタフェース実装には、次のメソッドが含まれます(一部のメソッドは、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>
   * MapViewer 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ツールなどのアプリケーションではこれらのメソッドを利用して、空間データ・プロバイダに関する情報を処理することが可能です。プロバイダは、各自に固有の空間索引付けメカニズムを実装できます。たとえば、MapViewerにはシェープファイル・プロバイダ用の実装が用意されており、buildSpatialIndexメソッドによって、.oixという拡張子が付いた索引付けファイルがshapefileディレクトリに作成されます。付録Dに、MapViewerでサンプル空間プロバイダを実装および登録する方法の例が記載されています。

カスタム・ジオメトリ・テーマを含むMapViewerのネイティブ・データをレンダリングするには、次の手順を実行します。

  1. プラグイン・インタフェースに基づく空間プロバイダ・クラスを実装し、そのプロバイダの実装を含むjarファイルを生成します。このjarファイルを、MapViewerのCLASSPATH定義に含まれるディレクトリにコピーします。

  2. プロバイダをMapViewer構成に登録します。MapViewerとMap Builderには、ESRIシェープファイルにアクセスするためのシェープファイル・プロバイダ、OGRでサポートされるデータ形式にアクセスするためのGDAL-OGRプロバイダ、およびTeradataデータベースに格納されているデータにアクセスするためのTeradataプロバイダが付属しています。(これらの環境における空間データの処理の詳細は、GDAL-OGRとTeradataのドキュメントを参照してください。)GDAL-OGRライブラリgdal.jarと、Teradataライブラリterajdbc4.jarおよびtdgssconfig.jarは、サーバーのクラスパスに配置されている必要があります。MapViewer構成ファイルの登録セクションは、次のようになります。

    <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によってMapViewerがデータファイルを探す場所を定義するので、MapViewerがアクセスできるディレクトリを指定する必要があります。MapViewerは、まずテーマ定義情報に基づいてデータファイルを探します。テーマ定義に定義されたデータ・パスにアクセスできない場合は、構成ファイルに定義されたデータ・パスを探します。

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

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

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

使用可能な空間プロバイダ用のランタイム・パラメータは、次のとおりです(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など)。定義されている場合、この値がまず、MapViewerでjdbcurl値のかわりに使用されます。

    • basetable: 空間表の名前。

    • geomcolumn: 空間列の名前。

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

例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>

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

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

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

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

  • 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 and Graphジオメトリ・テーマに使用する場合と同じ機能を持ちます。<parameters>要素では、プロバイダが受け入れるランタイム・パラメータを定義します。シェープファイル・プロバイダの場合、ランタイムparameterファイル名は、シェープファイル・データへのパスを定義します。

例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>' 
);

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

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

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

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

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

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

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

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

  • 列の名前。

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

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

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

MapViewerの注釈テキスト・テーマは、ST_ANNOTATION_TEXT型の列を持つデータベース表に関連付けられます。各注釈テキスト要素について、MapViewerでは次のものがレンダリングされます。

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

  • 注釈テキスト要素に関連付けられた引出し線(NULL以外の場合)。この場合、ユーザーは引出し線をレンダリングするためのMapViewerスタイルを選択できます。

各注釈テキスト要素にはジオメトリによって表されるエンベロープが含まれており、空間索引付けに使用されます。そのため、MapViewerの注釈テキスト表で空間索引付けを使用するには、次の手順を実行する必要があります。

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

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

  • datasource: データソース名

  • jdbc_srid: 空間参照ID

  • annotation_table: 注釈テキスト表

  • annotation_column: 注釈テキスト列

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

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

例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では、注釈テキスト表を作成し、MapViewerで使用できるように準備します。

例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 MapViewer'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 and Graphの線形参照システム(LRS)を使用して定義される地物を視覚化するのに便利な、特殊なMapViewerテーマです(『Oracle Spatial and Graph開発者ガイド』を参照)。

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

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

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

例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-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表または結合表のいずれか一方、あるいはその両方からの属性のリストを指定します。(詳細は、3.2.9項「jdbc_query要素」を参照してください。)

<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テーマを使用するマップ・リクエストを示しています。

例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>

関連項目:

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

2.3.12 テーマ・マッピング

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

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

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

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

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

図2-12の説明は図の下のリンクをクリックしてください。
「図2-12 テーマ・マッピング: 拡張スタイルとテーマの関係」の説明

MapViewerでは、図2-12で示した個々の範囲ベースのバケットに加えて、A.6.1項で説明しているその他のバケット・スタイルもサポートします。円グラフを描く場合など、テーマ・マッピングに複数の属性列を使用することもできます(3.1.9項を参照)。

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

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

例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ビューについては、2.9.2項を参照してください。)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")であるためです。


注意:

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

seq属性値(seq="0"など)はMapViewerにより無視されます。MapViewerでは、定義内の要素の順序によってのみ順序が決まります。


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

例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に関する注意は、次のとおりです。

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

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

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

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

例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-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.3.12.1 外部属性データを使用したテーマ・マッピング

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

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

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

  1. MapViewerの定義済インタフェースoracle.mapviewer.share.ext.NSDataProviderを実装することにより、Java非空間データ・プロバイダを実装します。

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

  3. 非空間データ・プロバイダの実装クラスが含まれるライブラリを、MapViewerのライブラリ・パス(MapViewerのweb/WEB-INF/libディレクトリなど)に入れます。

  4. 次のメソッドをMapViewer 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のパラメータについては、MapViewerに関するJavadocリファレンス情報を参照してください。この情報は、http://host:port/mapviewer/mapclientという形式のURLで入手できます。ここで、hostおよびportは、Oracle Fusion Middlewareが着信リクエストをリスニングする場所です。たとえば、http://www.mycorp.com:8888/mapviewer/mapclientです。

例2-48は、単純な非空間データ・プロバイダの実装を示しています。この実装は、デフォルトの非空間データ・プロバイダとしてMapViewerにも提供されます。

例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 MapViewer 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マップの外観に影響を与えます。

外観関連の属性を指定するには、<theme>要素(3.2.20項を参照)をXML APIまたはJavaBeanベースのAPI(特に4.3項を参照)で使用します。

2.4 マップ

マップは、次のような要素および属性の組合せで構成できます。

  • バックグラウンド・イメージ

  • タイトル

  • 凡例

  • 問合せウィンドウ

  • 脚注(著作権表示など)

  • ベース・マップ

  • 事前定義済テーマ(ベース・マップ内のテーマに追加)

  • JDBCテーマ(動的問合せを含む)

  • 動的に定義される(一時)スタイル

これらの要素および属性をマップ・リクエストで指定した場合、生成されるマップの内容と外観が定義されます。マップ・リクエストで使用可能な要素および属性の詳細は、第3章を参照してください。

マップには、ベース・マップと、ウィンドウ内で相互に積み上げてレンダリングした多数のテーマを含めることができます。マップには、マップ内のすべてのテーマで共有する必要がある、関連付けられた座標系が含まれます。たとえば、マップ座標系が8307(経度/緯度(WGS 84)に相当、GPSデバイスで使用される最も一般的な座標系)の場合、マップ内のすべてのテーマにこの座標系を使用して定義されたジオメトリが必要です。

マップにテーマを追加するには、ベース・マップ名を指定するか、プログラム・インタフェースを使用してテーマを追加します。テーマが追加される順序によりテーマのレンダリングの順序が決まり、最後に指定されたテーマが最上部に配置されるため、バックグラウンドおよびフォアグラウンドに必要なテーマを必ず把握しておいてください。

データベース・ユーザーのすべてのベース・マップ名および定義は、そのユーザーのUSER_SDO_MAPSビューに格納されます。このビューについては、2.9項および2.9.1項を参照してください。USER_SDO_MAPSビューのDEFINITION列には、ベース・マップのXML定義が含まれます。

例2-49では、ベース・マップの定義を示しています。

例2-49 ベース・マップのXML定義

<?xml version="1.0" ?>
<map_definition>
<theme name="theme_us_states"    min_scale="10"  max_scale="0"/>
<theme name="theme_us_parks"     min_scale="5"   max_scale="0"/>
<theme name="theme_us_highways"  min_scale="5"   max_scale="0"/>
<theme name="theme_us_streets"   min_scale="0.05" max_scale="0"/>
</map_definition>

ベース・マップ内の各テーマは、このテーマの表示範囲である参照可能なスケール範囲に関連付けることができます。例2-49では、マップ・リクエストが0.05以下で0より大きいマップ・スケール(この場合、非常に細かな詳細を示すスケール)に対するものでないかぎり、theme_us_streetsというテーマは表示されません。min_scale属性およびmax_scale属性が指定されていない場合、ベース・マップを表示すると常にテーマが表示されます。(マップ・スケールの詳細は、2.4.1項を参照してください。)

ベース・マップ内のテーマの表示順序は、ベース・マップ定義でのテーマの順序と同じです。例2-49では、最初にtheme_us_statesテーマ、次にtheme_us_parkstheme_us_highways、最後に(マップ・スケールがすべての指定範囲内である場合)theme_us_streetsがレンダリングされます。

この項の主な内容は次のとおりです。

2.4.1 マップのサイズおよびスケール

マップ・サイズは、マップ・データ領域の単位で表したマップの高さです。たとえば、マップ・データがWGS 84地理座標内にあり、マップの中心が(-120.5, 36.5)でサイズが2の場合、マップの高さは2度(10進)、Y(緯度)の下限値は35.5度(10進)、上限値は37.5度(10進)です。

マップ・スケールは、画面またはデバイス上の1インチで表される、ユーザーのデータ領域内の単位数で表されます。MapViewerのマップ・スケールは、マップ・スケールの一般的な表現方法である1/nの分母値です。この場合の意味は次のとおりです。

  • 分子の1は、表示されたマップ上の1単位(MapViewerでは1インチ)です。

  • 分母のnは、表示されたマップ上の1単位(MapViewerでは1インチ)で表される測定単位(度(10進)、メートル、マイルなど)の数値です。

例:

  • コンピュータ・ディスプレイ上の1インチがユーザー・データの0.5度(10進)に相当する場合、分数は1/0.5となります。この分数の10進値は2.0ですが、MapViewerのスケール値は0.5です。

  • コンピュータ・ディスプレイ上の1インチがユーザー・データの2マイルに相当する場合、分数は1/2となります。この分数の10進値は0.5ですが、MapViewerのスケール値は2です。

  • コンピュータ・ディスプレイ上の1インチがユーザー・データの10マイルに相当する場合、分数は1/10となります。この分数の10進値は0.1ですが、MapViewerのスケール値は10です。

<theme>要素のmin_scale属性およびmax_scale属性は、テーマの参照可能なスケール範囲を示します。これらの属性は、現在のマップ・スケールに応じて、テーマが表示されるかどうかを制御します。min_scaleのデフォルトのスケール値は正の無限大であり、max_scaleのデフォルト値は負の無限大です(つまり、デフォルトではすべてのマップ・スケールにおいてテーマが表示され、可能な場合は表示特性が割り当てられます)。

  • min_scaleは、テーマを表示するためにこの値まで表示をズームインする必要のあるスケール値です。たとえば、公園のmin_scale値が5であり、現在のマップ・スケール値が5以下で、しかもmax_scale値より大きい場合、公園は表示に含まれます。ただし、表示をズームアウトしてマップ・スケール値が5より大きくなると、公園は表示に含まれません。

  • max_scaleは、テーマが表示されないようにするためにこの値を超えるまで表示をズームインする必要のあるスケール値です。たとえば、郡のmax_scale値が3であり、現在のマップ・スケール値が3以下である場合、郡は表示に含まれません。ただし、表示をズームアウトしてマップ・スケール値が3より大きくなると、郡は表示に含まれます。

min_scaleの大きな値は、大まかなマップ詳細と、地図製作における小さいスケールに関連付けられており、max_scaleの大きな値は、細かいマップ詳細と、地図製作における大きいスケールに関連付けられています。(MapViewerでのマップ・スケールの意味は、地図製作のマップ・スケールにおける一般的な意味とは異なる点に注意してください。)テーマのmin_scale値は、max_scale値より大きくする必要があります。2.4項例2-49には、min_scale値とmax_scale値が含まれています。

ベース・テーマ・スケールと異なる値を持つラベルの表示または非表示を有効にするには、テーマ・ラベル・スケールのパラメータであるlabel_min_scaleおよびlabel_max_scaleを使用して、テーマ・ラベルのスケール値も割り当てます。これらのパラメータはmin_scaleおよびmax_scaleパラメータと似ていますが、ラベルが表示されるのは、マップ・スケールがlabel_min_scaleおよびlabel_max_scaleによって定義された参照可能な範囲内にある場合です。(min_scaleおよびmax_scaleで定義された参照可能なスケール範囲内にテーマがない場合、ラベル・スケール値は無視されます。)次に示すのは、ラベル・スケール値が指定されているテーマ定義です。この場合、ラベルはマップ・スケールが5と2の間であるときに表示されますが、テーマ地物はマップ・スケールが10と0の間であるときに表示されます。

<theme name="theme_us_states" min_scale="10" max_scale="0" 
     label_min_scale="5" label_max_scale="2"/>

MapViewerによって返されるマップの現在のマップ・スケールを決定するには、まずマップ・サイズ、つまりマップ・データに関連付けられた座標系におけるマップの高さ(垂直範囲)を調べます。たとえば、高さが10(マイル、メートル、度(10進)など、データに関連付けられた測定単位)のマップがリクエストされ、サイズが500×350ピクセル(350が高さ)のデバイスにマップが描画されるとします。MapViewerでは、一般的な画面解像度として96dpiが使用されます。96ピクセルは1インチであるため、返されるマップの高さは3.646インチ(350/96 = 3.646)です。この例では、マップのサイズは10であるため、マップ・スケールはおよそ2.743 (10/3.646 = 2.743)となります。

また、scale_modeテーマ属性値をratioとして指定すれば、単位を指定することなく、1:50000のスケールを表す50000のようなマップ・スケール値を使用してマップをリクエストできます。(scale_modeテーマ属性値がscreen_inchの場合、スケールは単位を表します。)単位なしで定義されているスケールを使用するには、中心および比率スケールを指定してマップをリクエストします。

比率スケールに相当するMapViewerの画面インチ・スケールを見つけるには、次の手順を実行します。

  1. 1画面ピクセルが何メートルに相当するのかを求めます。たとえば、画面解像度が96dpi (dots per inch)の場合、1画面ピクセルは画面上で0.000265(= 0.0254/96)メートルに相当します。

  2. 次のようにして、1画面ピクセルのマップ・スケール(mapdotScaleの値)を求めます。

    • 投影データ(メートル)の場合は、ステップ1の結果に比率スケールを掛けます。たとえば、比率スケールが50000で画面解像度が96dpiの場合、結果は1ピクセル当たり13.25(= 50000 * 0.000265)メートルになります。

    • 測地データ(度)の場合は、ステップ1の結果に1度当たりのメートル数(地球の表面上)を掛けます。(この数値は、データに関連付けられている座標系によって異なります。)たとえば、1度が111195メートルで、画面解像度が96dpiの場合、結果は1ピクセル当たり29.466675(= 111195 * 0.000265)メートルになります。

    • 他の単位を使用するデータの場合は、メートルを使用する投影データのアプローチを使用します。

  3. MapViewerのスケールは画面ピクセル単位ではなく画面インチ単位なので、ステップ2の結果にdpi値を掛けます。たとえば、ステップ2の結果が13.25メートル(96dpi時)の場合、1画面インチは1272(= 13.25 * 96)メートルになります。

2.4.2 マップ凡例

マップ凡例は、マップの上に描画される挿入図であり、様々な色、記号、線、パターンなどが表す内容を説明したものです。凡例の内容および外観を柔軟に指定できます。次のことが可能です。

  • バックグラウンド、枠線スタイルおよびフォントのカスタマイズ

  • 凡例における1つ以上の列の使用

  • 凡例エントリを区切る空白の追加

  • 凡例エントリのインデント

  • 拡張スタイルを含む任意のMapViewerスタイルの使用

例2-50は、凡例を含むリクエストからの抜粋です。

例2-50 マップ・リクエストに含まれる凡例

<?xml version="1.0" standalone="yes"?>
<map_request
             basemap="density_map"
             datasource = "mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="false"
             format="PNG_STREAM">
  <center size="4.2">
     <geoFeature render_style="m.image134_bw">
         <geometricProperty typeName="center">
             <Point srsName="SDO:8307">
                 <coordinates>-121.2615, 37.5266</coordinates>
             </Point>
         </geometricProperty>
     </geoFeature>
  </center>
 
  <legend bgstyle="fill:#ffffff;fill-opacity:100;stroke:#a3a3a3" profile="MEDIUM" position="SOUTH_WEST">
          <column>
            <entry text="Legend" is_title="true" />
            <entry style="M.IMAGE134_BW" text="Center" />
            <entry style="M.ALL_CITY_L2" text="Cities" />
            <entry is_separator="true" />
            <entry style="L.S04_ROAD_INTERSTATE" text="Interstates" />
            <entry text="County population:" />
            <entry style="V.COUNTY_POP_DENSITY_8" tab="1" />
          </column>
  </legend>
 
  <!--
  <themes>
 
  </themes>
  -->
 
</map_request>

図2-13は、例2-50で指定した凡例を含むマップを示しています。

図2-13 凡例付きのマップ

図2-13の説明は図の下のリンクをクリックしてください。
「図2-13 凡例付きのマップ」の説明

例2-50および図2-13に関する注意は次のとおりです。

  • この例は、単一列を使用した凡例を示していますが、凡例には複数の列を作成できます。

  • 列定義内の各エントリは、ラベル・テキストおよびそのテキストが凡例のタイトルである(is_title="true")かどうか、スタイル名および関連テキスト、縦方向の余白として(この例ではcitiesエントリの後に)セパレータを追加する(is_separator="true")ことなどを表しています。

1つ以上の<column>要素に凡例のコンテンツを指定するかわりに、マップ・リクエストに基づく自動凡例をリクエストできます。自動凡例を使用し、凡例のヘッダーを指定すると、マップ領域と相互作用するテーマに基づいた凡例がMapViewerで生成されます。マップ・リクエストおよびベース・マップの各テーマが考慮されます。(ただし、テーマが問合せウィンドウと相互作用するが、マップ上に表示される地物がそのテーマに含まれていない場合など、凡例の項目によっては表示されないものもあります。)

例2-51は、(<legend>要素に<column>要素が含まれていないため)自動凡例をリクエストするマップ・リクエストです。

例2-51 自動凡例に関するマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
             title="Automatic legend"
             datasource = "mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="false"
             format="PNG_STREAM">
  <center size="4.5">
     <geoFeature >
         <geometricProperty typeName="center">
             <Point>
                 <coordinates>-122.2615, 37.5266</coordinates>
             </Point>
         </geometricProperty>
     </geoFeature>
  </center>
 
  <themes>
    <theme name="THEME_COUNTIES_3397829" />
    <theme name="THEME_US_ROAD1" />
    <theme name="THEME_US_AIRPORT" />
  </themes>
 
 <legend bgstyle="fill:#ffffff;fill-opacity:128;stroke:#ff0000;stroke-opacity:128" profile="medium" font="Courier">
  </legend>
 
</map_request>

例2-52に示す自動凡例のリクエストでは、<legend>要素で、凡例項目の生成に使用するテーマが指定されています。この例では、マップの結果に多くのテーマが表示された場合でも、凡例項目は、<legend>要素に指定されたTHEME_COUNTIES_3397829テーマおよびTHEME_US_AIRPORTテーマに基づきます。

例2-52 テーマが指定された自動凡例

<map_request
             title="Legend with themes defined"
             datasource = "mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="false"
             format="PNG_STREAM">
  <center size="4.5">
     <geoFeature >
         <geometricProperty typeName="center">
             <Point>
                 <coordinates>-122.2615, 37.5266</coordinates>
             </Point>
         </geometricProperty>
     </geoFeature>
  </center>
 
  <themes>
    <theme name="THEME_COUNTIES_3397829" />
    <theme name="THEME_US_ROAD1" />
    <theme name="THEME_US_AIRPORT" />
  </themes>
 
 <legend bgstyle="fill:#ffffff;fill-opacity:128;stroke:#ff0000;stroke-opacity:128" profile="medium" font="Courier">
  <themes>
    <theme name="THEME_COUNTIES_3397829" />
    <theme name="THEME_US_AIRPORT" />
  </themes>
 </legend>
 
</map_request>

自動凡例については、<column>要素は使用できません。<legend>要素に<column>要素が含まれている場合、列/エントリの凡例が作成されます。

MapViewerでは、自動凡例項目の作成時に、次の注意事項があります。

  • 各凡例列のエントリは最大で5つです(拡張スタイルは1つのエントリとみなされます)。

  • 単純なレンダリング・スタイルの凡例テキストは、テーマの説明(定義されている場合)またはテーマ名から取得されます。

  • 複数のテーマで使用されているレンダリング・スタイルは、凡例で繰り返されますが、適用されるテーマに関連するテキストも付加されます。

  • ラベリング・スタイルは凡例では繰り返されません。ラベリング・スタイルのスタイル・テキストは、スタイルの説明から取得されます。

  • 拡張スタイルは凡例では繰り返されません。

マップ・リクエストへの凡例の追加の詳細は、3.2.11項を参照してください。

さらに、マップ・タイトル、注釈またはロゴ(あるいはその組合せ)を指定する場合は、凡例およびその他の地物の位置が異なるようにしてください。(マップ・タイトル、注釈およびロゴについては、1.6.2.5項を参照してください。)凡例のデフォルト位置はSOUTH_WESTです。

2.5 データソース

データソースは、データベースのスキーマまたはユーザーに対応します。データベース・スキーマ内で空間データを描画するには、まずそのスキーマ用のデータソースを永続的または動的に定義(作成)する必要があります。

  • MapViewer構成ファイル(mapViewerConfig.xml)で接続情報およびユーザー・ログイン資格証明を指定すると、データソースを永続的に定義できます。

  • MapViewer管理(Admin)ページを使用すると、データソースを動的に定義または変更できます。

各マップ・リクエストでは、マスター・データソースを指定する必要があります。ただし、マップ・リクエストに追加された個々のテーマには異なるデータソースを指定できます。これにより、異なるデータベース・スキーマに格納されているデータの集約が容易になります。データソースが指定されていないテーマは、マスター・データソースに関連付けられます。ベース・マップ(したがって、それに含まれるテーマ)は、常にマスター・データソースに関連付けられます。テーマを処理する際、定義で参照されるスタイルと同様に、基礎となるデータはすべてそのテーマに関連付けられたデータソースからアクセス可能であることが必要です。

各データソースには、関連付けられたレンダラ(マッパーまたはマップ・メーカーとも呼ばれる)があります。その数は、<map_data_source>要素のnumber_of_mappers属性で定義されています。この属性(第1.6.2.15項を参照)は、マップ・リクエストの処理時に、データソースごとに作成されるデータベース接続数に影響を与えます。データソースで指定されたレンダラの数は、そのデータソースに対して処理可能な同時リクエストの最大数でもあります。各追加レンダラに必要なメモリーの量はわずかですが、多数(100など)のレンダラを指定すると、処理が認められたマップ・リクエスト数が多すぎる場合に基礎となるCPUリソースに負荷がかかり、MapViewerサーバー全体のパフォーマンスに影響を及ぼすという不都合が生じる可能性があります。

各データソースには、独自の内部メタデータ・キャッシュがあります。メタデータ・キャッシュには、そのデータソースから作成されたすべての事前定義済テーマやアクセス済の全スタイルの定義が保持されています。これにより、必要なときにスタイルや事前定義済テーマを繰り返しデータベースに問い合せる必要がなくなります。

2.6 マップの生成方法

マップ・リクエストがMapViewerサーバーに着信すると、サーバーではリクエスト内のマスター・データソースに関連付けられたレンダラから使用されていないものを選択します。この項では、MapViewerサーバーでマップを生成する際のプロセスについて説明します。つまり、MapViewerでは次の手順が実行されます。

  1. 受信XMLマップ・リクエストを解析し、処理します。

  2. テーマごとにデータを準備します(同時に実行)。

  3. 各テーマをレンダリングし、ラベルを付けます。

  4. 最終的な画像またはファイルを生成します。

MapViewerにより生成された各マップは、有効なXMLマップ・リクエストを受信した結果です。(JavaBeanベースのAPIを使用する場合、リクエストは自動的にXML文書に変換され、MapViewerサーバーに渡されます。)XMLマップ・リクエストは解析され、その内容が検証されます。次に、MapViewerではXMLリクエストで指定されている動的スタイルを作成します。ベース・マップに含まれるすべてのテーマ(ベース・マップが指定されている場合)と、指定された事前定義済テーマやJDBCテーマから、テーマ・リストが作成されます。リクエストで指定されている個々の地物は、すべて1つの一時テーマにまとめられます。つまり、受信リクエストの解析後、マップで表示されるデータはすべて、テーマのリストの形でMapViewerレンダリング・エンジンに提示されます。

リスト内でのテーマの順序付けは、テーマのレンダリングの順序を決定するため重要です。ベース・マップ(存在する場合)に含まれるすべてのテーマがまずリストに追加され、次に指定されたすべてのテーマ(事前定義済またはJDBC)が追加されます。個々の地物をすべて含むテーマは最後のテーマとして追加されます。リクエストされたマップのその他の地物(凡例、マップのタイトル、脚注など)が作成され、後でレンダリングするために保存されます。

MapViewerでは、リクエスト内のテーマごとにデータを準備するための別々の実行スレッドが作成され、テーマの準備が同時に行われます。事前定義済テーマの場合は、テーマの定義とその他の情報(現行のマップ・リクエスト・ウィンドウなど)に基づいて問合せを作成することを意味します。この問合せは実行のためデータベースに送信され、結果セットが返されます。MapViewerでは結果セットに基づき、レンダリング可能な個々のオブジェクトを作成します。

  • 完全にキャッシュされている事前定義済テーマの場合は、すべてのレンダリング可能なオブジェクトがすぐに使用可能であるため、データベースに問合せを送信しません。

  • JDBCテーマの場合、ユーザーが指定した問合せは、そのまま実行されるか(JDBCテーマの定義でasis属性値がTRUEである場合)、空間フィルタ副問合せが自動的に適用されて実行されます。空間フィルタの部分は、ユーザーの問合せの結果を現行のリクエスト・ウィンドウ内の結果に制限するために使用されます。

  • すでにレンダリング可能な地物があるテーマ(リクエストに個々の地物がすべて含まれているテーマなど)の場合は、レンダリング可能なオブジェクトを作成する必要はありません。

マップ・リクエストのすべてのテーマを準備し、必要なデータをすべて収集すると、MapViewerはマップのレンダリングを開始します。結果のマップを保持するために空の新しいメモリー内画像を作成し、必要なバックグラウンド(色または画像)を描画します。次にテーマ・リスト内のすべてのテーマをレンダリングします。


注意:

すべての画像テーマまたはGeoRasterテーマは、テーマ・リスト内での位置には関係なく、常に最初にレンダリングされます。しかし、その他のすべてのテーマは、テーマ・リスト内での出現順にレンダリングされます。

テーマごとに、MapViewerの内部で決定された順序で地物がレンダリングされます。各地物のレンダリングには、レンダリング・スタイルの描画メソッドを起動する必要があります。すべてのテーマがレンダリングされると、ラベリング・プロセスが開始します。地物にテキストでラベルを付ける必要のある各テーマに対して、MapViewerは地物のタイプ(ポリゴンまたは線など)に応じてラベル付けのための特定のアルゴリズムを起動します。

すべてのテーマをレンダリングし、(必要に応じて)ラベルを付けると、MapViewerは内部のマップ画像上にその他のマップ地物(凡例など)を描画します。次に、その画像を元のマップ・リクエストで指定されている形式(PNGまたはGIFなど)に変換します。ただし、SVGマップの場合は、内部画像を使用するかわりにまず空のSVGマップ・オブジェクトを作成し、レンダリング・プロセスの結果としてSVG文書を作成し、それをマップ・オブジェクトに挿入します。

2.7 スキーマ間のマップ・リクエスト

データベース・ユーザーは、他のデータソース・ユーザーがアクセスを許可されている表のデータを選択するために、別のデータベース・ユーザーに関連付けられたデータを使用するテーマを指定したマップ・リクエストを発行できます。たとえば、ユーザーSCOTTが、ユーザーMVDEMOに関連付けられたデータを使用するマップ・リクエストを発行するとします。通常、ユーザーSCOTTは、ユーザーMVDEMOが所有する関連する表に対するSELECTアクセス権が付与されていることが必要で、一般に<theme>要素にはschema-name.table-nameの形式で表を指定する必要があります。ここでは、次の使用例を示します。

  • ジオメトリ表の場合、MVDEMOのジオメトリ表に対するSELECT権限をSCOTTに付与します(例2-53を参照)。

  • GeoRaster表の場合、MVDEMOのGeoRaster表およびラスター・データ表に対するSELECT権限をSCOTTに付与します(例2-54を参照)。

  • トポロジ・データ・モデル表の場合、MVDEMOのトポロジ表、トポロジ列の索引表および関連するトポロジ情報の表(topology-name_EDGE$、topology-name_NODE$、topology-name_FACE$、topology-name_RELATION$)に対するSELECT権限をSCOTTに付与します(例2-55を参照)。

  • ネットワーク・データ・モデル表の場合、MVDEMOのネットワーク・リンク、ノード、パスおよびパスリンクの表に対するSELECT権限をSCOTTに付与します(例2-56を参照)。

例2-53は、SCOTTユーザーで定義されたデータソースからジオメトリ表MVDEMO.STATESにアクセスする動的テーマを示しています。

例2-53 スキーマ間のアクセス: ジオメトリ表

SQL> grant select on STATES to SCOTT;
. . .
<themes>
  <theme name="theme1">
     <jdbc_query
       datasource="scottds"
       spatial_column="geom"
       render_style="MVDEMO:C.COUNTIES"
       jdbc_srid="8265"
       >SELECT geom from MVDEMO.STATES</jdbc_query>
   </theme>
</themes>

例2-54は、SCOTTユーザーで定義されたデータソースからGeoRaster表MVDEMO.GEORASTER_TABLEおよびそのRDTにアクセスする動的テーマを示しています。実表(GeoRaster表)はschema-name.table-nameの形式で指定します。

例2-54 スキーマ間のアクセス: GeoRaster表

SQL> grant select on GEORASTER_TABLE to SCOTT;
SQL> grant select on RDT_GEOR1 to SCOTT;
. . .
<themes>
  <theme name="georaster_theme">
    <jdbc_georaster_query
       georaster_table="MVDEMO.georaster_table"
       georaster_column="georaster"
       raster_table="rdt_geor1"
       raster_id="1"
       jdbc_srid="8307"
       datasource="scottds"
       asis="false">
     </jdbc_georaster_query>
  </theme>
</themes>

例2-55は、SCOTTユーザーで定義されたデータソースから、トポロジ表MVDEMO.LAND_PARCELSおよびCITY_DATAトポロジの関連情報の表にアクセスする動的テーマを示しています。地物表および対象のトポロジが、データソースに関連付けられたスキーマとは別のスキーマで所有されている場合は、これらをschema-name.object-nameの形式で指定します。

例2-55 スキーマ間のアクセス: トポロジ地物表

SQL> grant select on CITY_DATA_FACE$ to SCOTT;
SQL> grant select on CITY_DATA_EDGE$ to SCOTT;
SQL> grant select on CITY_DATA_NODE$ to SCOTT;
SQL> grant select on CITY_DATA_RELATION$ to SCOTT;
SQL> grant select on LAND_PARCELS to SCOTT;
SQL> grant select on <topology-column-index-table-name> to SCOTT;
. . .
<themes>
  <theme name="topo_theme" >
     <jdbc_topology_query
       topology_name="MVDEMO.CITY_DATA"
       feature_table="MVDEMO.LAND_PARCELS"
       spatial_column="FEATURE"
       render_style="MVDEMO:C.COUNTIES"
       jdbc_srid="0"
       datasource="scottds"
       asis="false">select feature from MVDEMO.land_parcels
     </jdbc_topology_query>
   </theme>
</themes>

例2-55では、トポロジ列の索引表名(<topology-column-index-table-name>)に対するSELECTを付与する必要があります。これは、地物表のトポロジ列に関連付けられた空間索引表が、トポロジ問合せでMapViewerによって使用されるためです。トポロジ列の索引表名は、次のように特定できます。次の情報を前提とします。

  • トポロジ地物表の所有者: MVDEMO

  • トポロジ地物表の名前: LAND_PARCELS

  • トポロジ地物表のトポロジ列の名前: FEATURE

次の問合せでは、索引表名(この例ではMDTP_14E60$)が返されます。

SQL> select sdo_index_table from all_sdo_index_info
     where table_owner = 'MVDEMO'
     and table_name = 'LAND_PARCELS'
     and column_name = 'FEATURE'
 
SDO_INDEX_TABLE
--------------------------------
MDTP_14E60$

その後、「例2-55 スキーマ間のアクセス: トポロジ地物表」にある最後のGRANTステートメントを変更して、<topology-column-index-table-name>を指定します。この場合は、次のようになります。

SQL> grant select on MDTP_14E60$ to SCOTT;

例2-56は、MVDEMO.BI_TESTネットワーク表およびそのリンク、ノード、パスおよびパスリンクの各表にアクセスする動的テーマを示しています。ネットワーク名はschema-name.network-nameの形式で指定します。

例2-56 スキーマ間のアクセス: ネットワーク表

SQL> grant select on BI_TEST_LINK$ to SCOTT;
SQL> grant select on BI_TEST_NODE$ to SCOTT;
SQL> grant select on BI_TEST_PATH$ to SCOTT;
SQL> grant select on BI_TEST_PLINK$ to SCOTT;
. . .
<themes>
  <theme name="net_theme" >
     <jdbc_network_query
       network_name="MVDEMO.BI_TEST"
       network_level="1"
       jdbc_srid="0"
       datasource="scottds"
       link_style="MVDEMO:C.RED"
       node_style="MVDEMO:M.CIRCLE"
       node_markersize="5"
       asis="false">
     </jdbc_network_query>
   </theme>
</themes>

2.8 MapViewerでのWorkspace Managerのサポート

Workspace Managerは、データベース内の1つ以上の表をバージョン対応表にできるOracle Databaseの機能です。表がバージョン対応表の場合、作業領域のユーザーには、自動的に対象のデータベース行の正しいバージョンが表示されます。Workspace Managerの詳細は、『Oracle Database Workspace Manager開発者ガイド』を参照してください。

特定の作業領域から、作業領域の特定のセーブポイントで、あるいは作業領域の特定の日付に近いポイントで、マップをリクエストできます。Workspace Managerのサポートに関連する<theme>要素の属性は、次のとおりです。

  • workspace_name属性: マップ・データの取得先の作業領域名を指定します。

  • workspace_savepoint属性: 指定した作業領域での移動先のセーブポイント名を指定します。

  • workspace_date属性: 指定した作業領域での移動先の日付(つまり、指定した日付またはそれに近いポイント)を指定します。

  • workspace_date_format属性: 日付の書式を指定します。デフォルトはmmddyyyyhh24missです。この属性は、workspace_date属性を指定した場合にのみ適用されます。

  • workspace_date_nlsparam属性: グローバリゼーション・サポートのオプションを指定します。オプションとデフォルトは、日付変換用のTO_CHAR関数のnlsparam引数と同じです(『Oracle Database SQL言語リファレンス』を参照)。

  • workspace_date_tswtz属性: ブール値を指定します。TRUEは、入力日付がタイムゾーン書式のタイムスタンプであることを意味します。FALSE(デフォルト)は、入力日付が日付文字列であることを意味します。

workspace_name属性は、MapViewerでWorkspace Managerサポートを使用するために必要です。

workspace_savepoint属性もworkspace_date属性も指定しない場合、MapViewerは定義されている作業領域の最新のバージョンに移動します。workspace_savepoint属性とworkspace_date属性の両方を指定すると、セーブポイント名のかわりに指定した日付がMapViewerによって使用されます。

例2-57は、Workspace Managerサポート関連の属性(太字で表示)を使用する動的テーマの定義を示しています。この例では、セーブポイントsp1での作業領域wsp_1に関連するデータがレンダリングされます。

例2-57 マップ・リクエストのWorkspace Manager関連の属性

<?xml version="1.0" standalone="yes"?>
<map_request
 . . .
  <themes>
    <theme name="wmtheme" user_clickable="false"
       workspace_name="wsp_1" workspace_savepoint="sp1" >
       <jdbc_query
         spatial_column="GEOM"
         render_style="stylename"
         jdbc_srid="8307"
         datasource="mvdemo"
         asis="false"> select GEOM,ATTR from GEOM_TABLE
       </jdbc_query>
     </theme>
  </themes>
 . . .
</map_request>

MapViewerの事前定義済テーマのキャッシング(2.3.1.6項を参照)およびWorkspace Manager関連のMapViewer属性の使用についての考慮事項は次のとおりです。

  • テーマの<styling_rules>要素のcaching属性がALLに設定されている場合、事前定義済テーマではWorkspace Manager関連の属性は無視されます。

  • workspace_name属性を指定した場合、キャッシュ・データは考慮されません。

MapViewer管理リクエスト(第5章を参照)でのWorkspace Managerサポート関連の要素は次のとおりです。

  • <list_workspace_name>

  • <list_workspace_session>

<list_workspace_name>要素は、最新のマップ・リクエストのworkspace_name属性で指定されている現行作業領域名を返します。作業領域が指定されていない場合(つまり、現行のMapViewerセッションのマップ・リクエストでworkspace_name属性が指定されていない場合)またはLIVE作業領域が指定されている場合には、LIVE作業領域が返されます。Workspace Managerが現在のOracle Databaseにインストールされていない場合、リクエストは失敗します。

例2-58では、管理リクエストに<list_workspace_name>要素を使用しています。

例2-58 管理リクエスト内の<list_workspace_name>要素

<?xml version="1.0" standalone="yes"?>
<non_map_request>
  <list_workspace_name data_source="mvdemo"/>
</non_map_request>

wsp_1が現行作業領域である場合、例2-58のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
  <workspace_name succeed="true" name="wsp_1"/>
</non_map_response>

作業領域が指定されていない場合や、LIVE作業領域が指定されている場合、例2-58のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
  <workspace_name succeed="true" name="LIVE"/>
</non_map_response>

Workspace Managerが現在のOracle Databaseにインストールされていない場合、例2-58のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
  <workspace_name succeed="false"/>
</non_map_response>

<list_workspace_session>要素は、現行作業領域名と現行コンテキスト名を返します。作業領域が指定されていない場合(つまり、現行のMapViewerセッションのマップ・リクエストでworkspace_name属性が指定されていない場合)またはLIVE作業領域が指定されている場合には、LIVE作業領域に関する情報が返されます。Workspace Managerが現在のOracle Databaseにインストールされていない場合、リクエストは失敗します。

例2-59では、管理リクエストに<list_workspace_session>要素を使用しています。

例2-59 管理リクエスト内の<list_workspace_session>要素

<?xml version="1.0" standalone="yes"?>
<non_map_request>
  <list_workspace_session data_source="mvdemo"/>
</non_map_request>

wsp_1が現行作業領域であり、コンテキストがLATESTである場合、例2-59のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
  <workspace_session succeed="true" name="wsp_1" context="LATEST"
     context_type="LATEST"/>
</non_map_response>

作業領域が指定されていない場合や、LIVE作業領域が指定されている場合、またコンテキストがLATESTである場合、例2-59のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
  <workspace_session succeed="true" name="LIVE" context="LATEST"
     context_type="LATEST"/>
</non_map_response>

Workspace Managerが現在のOracle Databaseにインストールされていない場合、例2-59のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
  <workspace_session succeed="false"/>
</non_map_response>

2.9 MapViewerのメタデータ・ビュー

ベース・マップ、テーマおよびスタイルを説明するマッピング・メタデータは、MDSYSが所有するグローバル表のSDO_MAPS_TABLE、SDO_THEMES_TABLEおよびSDO_STYLES_TABLEに格納されています。ただし、これらの表を直接更新しないでください。MapViewerの各ユーザーには、そのユーザーに関連付けられたスキーマで使用可能な次のビューがあります。

  • USER_SDO_MAPSおよびALL_SDO_MAPSには、ベース・マップの情報が含まれています。これらのビューの詳細は、2.9.1項を参照してください。

  • USER_SDO_THEMESおよびALL_SDO_THEMESには、テーマの情報が含まれています。これらのビューの詳細は、2.9.2項を参照してください。

  • USER_SDO_STYLESおよびALL_SDO_STYLESには、スタイルの情報が含まれています。これらのビューの詳細は、2.9.3項を参照してください。


    注意:

    Map Builderツール(第7章を参照)を使用すると、ほとんどのマッピング・メタデータを管理できます。ただし、一部の地物については、MapViewerメタデータ・ビューを更新するためにSQL文を使用する必要があります。

USER_SDO_xxxビューには、ユーザー(スキーマ)が所有するマッピング要素(スタイル、テーマ、ベース・マップ)に関するメタデータ情報が含まれ、ALL_SDO_xxxビューには、ユーザーがSELECT権限を持つマッピング要素に関するメタデータ情報が含まれます。

ALL_SDO_xxxビューには、オブジェクト所有者のスキーマを識別するOWNER列が含まれます。USER_SDO_xxxビューに、OWNER列は含まれません。

データベースで定義されたすべてのスタイルは、すべてのユーザーが、自分のテーマ、テキスト・スタイルを含むマーカーまたは拡張スタイルを定義するために参照できます。ただし、テーマおよびベース・マップはユーザー間で共有されないため、たとえば、自分が作成したベース・マップで別のユーザーのテーマは参照できません。

マッピング・メタデータへのアクセスには、次のルールが適用されます。

  • メタデータを追加、削除または変更する場合、USER_SDO_xxxビューを使用して操作を実行する必要があります。ALL_SDO_xxxビューは、USER_SDO_xxxビューに加えた変更を反映するために自動的に更新されます。

  • すべてのスタイルに関するメタデータへの読取りアクセスのみが必要な場合は、ALL_SDO_STYLESビューを使用する必要があります。主キーはOWNER列およびNAME列で構成されるため、スタイルを指定する場合はOWNERおよびNAMEの両方を必ず含めてください。

前述のMapViewerメタデータ・ビューは、次のファイルで定義されます。

$ORACLE_HOME/lbs/admin/mapdefinition.sql

MapViewerは、他のファイルで定義可能な他のメタデータ・ビューもいくつか使用します。これらのビューの内容は決して変更しないでください。これには以下が含まれます。

  • MDSYS.USER_SDO_CACHED_MAPSは、Oracle Mapsの一部であるマップ・タイル・サーバーにより使用されます(第6章を参照)。

  • MDSYS.USER_SDO_TILE_ADMIN_TASKSには、マップ・タイル管理に関連する長時間のタスクについての情報が含まれています。プリフェッチに続いてタスクを再開するなど、長時間のマップ・タイル層のタスクを停止する場合、MapViewerは最初からやり直すのではなく、USER_SDO_TILE_ADMIN_TASKSビューの情報を使用してタスクを再開します。

2.9.1 xxx_SDO_MAPSビュー

USER_SDO_MAPSビューおよびALL_SDO_MAPSビューには、表2-3に示す列があります。

表2-3 xxx_SDO_MAPSビュー

列名 データ型 説明

OWNER

VARCHAR2

ベース・マップを所有するスキーマ(ALL_SDO_MAPSのみ)

NAME

VARCHAR2

ベース・マップに関連付ける一意の名前

DESCRIPTION

VARCHAR2

ベース・マップに関するオプションの記述テキスト

DEFINITION

CLOB

ベース・マップに関連付ける、テーマおよびテーマのスケール値範囲情報のリストのXML定義


2.9.2 xxx_SDO_THEMESビュー

USER_SDO_THEMESビューおよびALL_SDO_THEMESビューには、表2-4に示す列があります。

表2-4 xxx_SDO_THEMESビュー

列名 データ型 説明

OWNER

VARCHAR2

テーマを所有するスキーマ(ALL_SDO_THEMESのみ)

NAME

VARCHAR2

テーマに関連付ける一意の名前

DESCRIPTION

VARCHAR2

テーマに関するオプションの記述テキスト

BASE_TABLE

VARCHAR2

空間ジオメトリ列が含まれる表またはビュー

GEOMETRY_COLUMN

VARCHAR2

空間ジオメトリ列(SDO_GEOMETRY型)の名前

STYLING_RULES

CLOB

テーマに関連付けるスタイリング・ルールのXML定義


2.9.3 xxx_SDO_STYLESビュー

USER_SDO_STYLESビューおよびALL_SDO_STYLESビューには、表2-5に示す列があります。

表2-5 xxx_SDO_STYLESビュー

列名 データ型 説明

OWNER

VARCHAR2

スタイルを所有するスキーマ(ALL_SDO_STYLESのみ)

NAME

VARCHAR2

スタイルに関連付ける一意の名前

TYPE

VARCHAR2

COLOR、MARKER、LINE、AREA、TEXTまたはADVANCEDのいずれかの値

DESCRIPTION

VARCHAR2

スタイルに関するオプションの記述テキスト

DEFINITION

CLOB

スタイルのXML定義

IMAGE

BLOB

画像ベースの記号(マーカーの場合)または充填文字(領域の場合)を使用するマーカー・スタイルまたは領域スタイルの画像内容(airport.gifなど)

GEOMETRY

SDO_GEOMETRY

(今後使用予定)


Oracle Databaseのリリースに応じて、ALL_SDO_STYLESビューに、MDSYSスキーマが所有するサンプル・スタイルが含まれる場合があります。これらのスタイルがシステムで定義されている場合にはテーマ定義およびマップ・リクエストで指定できます。また、独自スタイルの定義に使用するアイデアのためのXML定義を検査できます。

現行ユーザー以外のスキーマが所有しているスタイル(または他のタイプのMapViewerオブジェクト)を指定するには、スキーマ名を指定し、スキーマ名とオブジェクト名の間にピリオドではなくコロン(:)を使用する必要があります。次の<jdbc_query>要素からの抜粋は、MDSYSスキーマが所有するC.REDというスタイルを参照します。

<jdbc_query . . . render_style="MDSYS:C.RED">
. . .
 </jdbc_query>

例2-60では、MDSYSスキーマが所有し、現在定義されているすべてのスタイルの名前を検索して、そのいずれかのスタイルのタイプ、説明およびXML定義を表示します。(出力結果の例は、読みやすいようにリフォーマットされています。)

例2-60 MDSYSスキーマ所有のスタイルの検索

SELECT owner, name FROM all_sdo_styles 
  WHERE owner = 'MDSYS';
 
OWNER                            NAME
-------------------------------- --------------------------------
MDSYS                            C.BLACK
MDSYS                            C.BLACK GRAY
MDSYS                            C.BLUE
MDSYS                            C.COUNTIES
MDSYS                            C.FACILITY
. . .
MDSYS                            L.MAJOR STREET
MDSYS                            L.MAJOR TOLL ROAD
MDSYS                            L.MQ_ROAD2
MDSYS                            L.PH
MDSYS                            L.POOR_ROADS
MDSYS                            L.PTH
MDSYS                            L.RAILROAD
MDSYS                            L.RAMP
MDSYS                            L.SH
MDSYS                            L.STATE BOUNDARY
. . .
MDSYS                            M.REDSQ
MDSYS                            M.SMALL TRIANGLE
MDSYS                            M.STAR
MDSYS                            M.TOWN HALL
MDSYS                            M.TRIANGLE
MDSYS                            T.AIRPORT NAME
MDSYS                            T.CITY NAME
MDSYS                            T.MAP TITLE
MDSYS                            T.PARK NAME
MDSYS                            T.RED STREET
MDSYS                            T.ROAD NAME
MDSYS                            T.SHIELD1
MDSYS                            T.SHIELD2
MDSYS                            T.STATE NAME
MDSYS                            T.STREET NAME
. . .
 
-- Display the type, description, and XML definition of one style.
SET LONG 4000;
SELECT owner, name, type, description, definition 
  FROM all_sdo_styles WHERE name = 'L.PH';
 
OWNER   NAME     TYPE       DESCRIPTION
------  -----    ------     ------------------
MDSYS   L.PH     LINE       Primary highways
 
DEFINITION
---------------------------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
<g class="line" style="fill:#33a9ff;stroke-width:4">
<line class="parallel" style="fill:#aa55cc;stroke-width:1.0"/>
</g>
</svg>