2.4 マップ

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

この要素および属性には、次のものがあります。

  • 背景イメージ

  • タイトル

  • 凡例

  • 問合せウィンドウ

  • 脚注(コピーライトなど)

  • ベース・マップ

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

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

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

これらの要素および属性をマップ・リクエストで指定した場合、生成されるマップの内容と外観が定義されます。マップ・リクエストで使用可能な要素および属性の詳細は、「マップ・ビジュアライゼーション・サーバー」を参照してください。

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

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

データベース・ユーザーのすべてのベース・マップ名および定義が、そのユーザーのUSER_SDO_MAPSビューに格納されます。このビューについては、マップ・ビジュアライゼーション・コンポーネント・メタデータ・ビューおよびxxx_SDO_MAPSビューを参照してください。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-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インチで表される、ユーザーのデータ領域内の単位数で表されます。マップ・ビジュアライゼーション・コンポーネントのマップ・スケールは、マップ・スケールの一般的な表現方法である1/nの分母値です。この場合の意味は次のとおりです。

  • 分子の1は、表示されたマップ上の1単位(マップ・ビジュアライゼーション・コンポーネントでは1インチ)です。

  • 分母のnは、表示されたマップ上の1単位(マップ・ビジュアライゼーション・コンポーネントでは1インチ)で表される測定単位(度(10進)、メートル、マイルなど)の数値です。

次に例を示します。

  • コンピュータ・ディスプレイ上の1インチがユーザー・データの0.5度(10進)に相当する場合、分数は1/0.5となります。この分数の10進値は2.0ですが、マップ・ビジュアライゼーション・コンポーネントのスケール値は0.5です。

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

  • コンピュータ・ディスプレイ上の1インチがユーザー・データの10マイルに相当する場合、分数は1/10となります。この分数の10進値は0.1ですが、マップ・ビジュアライゼーション・コンポーネントのスケール値は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の大きな値は、細かいマップ詳細と、地図製作における大きいスケールに関連付けられています。(マップ・ビジュアライゼーション・コンポーネントでのマップ・スケールの意味は、地図製作のマップ・スケールにおける一般的な意味とは異なる点に注意してください。)テーマのmin_scale値は、max_scale値より大きくする必要があります。「マップ」例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"/>

マップ・ビジュアライゼーション・コンポーネントによって返されるマップの現在のマップ・スケールを決定するには、まずマップ・サイズ、つまりマップ・データに関連付けられた座標系におけるマップの高さ(垂直範囲)を調べます。たとえば、高さが10(マイル、メートル、度(10進)など、データに関連付けられた測定単位)のマップがリクエストされ、サイズが500×350ピクセル(350が高さ)のデバイスにマップが描画されるとします。マップ・ビジュアライゼーション・コンポーネントでは、一般的な画面解像度として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の場合、スケールは単位を表します。)単位なしで定義されているスケールを使用するには、中心および比率スケールを指定してマップをリクエストします。

比率スケールに相当するマップ・ビジュアライゼーション・コンポーネントの画面インチ・スケールを見つけるには、次のステップを実行します。

  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. マップ・ビジュアライゼーション・コンポーネントのスケールは画面ピクセル単位ではなく画面インチ単位なので、ステップ2の結果にdpi値を掛けます。たとえば、ステップ2の結果が13.25メートル(96dpi時)の場合、1画面インチは1272(= 13.25 * 96)メートルになります。

2.4.2 マップ凡例

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

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

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

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

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

  • 拡張スタイルを含む任意のマップ・ビジュアライゼーション・コンポーネント・スタイルの使用

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

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

図2-14の説明が続きます
「図2-14 凡例付きのマップ」の説明

例2-50および図2-14に関するノート:

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

  • 列定義内の各エントリでは、ラベル・テキストおよびそのテキストが凡例のタイトルである(is_title="true")かどうか、スタイル名および関連テキスト、または垂直余白を追加(この例ではcitiesエントリの後)するためのセパレータ(is_separator="true")を識別できます。

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

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

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

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

マップ・ビジュアライゼーション・コンポーネントでは、自動凡例項目の作成時に、次の注意事項があります。

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

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

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

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

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

さらに、マップ・タイトル、ノートまたはロゴ(あるいはその組合せ)を指定する場合は、凡例およびその他の地物の位置が異なるようにしてください。(マップ・タイトル、ノートまたはロゴについては、「グローバル・マップ構成オプションの指定」を参照してください。)凡例のデフォルト位置はSOUTH_WESTです。

例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-14は、例2-50で指定した凡例を含むマップを示しています。

例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 テーマが指定された自動凡例

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