2.2 スタイル

スタイルは、空間地物を表す際に使用できる視覚属性です。

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

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

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

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

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

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

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

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

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

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

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

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

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

(任意のタイプ)

マーカー

ポイント、線

領域

ポリゴン

テキスト

(任意のタイプ)

拡張

(任意のタイプ)

データベース・ユーザーが使用できるスタイルはすべて、そのユーザーのUSER_SDO_STYLESビューに格納されます。このビューについては、マップ・ビジュアライゼーション・コンポーネント・メタデータ・ビューおよびxxx_SDO_STYLESビューを参照してください。

マップ・リクエストの一部として、任意のスタイル・タイプの動的に定義されるスタイル(一時的スタイル)も作成できます。それらを作成するには、Oracle Maps JavaScript APIを使用します。クラスおよびメソッドを使用して、すべてのタイプのスタイルを動的に作成します。

実際に作成しているのはスタイルのXML定義です。マップ・リクエストを処理するときに動的に定義されたそのようなスタイルを定義から実際に作成し、リクエストが完了したときに動的に作成されたスタイルを破棄するのは、マップ・ビジュアライゼーション・コンポーネント・サーバーです。

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

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

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

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

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

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

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

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

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

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

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

<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 スケーラブルな線スタイル

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

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

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

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

2.2.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の特殊なタイプのポイント・ジオメトリです。方位ポイントでは、座標がそのポイントの位置と仮想終点の両方を表し、方位ベクターを示します。方位ベクターに従い、テキストの整列やマーカー記号の回転が行われます。方位ベクターについては、「マーカーの方位の制御」を参照してください。方位ポイントの詳細は、『Oracle Spatial開発者ガイド』を参照してください。

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

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

各地物を同様にラベル付けするには、その位置を方位ポイントとして指定する必要があります。これらの方位ポイントを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 マーカーの方位の制御

方位ポイントにマーカー・スタイルが適用される場合、マップ・ビジュアライゼーション・コンポーネントではマーカー・スタイルを自動的に回転し、方位ベクターの方向を指すようにします。マーカー・スタイルを回転する場合は、マーカーの中央を中心にして回転します。

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

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リクエストをマップ・ビジュアライゼーション・コンポーネント・サーバーに発行します。このリクエストでは、サンプル画像のサイズ、バックグラウンド・カラーおよび返される画像の形式を指定できます。このようなリクエストは、スタイルの視覚リストをWebページに表示したり、カスタムのマップ凡例を作成したり、様々なスタイルの表示様式を見たりする場合に便利です。

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

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

  • dsでは該当するスタイルにアクセスできるデータソースを指定します。デフォルトでは、マップ・ビジュアライゼーション・コンポーネントのデフォルトのデータソースが使用されます。

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

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

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

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

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

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

次の例では、グレーのバックグラウンド・カラーでデフォルト・サイズの20x20ピクセルのアンチエイリアスPNG画像を生成し、マップ・ビジュアライゼーション・コンポーネント・デフォルト・データソースの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というマップ・ビジュアライゼーション・コンポーネント・データソースの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.2.6 重なりを許可するテキスト・スタイル

テキスト・スタイルallow-overlapを指定すると、それをラベル・スタイルとして使用するポリゴンなどの領域地物はすべて、マップ上でそのテキスト・ラベルへの重なりが許可されます。次の例は、allow-overlap属性がtrueに設定されたスタイルのXML定義を示しています。

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

たとえば、国の名前がラベル・テキストとして使用されていて、そのスタイルに属性値allow-overlap="true"がある場合、他の地物のラベル(州名など)をそれに重ねることができます。次の図は、国ラベル"United States"が州ラベル"Colorado"および"Kansas"とわずかに重なっている、レンダリングされたマップの一部を示しています。

図2-6 allow-overlap="true"が指定されたテキスト・スタイル

図2-6の説明が続きます
「図2-6 allow-overlap="true"が指定されたテキスト・スタイル」の説明