3.1.1 マップ・リクエストの例

この項では、マップ・リクエストの例を示します。

ここでは、概念、要素および属性(詳細は3.1.2項を参照)について述べています。次の例を示す項で構成されています。

3.1.1.1 単純なマップ・リクエスト

例3-1は、きわめて単純なマップ・リクエストです。ここでは、mvdemoというデータソースのブランクの青い画像で構成され、最上部にHello Worldという文字列が示されたマップがリクエストされます。(この特定のマップ・リクエストによってデータソースからマップ・データが取得されない場合でも、マップ・リクエストにはdatasource属性が必要です。)

例3-1 単純なmapリクエスト("Hello World")

<?xml version="1.0" standalone="yes"?>
<map_request title="Hello World"
             datasource="mvdemo" />

3.1.1.2 動的に定義されるテーマを含むマップ・リクエスト

例3-2は、動的に定義されるテーマが1つ含まれる単純なマップ・リクエストです。ここでは、COUNTIES表からのすべてのOracle Spatial and Graphジオメトリのマップがリクエストされます。

例3-2 動的に定義されるテーマを含む単純なmapリクエスト

<?xml version="1.0" encoding="UTF-8"?>
<map_request datasource="lbs_data">
    <themes>
        <theme name="t1">
            <jdbc_query spatial_column="GEOM"
                        datasource="lbs_data">                
                SELECT geom FROM counties
            </jdbc_query>
        </theme>
    </themes>
</map_request>

3.1.1.3 ベース・マップ、中心および追加の事前定義済テーマを含むマップ・リクエスト

例3-3では、結果のマップについて指定された中心を含むマップをリクエストし、ベース・マップ(basemap="us_base")に含まれる事前定義済テーマに加えて、レンダリングされる事前定義済テーマ(poi_theme_us_restaurants)を指定しています。

例3-3 ベース・マップ、中心および追加の事前定義済テーマを含むmapリクエスト

<?xml version="1.0" encoding="UTF-8"?>
<map_request datasource="lbs_data"
             title="LBS CUSTOMER MAP"
             basemap="us_base"
             width="500"
             height="375"
             bgcolor="#a6cae0"
             format="GIF_URL">
    <center size="1">
        <geoFeature typeName="mapcenter"
                    label="Motel 1"
                    text_style="T.MOTEL"
                    render_style="M.MOTEL"
                    radius="300">
            <geometricProperty>
                <Point>
                    <coordinates>-122.2615, 37.5266</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <srs>SDO:8265</srs>
    <themes>
        <theme name="poi_theme_us_restaurants" />
    </themes>
</map_request>
また、次の点にも注意してください。
  • basemapが指定されているため、MapViewerは、指定されたテーマ(poi_theme_us_restaurants)を描画する前に、そのベース・マップのすべての事前定義済テーマを最初に描画します。
  • M.MOTELスタイルのマーカーおよびT.MOTELスタイルのラベルMotel 1によって中心が描画されます。
  • この中心を囲んで半径300mの円が描画されます。

3.1.1.4 中心、ベース・マップ、動的に定義されるテーマおよびその他の地物を含むマップ・リクエスト

例3-4では、指定された中心、theme_lbs_customersという事前定義済テーマ、sales_by_regionという動的に定義されるテーマ、およびベース・マップus_base_road内のすべてのベース・テーマに、売上高が最高の地域を表すポリゴンおよびポイントという2つの地物を追加したマップをリクエストしています。リクエストしたマップはMapViewerホストに格納され、そのGIF画像に対するURL (format="GIF_URL")はリクエスタに返されます。

例3-4 中心、ベース・マップ、動的に定義されるテーマおよびその他の地物を含むマップ・リクエスト

<?xml version="1.0" encoding="UTF-8"?>
<map_request datasource="lbs_data2"
             title="LBS CUSTOMER MAP 2"
             width="400"
             height="300"
             format="GIF_URL"
             basemap="us_base_road">
    <center size="1.5">
        <geoFeature typeName="nil">
            <geometricProperty>
                <Point>
                    <coordinates>-122.2615, 37.5266</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="theme_lbs_customers" />
        <theme name="sales_by_region">
            <jdbc_query spatial_column="region"
                        label_column="manager"
                        render_style="V.SALES COLOR"
                        label_style="T.SMALL TEXT"
                        jdbc_host="data.my_corp.com"
                        jdbc_sid="orcl"
                        jdbc_port="1521"
                        jdbc_user="scott"
                        jdbc_password="password"
                        jdbc_mode="thin">                
                select region, sales, manager from my_corp_sales_2001
            </jdbc_query>
        </theme>
    </themes>
    <geoFeature typeName="nil"
                label="TopSalesRegion"
                text_style="9988"
                render_style="2837">
        <geometricProperty>
            <Polygon srsName="SDO:8265">
                <outerBoundaryIs>
                    <LinearRing>
                        <coordinates>42.9,71.1 43.2,72.3 39.2,73.0 39.0,73.1 42.9,71.1</coordinates>
                    </LinearRing>
                </outerBoundaryIs>
            </Polygon>
        </geometricProperty>
    </geoFeature>
    <geoFeature render_style="1397"
                text_style="9987">
        <geometricProperty>
            <Point>
                <coordinates>-122.5615, 37.3266</coordinates>
            </Point>
        </geometricProperty>
    </geoFeature>
</map_request>

例3-4では、sales_by_regionは動的に定義されるテーマです。テーマの動的な定義の詳細は、「theme要素」および「jdbc_query要素」を参照してください。

3.1.1.5 属性値および動的に定義される可変マーカー・スタイルを含むポイント地物のマップ・リクエスト

例3-5は、動的に定義される可変マーカー・スタイルを含むポイント地物をレンダリングするためのマップ・リクエストを示しています。attribute_values属性は、可変マーカー・スタイルに定義されているように、適切なバケット(値が分類される範囲用)を検索するために使用される値を定義します。

例3-5 属性値および動的に定義される可変マーカー・スタイルを含むポイント地物のmapリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="Point Features with Variable Marker Style"
             datasource="mvdemo"
             srid="0"
             width="500"
             height="375"
             bgcolor="#a6caf0"
             antialiase="true"
             format="PNG_URL">
    <center size="19.2">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>-116.65,38.92</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <geoFeature render_style="varmarkerpf"
                attribute_values="50000.0">
        <geometricProperty>
            <Point>
                <coordinates>-112.0,43.0</coordinates>
            </Point>
        </geometricProperty>
    </geoFeature>
    <geoFeature render_style="varmarkerpf"
                attribute_values="125000.0">
        <geometricProperty>
            <Point>
                <coordinates>-123.0,40.0</coordinates>
            </Point>
        </geometricProperty>
    </geoFeature>
    <geoFeature render_style="varmarkerpf"
                attribute_values="200000.0">
        <geometricProperty>
            <Point>
                <coordinates>-116.64,38.92</coordinates>
            </Point>
        </geometricProperty>
    </geoFeature>
    <geoFeature render_style="varmarkerpf"
                attribute_values="300000.0">
        <geometricProperty>
            <Point>
                <coordinates>-112.0,35.0</coordinates>
            </Point>
        </geometricProperty>
    </geoFeature>
    <styles>
        <style name="varmarkerpf">
            <AdvancedStyle>
                <VariableMarkerStyle basemarker="mkcircle"
                                     startsize="10"
                                     increment="5">
                    <Buckets>
                        <RangedBucket label="less than 100k"
                                      high="100000.0" />
                        <RangedBucket label="100k - 150k"
                                      low="100000.0"
                                      high="150000.0" />
                        <RangedBucket label="150k - 250k"
                                      low="150000.0"
                                      high="250000.0" />
                        <RangedBucket label="250k - 350k"
                                      low="250000.0"
                                      high="350000.0" />
                    </Buckets>
                </VariableMarkerStyle>
            </AdvancedStyle>
        </style>
        <style name="mkcircle">
            <svg>
                <g class="marker"
                   style="stroke:blue;fill:red;">
                    <circle r="20" />
                </g>
            </svg>
        </style>
    </styles>
</map_request>

3.1.1.6 イメージ・テーマを含むマップ・リクエスト

例3-5では、他のすべての標準的なベクター・データの下にイメージ・テーマが表示されるマップをリクエストしています。イメージ・テーマは、マップ・リクエスト内の<theme>要素の一部として、<jdbc_image_query>要素内に指定されています。(イメージ・テーマの詳細は、「イメージ・テーマ」を参照してください。)

例3-6 イメージ・テーマを含むmapリクエスト

<?xml version="1.0" encoding="UTF-8"?>
<map_request datasource="lbs_data"
             title="LBS Image MAP"
             basemap="us_roads"
             format="GIF_STREAM">
    <center size="1">
        <geoFeature>
            <geometricProperty>
                <Point>
                    <coordinates>-122.2615, 37.5266</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="anImageTheme">
            <jdbc_image_query image_format="ECW"
                              image_column="image"
                              image_mbr_column="img_extent"
                              jdbc_srid="33709"
                              datasource="lbs_data">                
                SELECT image, img_extent, image_id FROM my_images
            </jdbc_image_query>
        </theme>
    </themes>
</map_request>

MapViewerは、例3-6に示すリクエストを次のように処理します。

  1. MapViewerは、現在のマップ・ウィンドウ・コンテキストでユーザー指定の問合せ(SELECT image, img_extent, image_id FROM my_images)を実行し、画像データを取得します。
  2. MapViewerは、すべての登録済イメージ・レンダラの内部リストで、ECW形式(image_format="ECW")をサポートするレンダラがあるかどうかをチェックします。オラクル社が提供するMapViewerはECW形式をサポートしていないため、「カスタム・イメージ・レンダラの作成および登録」で説明するように、この形式をサポートするカスタム・イメージ・レンダラを実装し、登録する必要があります。
  3. MapViewerはrenderImagesメソッドをコールし、ユーザー指定の問合せから取得された画像データが、パラメータの1つとしてこのメソッドに渡されます。
  4. MapViewerは、リクエストされたベクター・データを取得し、レンダリングされた画像の上にそのデータをレンダリングします。

3.1.1.7 マップ凡例の画像のみに関するマップ・リクエスト

例3-7では、マップ凡例の画像のみを含むマップをリクエストしますが、空間データはレンダリングしません。この例の凡例は、都市、州の境界線、州間高速道路および郡の人口密度の識別に使用する記号表現について説明しています。(マップ凡例については、「map_requestの属性」を参照してください。)

例3-7 map凡例の画像のみに関するmapリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request datasource="mvdemo"
             format="PNG_URL">
    <legend bgstyle="fill:#ffffff;stroke:#ff0000"
            profile="MEDIUM"
            position="SOUTH_EAST">
        <column>
            <entry text="Map Legend"
                   is_title="true" />
            <entry style="M.STAR"
                   text="center point" />
            <entry style="M.CITY HALL 3"
                   text="cities" />
            <entry is_separator="true" />
            <entry style="C.ROSY BROWN STROKE"
                   text="state boundary" />
            <entry style="L.PH"
                   text="interstate highway" />
            <entry text="County population:" />
            <entry style="V.COUNTY_POP_DENSITY"
                   tab="1" />
        </column>
    </legend>
</map_request>

例3-7のように、map凡例画像のみを生成すると、格納されたmap凡例画像を実際の表示マップとは別にWebページに表示する場合に、処理時間を短縮できます。これによって、マップ・リクエストが発行されるたびに凡例を生成する必要がなくなります。

3.1.1.8 データSRIDと異なるSRIDを含むマップ・リクエスト

例3-8では、郡テーマのデータに関連付けられた座標系(経度/緯度に対するjdbc_srid="8265"、NAD 83)とは異なる座標系(米国のsrid="32775"、正積図法)で表示されるマップをリクエストしています。その結果、MapViewerではレンダリング・プロセス中にデータSRIDのすべてのジオメトリをマップ・リクエストSRIDに変換します。

テーマ・データに関連付けられた座標系がない場合、MapViewerではデータがマップ・リクエストの座標系に関連付けられていると想定されるため、変換は行われません。

例3-8 データSRIDと異なるSRIDを含むmapリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="US Counties: Equal-Area Projection (SRID=32775)"
             datasource="mvdemo"
             srid="32775"
             width="500"
             height="375"
             bgcolor="#a6caf0"
             antialiase="true"
             format="PNG_URL">
    <center size="4000000.0">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>-218191.9643,1830357.1429</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="county_th"
               user_clickable="false">
            <jdbc_query spatial_column="geom"
                        render_style="C.COUNTIES"
                        jdbc_srid="8265"
                        datasource="mvdemo"
                        asis="false">select geom from counties</jdbc_query>
        </theme>
    </themes>
</map_request>

3.1.1.9 円グラフ・テーマを使用したマップ・リクエスト

この項では、円グラフ・テーマによるテーマ・マッピングの使用方法を示します。結果のマップでは、各郡に円グラフが表示され、各区分のサイズは、郡の指定された世帯収入レベル・カテゴリ(低、中または高)に属する人口の比率を反映したものになります。

基本的なステップは次のとおりです。

  1. 使用する円グラフの特性を定義する拡張スタイルを作成します。次の例では、V.PIECHART1という拡張スタイルを作成します。
    INSERT INTO user_sdo_styles VALUES (
    'V.PIECHART1', 'ADVANCED', null,
    '<?xml version="1.0"?>
    <AdvancedStyle>
        <PieChartStyle pieradius="10">
            <PieSlice name="low"
                      color="#ff0000" />
            <PieSlice name="medium"
                      color="#ffff00" />
            <PieSlice name="high"
                      color="#00ff00" />
        </PieChartStyle>
    </AdvancedStyle>', null, null);

    この例で定義したスタイルが地理的地物に適用されると、3つの区分を持つ円グラフが作成されます。pieradius属性は、各円グラフのサイズをピクセル単位で指定します。各区分(<PieSlice>要素)には色が定義されています。各区分のname属性は、MapViewerでは無視されます。

  2. 次の例のように、作成したスタイルを使用した新規テーマを作成します。
    INSERT INTO user_sdo_themes VALUES (
    'THEME_PIE_CHART', null, 'COUNTIES', 'GEOM',
    '<?xml version="1.0" standalone="yes"?>
    <styling_rules>
        <rule column="INC_LOW,INC_MED,INC_HIGH">
            <features style="C.US MAP YELLOW" />
            <label column="''dummy''" style="V.PIECHART1"> 1 </label>
        </rule>
    </styling_rules>');

    この例のテーマ定義では、スタイリング・ルールの<label>要素でstyle="V.PIECHART1"と指定しており、この円グラフ・スタイル(ステップ1で作成したスタイル)がマップに表示される各ジオメトリへのラベル付けに使用されることを示します。

    列属性(この例ではcolumn="''dummy''")は、結果のマップに影響しない場合にも必要です。column属性の値には、dummyまたはその他の文字列を使用でき、この値の前後を2つの一重引用符で囲む必要があります。

    V.PIECHART1スタイルには3つの区分が定義されているため、前述の例ではCOUNTIES表の3つの列の名前を指定する必要があり、これらの列は数値データ型である必要があります。列名はINC_LOWINC_MEDおよびINC_HIGHです。これらの列は、円グラフの各区分のサイズを決定する際に使用される値を提供します。

  3. 作成したテーマを使用したマップ・リクエストを発行します。例3-9では、ステップ2で作成したTHEME_PIE_CHARTテーマを使用したマップをリクエストしています。

例3-9 円グラフ・テーマを使用したmapリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request datasource="mvdemo"
             format="PNG_STREAM">
    <themes>
        <theme name="THEME_PIE_CHART" />
    </themes>
</map_request>

次の図は、例3-9のマップ・リクエストから生成された表示の一部を示しています。

図3-1 円グラフ・テーマを使用したmap表示



マップ・リクエストを発行する際に、動的(JDBC)テーマに円グラフ・スタイルも使用できます。円グラフ・スタイルで必要とされる属性列を識別する必要があるため、マップ・リクエストではJDBCテーマに関するSQL全問合せを指定する必要があります。SDO_GEOMETRY列またはラベル列ではないSELECT構文のリスト内の列は、拡張スタイルで使用できる属性列であるとみなされます。

例3-10 円グラフ・スタイルを使用したJDBCテーマ

次の例は、円グラフ・スタイルを使用したJDBCテーマを含むリクエストのサンプルです。SQL問合せ(SELECT geom, 'dummy', sales, service, training FROM support_centers)は、テーマ定義に含まれます。

<?xml version="1.0" standalone="yes"?>
<map_request basemap="CA_MAP"
             datasource="mvdemo"
             format="PNG_URL">
    <themes>
        <theme name="support_center">
            <jdbc_query spatial_column="geom"
                        datasource="tilsmenv"
                        label_column="dummy"
                        label_style="V.PIECHART1">                
                SELECT geom, 'dummy', sales, service, training
                FROM support_centers
            </jdbc_query>
        </theme>
    </themes>
</map_request>

3.1.1.10 比率スケールおよび複数テーマ・スケール・モードを使用したマップ・リクエスト

例3-11では、中心および比率スケールを指定してマップ領域を定義するマップをリクエストしています。使用しているテーマは2つであり、それらはTHEME_US_COUNTIES1という事前定義済テーマ(デフォルトの画面インチ・スケール・モードを使用)およびSTATES_THというJDBCテーマ名(比率モードを使用)です。

例3-11 比率スケールおよび複数テーマ・スケール・モードを使用したmapリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="States (ratio), counties (screen inch), center and scale"
             datasource="tilsmenv"
             width="500"
             height="400"
             bgcolor="#a6caf0"
             antialiase="true"
             format="PNG_URL">
    <center scale="5000000">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>-90.0,32.0</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="STATES_TH"
               min_scale="5.0E7"
               max_scale="1.0E7"
               scale_mode="ratio">
            <jdbc_query label_column="STATE"
                        spatial_column="geom"
                        label_style="T.STATE NAME"
                        render_style="C.COUNTIES"
                        jdbc_srid="8265"
                        datasource="tilsmenv"
                        asis="false">
                select geom,state from states
            </jdbc_query>
        </theme>
        <theme name="THEME_US_COUNTIES1"
               min_scale="2.286" />
    </themes>
</map_request>

3.1.1.11 事前定義済テーマを使用したマップ・リクエスト(バインディング・パラメータとカスタム・タイプ)

例3-12は、選択リストに州の略記がある郡をすべて選択するスタイリング・ルールが指定された事前定義済テーマを使用して、マップをリクエストします。事前定義済テーマを作成する場合、選択リストはバインディング・パラメータとして次のように表現されます。

INSERT INTO user_sdo_themes VALUES (
'COUNTIES_BY_STATES', null, 'COUNTIES', 'GEOM',
'<styling_rules>
    <rule>
        <features style="C.COUNTIES"> (state_abrv in (select column_value from table(:1))) </features>
        <label column="COUNTY"
               style="T.CITY NAME"> 1 </label>
    </rule>
</styling_rules>');

バインディング・パラメータには1つ以上の値を含めることができ、次のようにこの一連の値を表すカスタムSQLデータ型を作成できます。

CREATE OR REPLACE TYPE string_array AS TABLE OF VARCHAR2(64);

その後で、例3-12に示すように、このカスタム・データ型をマップ・リクエストのバインディング・パラメータで使用できます。

例3-12 事前定義済テーマを使用したマップ・リクエスト(バインディング・パラメータとカスタム・タイプ)

<?xml version="1.0" standalone="yes"?>
<map_request title="Binding Parameters and STRING_ARRAY type"
             datasource="mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="false"
             format="PNG_STREAM">
    <themes>
        <theme name="COUNTIES_BY_STATES">
            <binding_parameters>
                <parameter value="FL,ME,CA,OH" type="STRING_ARRAY" />
            </binding_parameters>
        </theme>
    </themes>
</map_request>

3.1.1.12 拡張スタイルおよびレンダリング・ルールを使用したマップ・リクエスト

例3-13は、<rendering>要素を使用してマップをリクエストし、異なる列に基づく2つの拡張スタイルを結合します。この例では、POPVMKという拡張スタイルが列POP90に基づき、もう1つのEQRBRANKという拡張スタイルが列RANK90に基づいています。ポイント地物(CITIES表)がレンダリングされます。列POP90に関連付けられた拡張スタイルで地物の形状が定義され、列RANK90に関連付けられた拡張スタイルで地物の色が定義されます。

例3-13 拡張スタイルおよびレンダリング・ルールを使用したマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="Cross advanced styles"
             datasource="mvdemo"
             width="640"
             height="480"
             bgcolor="#a6caf0"
             antialiase="false"
             format="PNG_STREAM">
    <center size="7.7">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>-72.96,41.25</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="cities">
            <jdbc_query label_column="city"
                        spatial_column="location"
                        label_style="T.CITY NAME"
                        jdbc_srid="8265"
                        datasource="mvdemo"
                        asis="false">
                select location,city,pop90,rank90 from cities
            </jdbc_query>
            <rendering>
                <style name="POPVMK"
                       value_columns="POP90">
                    <substyle name="EQRBRANK"
                              value_columns="RANK90"
                              changes="FILL_COLOR" />
                </style>
            </rendering>
        </theme>
    </themes>
    <styles>
        <style name="STAR_TRANSP">
            <svg width="1in"
                 height="1in">
                <desc />
                <g class="marker"
                   style="stroke:#000000;fill:#FF0000;fill-opacity:0;width:15;height:15;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>
        <style name="POPVMK">
            <AdvancedStyle>
                <VariableMarkerStyle basemarker="STAR_TRANSP"
                                     startsize="7"
                                     increment="5">
                    <Buckets>
                        <RangedBucket seq="0"
                                      label="100217 - 1905803.75"
                                      low="100217"
                                      high="1905803.75" />
                        <RangedBucket seq="1"
                                      label="1905803.75 - 3711390.5"
                                      low="1905803.75"
                                      high="3711390.5" />
                        <RangedBucket seq="2"
                                      label="3711390.5 - 5516977.25"
                                      low="3711390.5"
                                      high="5516977.25" />
                        <RangedBucket seq="3"
                                      label="5516977.25 - 7322564"
                                      low="5516977.25"
                                      high="7322565" />
                    </Buckets>
                </VariableMarkerStyle>
            </AdvancedStyle>
        </style>
        <style name="EQRBRANK">
            <AdvancedStyle>
                <BucketStyle>
                    <Buckets low="1"
                             high="196"
                             nbuckets="4"
                             styles="C.RED,C.RB13_1,C.RB13_6,C.SEQ6_01" />
                </BucketStyle>
            </AdvancedStyle>
        </style>
    </styles>
    <legend bgstyle="fill:#ffffff;fill-opacity:50;stroke:#ff0000"
            profile="SMALL"
            position="SOUTH_EAST">
        <column>
            <entry text="Map Legend"
                   is_title="true" />
            <entry text="POP90:" />
            <entry style="POPVMK"
                   tab="1" />
            <entry text="RANK90:" />
            <entry style="EQRBRANK"
                   tab="1" />
        </column>
    </legend>
</map_request>

3.1.1.13 積上げスタイルを使用したマップ・リクエスト

例3-14は、<rendering>要素を使用してマップをリクエストし、複数のスタイル(C.COUNTIESおよびPIECHART1)を定義して各テーマ地物に適用します。

例3-14 積上げスタイルを使用したマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="Theme with Stacked Styles"
             datasource="mvdemo"
             width="600"
             height="450"
             bgcolor="#a6caf0"
             antialiase="true"
             format="PNG_STREAM">
    <center size="18">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>-122.729,40.423</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="STACKEDSTYLES">
            <jdbc_query label_column="state"
                        spatial_column="geom"
                        label_style="T.STATE NAME"
                        jdbc_srid="8265"
                        datasource="mvdemo"
                        asis="false">
                select geom,state,HHI0_10,HHI10_15,HHI100UP,HHI15_25,HHI25_35 from states
            </jdbc_query>
            <rendering>
                <style name="C.COUNTIES" />
                <style name="PIECHART1"
                       value_columns="HHI0_10,HHI10_15,HHI100UP,HHI15_25,HHI25_35" />
            </rendering>
        </theme>
    </themes>
    <styles>
        <style name="piechart1">
            <AdvancedStyle>
                <PieChartStyle pieradius="10">
                    <PieSlice name="A"
                              color="#FFFF00" />
                    <PieSlice name="B"
                              color="#000000" />
                    <PieSlice name="H"
                              color="#FF00FF" />
                    <PieSlice name="I"
                              color="#0000FF" />
                    <PieSlice name="W"
                              color="#FFFFFF" />
                </PieChartStyle>
            </AdvancedStyle>
        </style>
    </styles>
</map_request>

3.1.1.14 WFSマップ・リクエスト

この項では、事前定義済テーマを使用するWFSマップ・リクエストと、動的テーマを使用するWFSマップ・リクエストの例を示します。

例3-15では、次のように定義されているBC_MUNICIPALITYという事前定義済WFSテーマを使用してマップをリクエストします。

INSERT INTO user_sdo_themes VALUES (
'BC_MUNICIPALITY',
'WFS theme',
'BC_MUNICIPALITY',
'THE_GEOM',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wfs"
               service_url="http://www.refractions.net:8080/geoserver/wfs/GetCapabilities?"
               srs="EPSG:3005">
    <rule>
        <features style="C.BLUE" />
        <label column="name"
               style="T.CITY NAME"> 1 </label>
    </rule>
</styling_rules>');
例3-15に、この事前定義済WFSテーマをレンダリングするマップ・リクエストを示します。

例3-15 事前定義済WFSテーマを使用したマップ・リクエスト

I<?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">
    <center size="76000">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>1260500,470000</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="bc_municipality" />
    </themes>
</map_request>

例3-16は、動的WFSテーマを使用したマップ・リクエストです。

例3-16 動的WFSテーマを使用したマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="WFS MAP"
             datasource="mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="true"
             format="PNG_STREAM">
    <center size="76000">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>1260500,470000</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="wfs">
            <wfs_feature_request service_url="http://www.refractions.net:8080/geoserver/wfs/GetCapabilities?"
                                 srs="EPSG:3005"
                                 feature_name="bc_hospitals"
                                 spatial_column="the_geom"
                                 render_style="M.STAR"
                                 label_column="name"
                                 label_style="T.CITY NAME"
                                 datasource="mvdemo" />
        </theme>
    </themes>
</map_request>

例3-17は、地物をレンダリングするために拡張スタイルを指定した動的WFSテーマの場合のマップ・リクエストです。

例3-17 拡張スタイルを指定した動的WFSテーマを使用したマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="WFS Theme with Advanced Style"
             datasource="mvdemo"
             width="640"
             height="480"
             bgcolor="#a6cae0"
             antialiase="true"
             format="PNG_STREAM">
    <center size="10.">
        <geoFeature>
            <geometricProperty typeName="center">
                <Point>
                    <coordinates>-70., 44.</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
    <themes>
        <theme name="wfs">
            <wfs_feature_request service_url="http://199.29.1.81:8181/miwfs/GetFeature.ashx?"
                                 srs="EPSG:4326"
                                 feature_name="usa"
                                 spatial_column="obj"
                                 render_style="CBSTATES"
                                 label_column="STATE_NAME"
                                 label_style="T.CITY NAME"
                                 feature_attributes="state"
                                 datasource="mvdemo" />
        </theme>
    </themes>
    <styles>
        <style name="CBSTATES">
            <AdvancedStyle>
                <BucketStyle>
                    <Buckets default_style="C.COUNTIES">
                        <CollectionBucket seq="0"
                                          type="string"
                                          style="C.RB13_13">MA</CollectionBucket>
                        <CollectionBucket seq="1"
                                          type="string"
                                          style="C.RB13_1">NH</CollectionBucket>
                        <CollectionBucket seq="2"
                                          type="string"
                                          style="C.RB13_7">ME</CollectionBucket>
                    </Buckets>
                </BucketStyle>
            </AdvancedStyle>
        </style>
    </styles>
</map_request>

3.1.1.15 MapViewerを使用したJavaプログラム

例3-18では、MapViewerにXMLリクエストを送信し、MapViewerからレスポンスを受信するために、java.netパッケージを使用しています。

例3-18に、この事前定義済WFSテーマをレンダリングするマップ・リクエストを示します。

例3-18 MapViewerと対話するJavaプログラム

import java.net.*;
import java.io.*;
/**
 * A sample program that shows how to interact with MapViewer
 */
public class MapViewerDemo {
    private HttpURLConnection mapViewer = null;
    /**
     * Initializes this demo with the URL to the MapViewer server.
     * The URL is typically http://my_corp.com:8888/mapviewer/omserver.
     */
    public MapViewerDemo(String mapViewerURLString) {
        URL url;
        try {
            url = new URL(mapViewerURLString);
            mapViewer = (HttpURLConnection) url.openConnection();
            mapViewer.setDoOutput(true);
            mapViewer.setDoInput(true);
            mapViewer.setUseCaches(false);
        } catch (Exception e) {
            e.printStackTrace(System.err);
            System.exit(1);
        }
    }
    /**
     * Submits an XML request to MapViewer.
     * @param xmlreq the XML document that is a MapViewer request
     */
    public void submitRequest(String xmlreq) {
        try {
            mapViewer.setRequestMethod("POST"); //Use HTTP POST method.
            OutputStream os = mapViewer.getOutputStream();
            //MapViewer expects to find the request as a parameter
            //named "xml_request".
            xmlreq = "xml_request=" + URLEncoder.encode(xmlreq);
            os.write(xmlreq.getBytes());
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace(System.err);
            System.exit(1);
        }
    }
    /**
     * Receives an XML response from MapViewer.
     */
    public String getResponse() {
        ByteArrayOutputStream content = new ByteArrayOutputStream();
        InputStream is = null;
        try {
            is = mapViewer.getInputStream();
            int c;
            while ((c = is.read()) != -1)
                content.write(c);
            is.close();
            content.flush();
            content.close();
            return content.toString();
        } catch (Exception e) {
            e.printStackTrace(System.err);
            return null;
        }
    }
    // A simple main program that sends a list_data_sources XML
    // request to MapViewer through HTTP POST
    public static void main(String[] args) {
        if (args.length < 1) {
            System.out.println("Usage: java MapViewerDemo <mapviewer url>");
            System.out.println("Example: java MapViewerDemo http://my_corp.com/mapviewer/omserver");
            System.exit(1);
        }
        // A sample XML request for MapViewer
        String
        listDataSources = "<?xml version=\"1.0\" standalone=\"yes\"?>" +
            " <non_map_request>" +
            " <list_data_sources/>" +
            " </non_map_request>";
        MapViewerDemo tester = null;
        tester = new MapViewerDemo(args[0]);
        System.out.println("submitting request:\n" + listDataSources);
        tester.submitRequest(listDataSources);
        String response = tester.getResponse();
        System.out.println("response from MapViewer: \n" + response);
    }
}

3.1.1.16 MapViewerを使用したPL/SQLプログラム

例3-19は、XMLリクエストをMapViewerサーバーに送信するサンプルPL/SQLプログラムです。

例3-19 MapViewerを使用したPL/SQLプログラム

set serverout on size 1000000;
--
-- Author: Clarke Colombo
--
declare
l_http_req utl_http.req;
l_http_resp utl_http.resp;
l_url varchar2(4000):= 'http://my_corp.com:8888/mapviewer/omserver';
l_value varchar2(4000);
img_url varchar2(4000);
response sys.xmltype;
output varchar2(255);
map_req varchar2(4000);
begin
utl_http.set_persistent_conn_support(TRUE);
map_req := '<?xml version="1.0" standalone="yes"?>
<map_request title="MapViewer Demonstration"
             datasource="mvdemo"
             basemap="course_map"
             width="500"
             height="375"
             bgcolor="#a6cae0"
             antialiasing="false"
             format="GIF_URL">
    <center size="5">
        <geoFeature>
            <geometricProperty>
                <Point>
                    <coordinates>-122.2615, 37.5266</coordinates>
                </Point>
            </geometricProperty>
        </geoFeature>
    </center>
</map_request>';
l_http_req := utl_http.begin_request(l_url, 'POST', 'HTTP/1.0');
--
-- Sets up proper HTTP headers.
--
utl_http.set_header(l_http_req, 'Content-Type', 'application/x-www-form-urlencoded');
utl_http.set_header(l_http_req, 'Content-Length', length('xml_request=' || map_req));
utl_http.set_header(l_http_req, 'Host', 'my_corp.com');
utl_http.set_header(l_http_req, 'Port', '8888');
utl_http.write_text(l_http_req, 'xml_request=' || map_req);
--
l_http_resp := utl_http.get_response(l_http_req);
utl_http.read_text(l_http_resp, l_value);
response := sys.xmltype.createxml (l_value);
utl_http.end_response(l_http_resp);
img_url := response.extract('/map_response/map_image/map_content/@url').getstringval();
dbms_output.put_line(img_url);
end;
/