この付録では、OracleAS MapViewerメタデータ・ビュー(2.8項を参照)を使用してスタイル、テーマおよびベース・マップを定義するためのXML形式について説明します。
OracleAS MapViewerスタイルに関するメタデータ・ビュー(USER_SDO_STYLESおよび関連ビュー)には、DEFINITION列が含まれます。DEFINITION列には、レンダリング・エンジンに対して各スタイルを定義するXML文書が格納されます。
各スタイルは、SVG(Scalable Vector Graphics)に類似した構文を使用して定義されます。OracleAS MapViewer構文では、各スタイルのXML文書に単一の<g>
要素が含まれる必要があり、この要素には、スタイルのタイプまたはクラスを示すclass
属性が含まれる必要があります。たとえば、次の例では、塗りの色のコンポーネントによって色スタイルを定義しています。
<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc> red </desc>
<g class="color" style="fill:#ff1100"/>
</svg>
OracleAS MapViewer XMLパーサーでは、スタイル定義内の<g>
要素のみが検索される点に注意してください。<desc>
要素などの他の属性は単なる情報であり、無視されます。
OracleAS MapViewerテーマに関するメタデータ・ビュー(USER_SDO_THEMESおよび関連ビュー)には、STYLING_RULES列が含まれます。これらのビューのテーマごとに、テーマのスタイリング・ルールを定義したXML文書(CLOB値)がSTYLING_RULES列に格納されます。
OracleAS MapViewerベース・マップに関するメタデータ・ビュー(USER_SDO_MAPSおよび関連ビュー)には、DEFINITION列が含まれます。これらのビューの各ベース・マップごとに、ベース・マップを定義したXML文書(CLOB値)がDEFINITION列に格納されます。
次の各項では、各タイプのマッピング・メタデータのXML構文について説明します。
色スタイルには、塗りの色、ストロークの色またはその両方が含まれます。形状またはジオメトリに適用された場合、塗りの色(存在する場合)は形状の内側の塗りに使用され、ストロークの色(存在する場合)は形状の境界の描画に使用されます。どちらの色でも、その色の透明度を制御するアルファ値を使用できます。
色スタイルでは、<g>
要素のclass
属性を"color"
に設定する必要があります。<g>
要素には、色コンポーネントおよびそのオプションのアルファ値を指定したstyle
属性を含める必要があります。次に例を示します。
<g class="color" style="fill:#ff0000">
で指定する色スタイルは、塗りの色(RGB値は#ff0000)のみです。
<g class="color" style="fill:#ff0000;stroke:blue">
で指定する色スタイルは、塗りの色およびストロークの色(青)です。
色の値は、16進文字列(#00ff00など)、またはblack、blue、cyan、darkGray、gray、green、lightGray、magenta、orange、pink、red、white、yellowの色名のいずれかを使用して指定できます。
色スタイルの透明度を指定するには、fill-opacity
およびstroke-opacity
の値を0(ゼロ、完全な透明)〜255(不透明)の範囲内で指定できます。次の例では、半透明の塗りコンポーネントを指定しています。
<g class="color" style="fill:#ff00ff;fill-opacity:128">
次の例では、ストロークおよび塗りの不透明度を指定しています。
<g class="color" style= "stroke:red;stroke-opacity:70; fill:#ff00aa;fill-opacity:129">
style
属性の構文は、1つ以上のname:value
のペアをセミコロンで区切った文字列です。(この基本構文は、他のタイプのスタイルでも使用されます。)
ストロークの色については、ストロークの幅を定義できます。形状の境界を描画するときのデフォルトのストローク幅は、1ピクセルです。デフォルトを変更するには、stroke-width:
value
ペアをstyle
属性文字列に追加します。次の例では、ストローク幅を3ピクセルに指定しています。
<g class="color" style="stroke:red;stroke-width:3">
マーカー・スタイルは、ポイント地物、または領域地物および線形地物のラベル・ポイントに配置されるマーカーを表します。マーカーは、ベクトル・マーカーまたはラスター画像マーカーのいずれかになります。また、マーカーにはオプションの注釈テキストを含めることができます。ベクトル・マーカーの場合、ベクトル要素の座標はXML文書で定義される必要があります。ラスター画像に基づくマーカーの場合、スタイルに関するXML文書は、スタイルが外部画像に基づいていることを示します。
マーカーのXML文書では、優先表示サイズが指定されます。優先される幅および高さは、<g>
要素のstyle
属性において、width:
value
;height:
value
のペアによって定義されます。class
属性は"marker"
に設定する必要があります。マーカーによっては、注釈テキストを重ねる必要があります。たとえば、米国州間高速道路の盾マーカーがレンダリングされる場合、その上にルート番号も表示される必要があります。こうした注釈テキストのスタイルは、font-family:
value
、font-style:
value
、font-size:
value
およびfont-weight:
value
の名前と値のペアのうち1つ以上を含むスタイル属性です。
次の例では、マーカーの上に描画できるラベル・テキストのフォント属性(太字で表示)を指定する画像ベースのマーカーを定義しています。
<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
<g class="marker"
style="width:20;height:18;font-family:sans-serif;font-size:9pt;fill:#ffffff">
<image x="0" y="0" width="9999" height="9999" type="gif"
href="dummy.gif"/>
</g>
</svg>
この例では、ラベル・テキスト付きのポイント地物にマーカーが適用されると、指定したフォント・ファミリおよびサイズを使用し、テキストのフォアグラウンドが指定した塗りの色(この場合は白)であるラベル・テキストが、マーカーの上に中央を中心として描画されます。この例で指定したテキスト属性を持つラベル・テキスト(495
)をA.2.4項の図A-1に示します。
ベクトル・マーカーには、単一ポリゴン、最適化された矩形(2つのポイントを使用して定義)、単一ポリラインまたは円を使用できますが、これらの組合せは使用できません。各タイプのベクトル・マーカーにおいて、<g>
要素には、ジオメトリ情報(ポリゴン、最適化された矩形またはポリラインの座標、あるいは円の半径)を指定した対応するサブ要素が含まれている必要があります。
ポリゴン定義では、カンマ区切りの座標リストを指定したpoints
属性を含む<polygon>
要素が使用されます。次に例を示します。
<g class="marker"> <polygon points="100,20,40,50,60,80,100,20"/> </g>
最適化された矩形の定義では、カンマ区切りの座標リストを指定したpoints
属性を含む<rect>
要素が使用されます。次に例を示します。
<g class="marker"> <rect points="0,0, 120,120"/> </g>
ポリライン定義では、カンマ区切りの座標リストを指定したpoints
属性を含む<polyline>
要素が使用されます。次に例を示します。
<g class="marker"> <polyline points="100,20,40,50,60,80"/> </g>
円の定義では、円の半径を指定したr
属性を含む<circle>
要素が使用されます。次に例を示します。
<g class="marker"> <circle r="50"/> </g>
ベクトルベースのマーカーには、ストローク、塗りの色またはその両方を指定できます。構文は、色スタイルのスタイル属性と同じです。次の例では、枠線が黒であり、半透明の黄色で塗りつぶされた三角マーカーを定義しています。
<?xml version="1.0" standalone="yes"?> <svg width="1in" height="1in"> <g class="marker" style="stroke:#000000;fill:#ffff00;fill-opacity:128"> <polygon points="201.0,200.0, 0.0,200.0, 101.0,0.0"/> </g> </svg>
画像マーカーのXML文書には、画像に基づくマーカーとしてそれらを識別する<image>
要素が含まれます。画像はGIF形式である必要があり、スタイル・メタデータ・ビューのIMAGE列に格納されます。
次の例は、画像マーカーに関するXML文書です。
<?xml version="1.0" standalone="yes"?> <svg> <g class="marker" style="width:20;height:18;font-size:9pt"> <image x="0" y="0" width="9999" height="9999" type="gif" href="dummy.gif"/> </g> </svg>
この例では、<image>
要素を空にしておいて(つまり、<image/>
とする)有効な定義を作成し、画像を後で指定することもできます。
TrueTypeフォントベースのマーカーの場合、そのマーカー記号はTrueTypeフォント・ファイルに格納されます。該当ファイルは、ファイル拡張子が.ttfで、個々の記号または絵文字が多数含まれるのが普通です。多くのGISソフトウェア・パッケージには、マッピングに便利な記号が含まれるTrueTypeフォント・ファイルが添付されています。
TrueTypeフォント・ファイル内の記号をMapViewerで使用できるようになるには、次の処理を実行する必要があります。
TrueTypeフォント・ファイルをデータベースにインポートします。その際は、Map Builderツール(第9章を参照)を使用するのが望ましいと言えます。この処理により、該当するフォント・ファイル内の記号が、システム・ビューUSER_SDO_STYLESの中の単一の行に挿入されます。この新しい行内で、TYPE列には文字列TTF、IMAGE列にはTrueTypeフォント・ファイルの内容が格納されます。インポート・オペレーションが終わったら、Map Builderツールを使用して、TrueTypeフォント・ファイルに含まれているすべての絵文字または記号を表示できます。また、該当するフォント・ファイルは、この段階で物理的にデータベースに格納されているので、すべてのMapViewerユーザーで共有することもできます。
インポートしたTrueTypeフォントの中の絵文字または記号に基づいて、MapViewerマーカー・スタイルを作成します(Map Builderツールを使用するのが望ましい)。
次の例は、TrueTypeフォントベースのマーカーの使用例(TrueTypeに固有なマテリアルは太字で示している)を示しています。
<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="marker" style="fill:#ff0000;width:25;height:25">
<ttfSymbol fontName="ERS_INCIDENTS" charCode="118" />
</g>
</svg>
通常、マーカー・スタイルはポイント地物に適用します。その場合、マーカー・スタイルは地物を示すポイント位置にレンダリングされます。ただし、高速道路などの線(線文字列)地物では、ルート番号などの地物についての情報を示すために線に沿った地点にマーカーを配置する必要があります。たとえば米国の地図では、図A-1のルート495のように、記号の中にルート番号が書かれた盾記号が、高速道路の上に配置されていることがよくあります。
図A-1のような結果を得るには、次のようにします。
マーカー・スタイルを選択し、A.2項の例のように、テキスト・スタイル定義(フォント・ファミリ、フォント・サイズ、塗りの色など)を追加します。
テーマのスタイリング・ルールで、マーカー・スタイルをラベリング・スタイルとして指定します。高速道路を表示するテーマのスタイリング・ルールを指定したXML文書の例を次に示します。マーカー・スタイル(例では太字で表示)が指定されています。ラベル・テキスト(図A-1の495
)は、ラベル列の値です。この例では、ラベル列はLABELという名前です。
<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="political">
<rule>
<features style="L.PH"> (name_class = 'I' and TOLL=0) </features>
<label column="label" style="M.SHIELD1">1</label>
</rule>
<styling_rules>
OracleAS MapViewerは、マーカー・スタイル(この例では盾)の配置について、線上の最適な位置を自動的に決定します。
線スタイルは、道路、鉄道路線または政治的境界などの線形地物にのみ適用可能です。つまり、線スタイルは、SDO_GTYPE値の末尾が2(線)または6(マルチライン)であるOracle Spatialジオメトリにのみ適用できます。(SDO_GEOMETRYオブジェクト・タイプおよびSDO_GTYPE値の詳細は、『Oracle Spatialユーザーズ・ガイドおよびリファレンス』を参照してください。)
OracleAS MapViewerによって線形地物が描画される場合、線スタイルにより、使用する色、破線パターンおよびストローク幅がレンダリング・エンジンに対して指定されます。線スタイルには基本線要素を使用できます。これが定義されている場合、元の線形ジオメトリと一致します。また、基本線に平行な2本の輪郭を定義できます。平行線要素では、独自の色、破線パターンおよびストローク幅を指定できます。平行線を使用する場合、基本線の両側に、等しいオフセットで配置される必要があります。
鉄道のような線を描画するには、線スタイルで、hashmarkと呼ばれる3つ目のタイプの線要素を定義する必要があります。クラスhashmark
の<line>
要素では、dash配列内の1つ目の値が2つのハッシュ・マーク間のギャップを示し、2つ目の値が線の両側におけるハッシュ・マークの長さを示します。次の例では、ギャップが8.5画面単位、基本線の各側における長さが3画面単位であるハッシュ・マーク線を定義しています。
<line class="hashmark" style="fill:#003333" dash="8.5,3.0"/>
次の例では、完全な線スタイルを定義しています。
<?xml version="1.0" standalone="yes"?> <svg width="1in" height="1in"> <g class="line" style="fill:#ffff00;stroke-width:5"> <line class="parallel" style="fill:#ff0000;stroke-width:1.0"/> <line class="base" style="fill:black;stroke-width:1.0" dash="10.0,4.0"/> </g> </svg>
この例では、class="line"
により、スタイルが線スタイルとして識別されます。全体的な塗りの色(#ffff00)は、平行線と基本線間の領域の塗りつぶしに使用されます。全体的な線の幅(5ピクセル)では、このスタイルで使用できる最大幅(平行線の幅を含む)が制限されます。
この例の線スタイルには、基本線要素と平行線要素の両方が含まれます。平行線要素(class="parallel"
)は、色と幅を定義する1つ目の<line>
要素によって定義されています。(この定義では破線パターンが指定されていないため、平行線または輪郭が実線となります。)基本線要素(class="base"
)は、色、幅および破線パターンを定義する2つ目の<line>
要素によって定義されています。
線スタイルには、マーカー(方向マーカーなど)を定義できます。marker-name
パラメータはマーカー・スタイルの名前を指定し、marker-position
パラメータはマーカーを配置する開始点からの線に沿った距離の比率(0から1)を指定し、marker-size
パラメータはマーカー・サイズのディスプレイ単位を数値で指定します。マーカーの向きは、マーカーを配置する線セグメントの向きに従います。
次の例では、方向マーカーを持つ線スタイルを定義しています。
<?xml version="1.0" standalone="yes"?> <svg width="1in" height="1in"> <g class="line" style="fill:#33a9ff;stroke-width:4; marker-name:M.IMAGE105_BW;marker-position:0.15;marker-size=8"> <line class="parallel" style="fill:red;stroke-width:1.0"/> </g> </svg>
領域スタイルは、領域地物の塗りつぶしに使用されるパターンを定義します。現行リリースでは、領域スタイルは画像ベースである必要があります。つまり、領域スタイルをジオメトリに適用する場合、ジオメトリが完全に塗りつぶされるまで、スタイルを定義する画像が繰り返し表示されます。
領域スタイルの定義は、画像マーカー・スタイルの定義(A.2.2項を参照)に似ています。
次の例では、領域スタイルを定義しています。
<?xml version="1.0" standalone="yes"?> <svg width="1in" height="1in"> <g class="area" style="stroke:#000000"> <image/> </g> </svg>
この例では、class="area"
により、スタイルが領域スタイルとして識別されます。ストロークの色(style="stroke:#000000"
)は、ジオメトリの境界を描画する際に使用される色です。ストロークの色が定義されていない場合、ジオメトリの境界は表示されませんが、内側はパターン画像で塗りつぶされます。
領域スタイルには、境界として使用する線スタイルも指定できます。次の領域スタイル定義では、line-style
キーワード(例では太字で表示)を使用して、地物の境界に使用される線スタイルを指定しています。
<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="area" style="line-style:L.DPH">
<image x="0" y="0" width="9999" height="9999" type="gif" href="dummy.gif"/>
</g>
</svg>
画像マーカー・スタイルと同様に、領域スタイルの画像は、独立した列に格納される必要があります(2.8.3項で説明するUSER_SDO_STYLESおよびALL_SDO_STYLESメタデータ・ビューのIMAGE列で識別されます)。
テキスト・スタイルは、空間地物のラベル付けに使用されるフォントおよび色を定義します。class
属性には、"text"
という値が含まれる必要があります。フォントは、スタイル(標準、イタリックなど)、フォント・ファミリ、サイズおよび太さを指定できます。フォアグラウンド・カラーを指定するには、fill
属性を使用します。
次の例では、テキスト・スタイルを定義しています。
<?xml version="1.0" standalone="yes"?> <svg width="1in" height="1in"> <g class="text" style="font-style:plain; font-size:14pt; font-weight:bold; fill:#0000ff"> Hello World! </g> </svg>
この例では、Map Builderツールなどのスタイル作成ツールでスタイルをプレビューする場合のみ、「Hello World!」というテキストが表示されます。スタイルをマップに適用すると、常にOracleAS MapViewerがテーマから取得した実際のテキスト・ラベルが表示されます。
テキスト・スタイルでは、地物の数が多いマップでラベルが読みやすくなるように、レンダリングされたテキストの周りに、白く浮き出たバックグラウンドを表示できます。図A-2は、文字の周りが白いバックグラウンドで囲まれたラベルVallejoを示しています。
図A-2のような結果を得るには、テキスト・スタイル定義の<g>
要素でfloat-width
属性を指定する必要があります。次の例ではfloat-width
属性(例では太字で表示)を使用して、各文字の境界に幅が3.5ピクセルの白いバックグラウンドを指定しています。(スタイルがラベルの表示に適用されると、Hello World!というテキストは無視されます。)
<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
<g class="text" float-width="3.5"
style="font-style:plain; font-size:12pt; font-weight:bold;
fill:#000000">
Hello World!
</g>
</svg>
拡張スタイルは、単純なスタイルから作成される構造化スタイルです。拡張スタイルは、主にテーマ・マッピングに使用されます。コア拡張スタイルはバケット・スタイル(BucketStyle
)であり、拡張スタイルはすべて一種のバケット・スタイルです。バケット・スタイルは、基本スタイルのセットとバケットのセット間の1対1マッピングです。各バケットには、表示される地物の1つ以上の属性値が含まれます。各地物は、地物のいずれかの属性によって地物が分類される、または含まれるバケットが決定し、そのバケットに割り当てられたスタイルが地物に適用されます。
さらに、カラー・スキーム(A.6.2項を参照)および可変マーカー(A.6.3項を参照)という2種類の特殊なバケット・スタイルが提供されています。
その他の拡張スタイルとしては、ドット密度(A.6.4項を参照)、棒グラフ(A.6.5項を参照)およびコレクション(A.6.6項を参照)があります。
バケット・スタイルは、バケットのセットを定義し、各バケットに1つの基本スタイルを割り当てます。バケットの内容は、次のいずれかになります。
離散値のコレクション(ハリケーンのリスク・コードが1または2の郡すべてのバケット、ハリケーンのリスク・コードが3の郡すべてのバケットなど)。
連続した範囲の値(平均世帯収入が30,000ドル未満の郡すべてのバケット、平均世帯収入が30,000〜39,999ドルの郡すべてのバケットなど)。この場合、一連のバケットの範囲は、個別に定義するか(それぞれ上限値および下限値により定義)、マスター範囲において均等に分割できます。
次の抜粋したコードは、バケット・スタイルの基本書式を示しています。
<?xml version="1.0" ?> <AdvancedStyle> <BucketStyle> <Buckets> . . . </Buckets> </BucketStyle> </AdvancedStyle>
他の(基本)スタイルとは対照的に、拡張スタイルには、<AdvancedStyle>
タグで識別されるルート要素が常に含まれます。
バケット・スタイルでは、<BucketStyle>
要素は、<AdvancedStyle>
要素の唯一の子です。各<BucketStyle>
要素には1つ以上の<Buckets>
子要素があり、子要素の内容はバケットのタイプによって異なります。
バケット・スタイルの各バケットに離散値のコレクションが含まれる場合、各バケットを表すには<CollectionBucket>
要素を使用します。各バケットには、1つ以上の値が含まれます。各バケットの値は<CollectionBucket>
要素の内容としてリストされ、複数の値がカンマで区切られます。次の例では、3つのバケットを定義しています。
<?xml version="1.0" ?> <AdvancedStyle> <BucketStyle> <Buckets> <CollectionBucket seq="0" label="commercial" style="10015">commercial</CollectionBucket> <CollectionBucket seq="1" label="residential" style="10031">residential, rural</CollectionBucket> <CollectionBucket seq="2" label="industrial" style="10045">industrial, mining, agriculture</CollectionBucket> </Buckets> </BucketStyle> </AdvancedStyle>
この例の内容は、次のとおりです。
各バケットの値は1つ以上の文字列ですが、値には数値も使用できます。
各バケットに関連付けられたスタイルの名前が指定されています。
各<CollectionBucket>
要素のラベル属性(commercial、residentialまたはindustrial)は、拡張スタイル用にコンパイルされたラベルでのみ使用されます。
<CollectionBucket>
要素の順序は重要です。ただし、seq
(順序)属性の値は参考のみを目的としています。したがって、OracleAS MapViewerでは、定義内の要素の順序によってのみ順序が決定されます。
この例にはありませんが、他のすべての値(他に値が考えられる場合)に対してバケットが必要な場合は、属性値として#DEFAULT#
を含む<CollectionBucket>
要素を作成できます。この要素は、他のすべての<CollectionBucket>
要素の後に配置し、このバケットのスタイルが最後にレンダリングされるようにする必要があります。
離散値を含むコレクションベース・バケットにラベル・スタイルを適用するには、2.2.1項を参照してください。
バケット・スタイルの各バケットに、2つの値で定義された値範囲が含まれる場合、各バケットを表すには<RangedBucket>
要素を使用します。各バケットには、値の範囲が含まれます。次の例では、4つのバケットを定義しています。
<?xml version="1.0" ?> <AdvancedStyle> <BucketStyle> <Buckets> <RangedBucket high="10" style="10015"/> <RangedBucket low="10" high="40" style="10024"/> <RangedBucket low="40" high="50" style="10025"/> <RangedBucket low="50" style="10029"/> </Buckets> </BucketStyle> </AdvancedStyle>
個々の範囲ベースのバケットに下限値は含まれますが、上限値は含まれません(ただし、他の範囲の値より大きい値が含まれる範囲では、上限値も含まれます)。いずれの範囲にも、他の範囲の値と重複する値の範囲を含めることはできません。
たとえば、この例の2つ目のバケット(low="10" high="40"
)には、10ちょうどの値から40未満の値(39や39.99など)までが含まれます。40ちょうどの値は3つ目のバケットに含まれます。
<CollectionBucket>
要素と同様に、各<RangedBucket>
要素に関連付けられたスタイルは、属性として指定されます。
個々の範囲ベース・バケットにラベル・スタイルを適用するには、2.2.1項を参照してください。
バケット・スタイルに、マスター範囲の均等に分割された範囲を含む一連のバケットが含まれる場合、<RangedBucket>
要素を省略して、かわりに<Buckets>
要素で範囲全体のマスター上限値と下限値、範囲を分割するバケット数、およびスタイル名(各バケットにつき1つ)のリストを指定できます。次の例では、0〜29の均等範囲の5つのバケット(nbuckets=5
)を定義しています。
<?xml version="1.0" ?> <AdvancedStyle> <BucketStyle> <Buckets low="0" high="29" nbuckets="5" styles="10015,10017,10019,10021,10023"/> </BucketStyle> </AdvancedStyle>
この例の内容は、次のとおりです。
すべての値が整数の場合、5つのバケットには、0〜5、6〜11、12〜17、18〜23および24〜29の各範囲の値が保持されます。
1つ目のバケットはスタイル10015
、2つ目のバケットはスタイル10017
、などのように関連付けられています。
指定されたスタイル名の数は、nbuckets
属性の値と同じである必要があります。バケットは昇順で配置され、スタイルは指定された順序どおりに各バケットに割り当てられます。
カラー・スキーム・スタイルでは、基本色に基づく各バケットに対し、輝度が異なる個々の色スタイルが自動的に生成されます。輝度は、完全に明るい状態から完全に暗い状態まで、等間隔で分けられます。通常は、1つ目のバケットに基本色の最も明るい階調が割り当てられ、最後のバケットに最も暗い階調が割り当てられます。
各バケットの色スタイルで使用されるストロークの色を含めることができます。ストロークの色は輝度計算には含まれません。したがって、たとえば、一連のポリゴン地物がカラー・スキーム・スタイルを使用してレンダリングされる場合、各ポリゴンの内側は、対応する各バケットの色(基本色の階調)で塗りつぶされますが、ポリゴンの境界はすべて同じストロークの色を使用して描画されます。
基本色(basecolor_opacity
属性を使用)およびストロークの色(strokecolor_opacity
属性を使用)に対して、不透明度値(0(透明)〜255(不透明))を指定できます。
次の例では、ストロークの色を黒とし、基本色である青の様々な階調に4つのバケットが関連付けられたカラー・スキーム・スタイルを定義しています。
<?xml version="1.0" ?> <AdvancedStyle> <ColorSchemeStyle basecolor="blue" strokecolor="black"> <Buckets> <RangedBucket label="<10" high="10"/> <RangedBucket label="10 - 20" low="10" high="20"/> <RangedBucket label="20 - 30" low="20" high="30"/> <RangedBucket label=">=30" low="30"/> </Buckets> </ColorSchemeStyle> </AdvancedStyle>
注意: 次の特殊文字については、かわりにエスケープ・シーケンスを使用してください。
|
可変マーカー・スタイルでは、バケットごとにサイズが異なる一連のマーカー・スタイルが生成されます。バケットの数、マーカーの開始(最小)サイズおよび2つの連続するマーカー間のサイズ増分を指定します。
可変マーカー・スタイルは、概念的にカラー・スキーム・スタイルと類似しています。どちらのスタイルも、共通オブジェクトとの差異に基づいてバケットが作成されます。カラー・スキーム・スタイルでは、基本色の輝度が変化し、可変マーカー・スタイルでは、マーカーのサイズが変化します。
次の例では、4つのバケットを含む可変マーカー・スタイルを作成しています。各バケットは、マーカー(m.circle
)の様々なサイズ(増分4)に関連付けられています。1つ目のバケットのマーカーは半径が10ディスプレイ単位、2つ目のバケットのマーカーは半径が14ディスプレイ単位、というようになります。この例では、マーカーm.circle
がすでに定義されていると仮定しています。
<?xml version="1.0" ?> <AdvancedStyle> <VariableMarkerStyle basemarker="m.circle" startsize="10" increment="4"> <Buckets> <RangedBucket label="<10" high="10"/> <RangedBucket label="10 - 20" low="10" high="20"/> <RangedBucket label="20 - 30" low="20" high="30"/> <RangedBucket label=">=30" low="30"/> </Buckets> </VariableMarkerStyle> </AdvancedStyle>
ドット密度拡張マーカー・スタイルは、州や郡などの領域地物に適用されると、該当する領域内に一連のドットをランダムに描画します。各領域内に描画されるドットの数は、該当領域に関連付けられているカウント値によって決まります。ドット密度スタイルを定義する場合は、各ドットに使用されるマーカー・スタイルを指定する必要があります。
単純なドット密度スタイルのXML定義を、次の例で示します。
<?xml version="1.0" ?> <AdvancedStyle> <DotDensityStyle MarkerStyle="M.STAR" DotWidth="8" DotHeight="8"> </DotDensityStyle> </AdvancedStyle>
この例では、マーカー・スタイルM.STARが各ドットに使用され、各ドットのサイズは幅、高さともに8ピクセルです。
ドット密度スタイルを使用する場合は、カウント値を「調整」し、適切な範囲にする必要があります。たとえば、各郡の人口に基づいてドット密度スタイルを直接適用する場合、人口を直接使用(1人に1ドット)することはしません。描画されるドット数が許容できない数になるからです(1つの郡に15,000人の人口がいる場合など)。そのような場合はかわりに、テーマのスタイリング・ルールを定義する際に、スケールダウンした値または式(人口/1000
など)を使用します。(MapViewerでは、そのようなスケールダウン処理を内部で実行しません。そのような処理は、ユーザーがSQL問合せレベルで実行する必要があります。)
棒グラフ拡張マーカー・スタイルは、円グラフ・スタイルに類似しており、相違点は適用先の地物ごとに棒グラフが描画される点です。棒グラフ・スタイルのXML定義を、次の例で示します。
<?xml version="1.0" ?> <AdvancedStyle> <BarChartStyle width="30" height="25" show_x_axis="true"> <Bar name="1990" color="#FF0000" /> <Bar name="1995" color="#FFC800" /> <Bar name="1998" color="#0000FF" /> <Bar name="2000" color="#00FF00" /> <Bar name="2002" color="#00FFFF" /> </BarChartStyle> </AdvancedStyle>
この例では、widthおよびheightで棒グラフ全体(個々のすべての棒も含む)のサイズを指定しています。
地物に関連付けられている一連の値に基づき、その地物の上に棒グラフを描画する場合、各棒の高さはローカル・スケールまたはグローバル・スケールという2つのアプローチで決定できます。ローカル・スケールの棒グラフの場合、各棒の高さは該当する地物に関連付けられている一連の値によってのみ決定されます。そのため、1つのグラフの2番目の棒を同一テーマの別のグラフの2番目の棒と比較することなどはできません。一方、グローバル・スケールの棒グラフの場合は、マップ上の全グラフで同じ棒スケールが使用されます。そのため、1つのグラフの2番目の棒を同一テーマの別のグラフの2番目の棒と比較するといったことが行えます。
そこで、同じグラフの中のみでなく、マップに表示されているすべてのグラフにも渡って棒を比較する場合は、次の例で示すように、棒グラフ・スタイルの定義の中でshare_scale="true"
を指定し、グローバル・スケールの棒グラフ・スタイルを使用する必要があります。
<?xml version="1.0" ?>
<AdvancedStyle>
<BarChartStyle width="40" height="30" share_scale="true"
min_value="0.0" max_value="100">
<Bar name="1990" color="#FF0000" />
<Bar name="1995" color="#FFC800" />
<Bar name="1998" color="#0000FF" />
<Bar name="2000" color="#00FF00" />
<Bar name="2002" color="#00FFFF" />
</BarChartStyle>
</AdvancedStyle>
先の例の棒グラフ・スタイルをテーマに適用すると、MapViewerは該当するテーマ内の全地物のグローバルな値域を考慮し、最小値から最大値のグローバルな範囲内での各値の位置に基づいて各棒の高さを決定します。
コレクション拡張スタイルは、1つの地物にまとめて適用される一連のタイプのスタイルの集合(コレクション)にすぎません。様々なスタイルに基づく複数のテーマを使用した場合に比べて、コレクション・テーマのレンダリングは高速に処理されます。
たとえば、棒グラフ・スタイルは、1つの郡に適用した場合、該当する郡内のどこかに該当する棒グラフのみを描画し、該当する郡自体(境界線と内側の領域)は描画しません。ただし、通常は、一連の郡の基盤となる境界線や、各棒グラフが属する郡も表示するはずです。コレクション・スタイルを使用せずにそのような処理を実行するには、2番目のテーマを定義し、その中で各郡に色スタイルや領域スタイルを関連付ける必要があります。そのようなアプローチをとると、本質的に同じグループの地物に対して、レンダリング・パスが2つできることになります(2つのテーマが含まれるため)。
ただし、この例でコレクション・スタイルを使用すると、棒グラフと色スタイルまたは領域スタイルを参照するスタイルを1つ定義し、そのコレクション・スタイルを一連の郡のテーマに適用することができます。そのテーマがMapViewerによってレンダリングされると、マップ上に一連の棒グラフも境界線も表示されます。
ポリゴン(領域)、ポイント、線などの複数のタイプのジオメトリが含まれるコレクション・タイプのトポロジ地物をレンダリングする場合にも、コレクション・スタイルを通常使用します。そのような場合は、各コレクション・トポロジ地物内の各タイプのジオメトリに最適な一連のスタイルを、1つのコレクション・スタイルに含めることができます。
コレクション・スタイルのXML定義を、次の例で示します。
<?xml version="1.0" standalone="yes"?> <AdvancedStyle> <CollectionStyle> <style name="C.COUNTIES" shape="polygon" /> <style name="L.PH" shape="line" /> <style name="M.CIRCLE" shape="point" /> </CollectionStyle> </AdvancedStyle>
テーマは、1つ以上のスタイリング・ルールで構成されます。それらスタイリング・ルールは、USER_SDO_THEMESメタデータ・ビューのSTYLING_RULES列で、次のDTDを使用して指定します。
<!ELEMENT styling_rules (rule+, hidden_info?)> <!ATTLIST styling_rules theme_type CDATA #IMPLIED key_column CDATA #IMPLIED caching CDATA #IMPLIED "NORMAL" image_format CDATA #IMPLIED image_column CDATA #IMPLIED image_resolution CDATA #IMPLIED image_unit CDATA #IMPLIED raster_id CDATA #IMPLIED raster_table CDATA #IMPLIED raster_pyramid CDATA #IMPLIED raster_bands CDATA #IMPLIED polygon_mask CDATA #IMPLIED network_name CDATA #IMPLIED network_level CDATA #IMPLIED topology_name CDATA #IMPLIED> <!ELEMENT rule (features, label?)> <!ATTLIST rule column CDATA #IMPLIED> <!ELEMENT features (#PCDATA?, link?, node?, path?)> <!ATTLIST features style CDATA #REQUIRED> <!ELEMENT label (#PCDATA?, link?, node?, path?)> <!ATTLIST label column CDATA #REQUIRED style CDATA #REQUIRED> <!ELEMENT link (#PCDATA)> <!ATTLIST link style CDATA #REQUIRED direction_style CDATA #IMPLIED direction_position CDATA #IMPLIED direction_markersize CDATA #IMPLIED column CDATA #REQUIRED> <!ELEMENT node (#PCDATA)> <!ATTLIST node style CDATA #REQUIRED markersize CDATA #IMPLIED column CDATA #REQUIRED> <!ELEMENT path (#PCDATA)> <!ATTLIST path ids CDATA #REQUIRED styles CDATA #REQUIRED style CDATA #REQUIRED column CDATA #REQUIRED> <!ELEMENT hidden_info (field+)> <!ELEMENT field (#PCDATA)> <!ATTLIST field column CDATA #REQUIRED name CDATA #IMPLIED >
<styling_rules>
要素には、1つまたは複数の<rule>
要素と、オプションの<hidden_info>
要素が含まれます。
<styling_rules>
要素に含まれる場合があるtheme_type
属性は主に、特定のタイプの事前定義済テーマに使用されます。(theme_type
属性のデフォルト値はgeometry
であり、テーマが空間ジオメトリに基づいていることを示します。)これらの特殊なタイプの事前定義済テーマのtheme_type
属性値は、次のとおりです。
image
は、イメージ・テーマを指定します。ともに指定する必要がある属性はimage_format
属性とimage_column
属性であり、指定できる属性はimage_resolution
属性とimage_unit
属性です。イメージ・テーマの詳細は、2.3.5項を参照してください。
georaster
は、GeoRasterテーマを指定します。指定したGeoRasterデータを使用するには(ただし、問合せ条件を使用してGeoRasterデータを取得する場合を除く)、raster_id
およびraster_table
属性も指定する必要があります。raster_pyramid
属性、raster_bands
属性およびpolygon_mask
属性を指定することもできます。GeoRasterテーマの詳細は、2.3.6項を参照してください。
network
は、ネットワーク・テーマを指定します。network_name
属性も指定する必要があります。network_level
属性も指定できますが、現在はデフォルト値(1)しかサポートされていません。ネットワーク・テーマの詳細は、2.3.7項を参照してください。
topology
は、トポロジ・テーマを指定します。topology_name
属性も指定する必要があります。トポロジ・テーマの詳細は、2.3.8項を参照してください。
<styling_rules>
要素では、key_column
属性を持つことができます。この属性が必要になるのは、結合ビュー(複数の表から作成されたビュー)でテーマが定義される場合のみです。このような場合は、キー列となる列をこのビューで指定し、そのビューでジオメトリまたは画像を一意に識別する必要があります。このキー列情報がない場合、OracleAS MapViewerは結合ビューのジオメトリまたは画像をキャッシュできません。
<styling_rules>
要素には、caching
属性を使用できます。この属性は、各事前定義済テーマのキャッシュ・スキームを指定します。caching
属性には、NORMAL
(デフォルト)、NONE
またはALL
のいずれかの値を使用できます。
NORMAL
の場合、OracleAS MapViewerは、ジオメトリの再利用が必要なときに負荷がかかる非Pickle化処理を繰り返さなくてすむように、表示したばかりのジオメトリ・データをキャッシュします。ジオメトリは常にデータベースからフェッチされますが、非Pickle化バージョンがキャッシュにすでに存在する場合、フェッチしたジオメトリは使用されません。
NONE
は、このテーマのジオメトリがキャッシュされないことを意味します。この値は、テーマについてデータを頻繁に編集しており、編集したとおりにデータを表示する必要がある場合に便利です。
ALL
の場合、OracleAS MapViewerは、リクエストを表示する前に、このテーマのジオメトリ・データをすべて完全にキャッシュに確保します。デフォルト値のNORMAL
とは対照的に、ALL
の値では、初めてテーマが表示されるときに実表のすべてのジオメトリがキャッシュされ、ジオメトリはその後データベースからフェッチされません。
事前定義済テーマのキャッシュの詳細は、2.3.1.2項を参照してください。
各<rule>
要素には<features>
要素が必要であり、<label>
要素を含めることができます。
<rule>
要素のオプションのcolumn
属性は、OracleAS MapViewerで生成される問合せのSELECTリストに挿入される、実表の1つ以上の属性列を、カンマ区切りリストで指定します。こうした列の値は、通常はこのテーマの拡張スタイルによって処理されます。次の例は、column属性の使用方法を示しています。
<?xml version="1.0" standalone="yes"?> <styling_rules > <rule column="TOTPOP"> <features style="V.COUNTY_POP_DENSITY"> </features> </rule> </styling_rules>
この例では、テーマのジオメトリ地物が拡張スタイルV.COUNTY_POP_DENSITY
を使用してレンダリングされます。このスタイルでは、このテーマの実表のTOTPOP列内の数値を検索することで、郡ジオメトリを塗りつぶすための色が決定されます。
ネットワーク・テーマの各<features>
要素には、<link>
要素、<node>
要素または<path>
要素、あるいはそれらの組合せを含める必要があります。(<link>
要素、<node>
要素および<path>
要素はネットワーク・テーマにのみ使用します。ネットワーク・テーマの詳細は、2.3.7項を参照してください。)次の例は、リンクおよびノードをレンダリングするネットワーク・テーマのスタイリング・ルールを示しています。
<?xml version="1.0" standalone="yes"?> <styling_rules theme_type="network" network_name="LRS_TEST" network_level="1"> <rule> <features> <link style="C.RED" direction_style="M.IMAGE105_BW" direction_position="0.85" direction_markersize="8"></link> <node style="M.CIRCLE" markersize="5"></node> </features> </rule> </styling_rules>
<label>
要素には、地物にラベルを適用するかどうかを決定するための要素値として、SQL式を含める必要があります。column
属性は、地物にラベル付けするためのテキスト値に対応したSQL式を指定し、style
属性は、ラベルをレンダリングするためのテキスト・スタイルを指定します。
<hidden_info>
要素は、テーマの地物の上にマウスを動かしたときに表示される実表の属性リストを指定します。属性は、<field>
要素のリストで指定します。
各<field>
要素には、column
属性を含める必要があります。この属性は実表の列名を指定します。また、列の表示名を指定するname
属性を使用できます。(name
属性は、列名以外のテキスト文字列を表示する場合に便利です。)
スタイリング・ルールの詳細および例は、2.3.1.1項を参照してください。
ベース・マップの定義は、1つ以上のテーマで構成されます。ベース・マップのXML定義は次のDTDを使用し、USER_SDO_MAPSメタデータ・ビューのDEFINITION列で指定されます。
<!ELEMENT map_definition (theme+)> <!ELEMENT theme EMPTY> <!ATTLIST theme name CDATA #REQUIRED min_scale CDATA #IMPLIED max_scale CDATA #IMPLIED label_always_on (TRUE|FALSE) "FALSE" visible_in_svg (TRUE|FALSE) "TRUE" selectable_in_svg (TRUE|FALSE) "FALSE" onclick CDATA #IMPLIED >
<map_definition>
要素には、1つ以上の<theme>
要素が含まれます。テーマは、定義に指定された順序で、マップ上に相互に積み重ねてレンダリングされます。
各<theme>
要素には<name>
要素が必要で、スケール範囲(<min_scale>
要素および<max_scale>
要素)と、複数のラベルが重なる場合でもラベルを表示するための要件を含めることができます。各テーマ名は一意である必要があります。<min_scale>
要素と<max_scale>
要素をテーマで指定する場合、<min_scale>
値は<max_scale>
値より大きくしてください。<min_scale>
要素のデフォルトは正の無限大であり、<max_scale>
要素のデフォルトは負の無限大です。テーマに対してスケール値が指定されていない場合、テーマは常にレンダリングされます。
label_always_on
はオプション属性です。これをTRUE
に設定した場合、表示の中で2つ以上のラベルが重なる場合にも、OracleAS MapViewerによってテーマのすべての地物がラベル付けされます。(OracleAS MapViewerでは常にラベルが重ならないように試行されます。)label_always_on
がFALSE
の場合、ラベルが重なることが避けられないときは、OracleAS MapViewerによって1つ以上のラベルの表示が無効化されるため、重なることはありません。label_always_on
属性は、マップ地物に対しても指定できるため(3.2.5項のgeoFeature
要素を参照)、テーマについてlabel_always_on
がFALSE
であり、ラベルの重なりが避けられない場合には、ラベルを表示する地物を制御できます。
visible_in_svg
は、SVGマップにテーマを表示するかどうかを指定するオプション属性です。値がTRUE
(デフォルト)の場合はテーマが表示され、FALSE
に設定されている場合は表示されません。ただし、この属性をFALSE
に設定しても、テーマはSVGマップにレンダリングされます。最初はテーマが表示されませんが、SVGマップで定義されているJavaScript関数showTheme()
をコールすることで、後から表示できます。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
selectable_in_svg
は、SVGマップ上でテーマを選択できるかどうかを指定するオプション属性です。デフォルトはFALSE
です。つまり、SVGマップ上でテーマを選択できません。この属性がTRUE
に設定されていて、テーマ地物の選択が可能な場合、SVGマップ上で表示されるテーマの各地物は、クリックすることで選択できます。地物を選択すると、その色が変わり、ID(デフォルトではROWID)が記録されます。SVGマップで定義されたJavaScript関数getSelectedIdList()
をコールすると、選択したすべての地物のID値のリストを取得できます。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
onclick
は、ユーザーがSVGマップをクリックしたときにコールされるJavaScript関数名を指定するオプション属性です。JavaScript関数は、SVG定義以外にHTML文書で定義する必要があります。この関数は、2つのパラメータxおよびyのみを使用する必要があり、これらのパラメータは、SVGマップ上でクリックした点の座標(ピクセル単位)を指定します。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
ベース・マップの定義の詳細および例は、2.4項を参照してください。