MapViewerには、Java Enterprise Editionパッケージの1セットとして、マッピング・サービスを提供するサーバーのコレクションが含まれています。これらのサーバーには、マップ・サーバー、マップ・データ・サーバー、マップ・タイル・サーバー、WMSサーバー(「付録E」を参照)、WMTSサーバー(「付録F」を参照)などがあります。Oracle Mapsアプリケーションの開発時には、Oracle Maps APIとMapViewerサーバーによって、必要とされるサービスが識別され、適切なサーバーに向けてマップ・サービス・リクエストが発行されます。通常、マップ・アプリケーションで明示的にサービス・リクエストを送信する必要はありません。ただし、この章で説明するMapViewerサーバーの詳しい知識があると、アプリケーションのデバッグや最適化が必要になったときに役立ちます。
主なトピック:
この主なトピックでは、MapViewerにXML形式のマップ・リクエストを発行する方法と、マップ・リクエスト(入力)およびレスポンス(出力)に関するXML Document Type Definition (DTD)について説明します。XMLは、HTTPプロトコルを使用した構造化文書の送信に広く使用されています。HTTPリクエスト(GET
またはPOST
メソッド)が使用される場合、リクエストにxml_request
というパラメータがあり、この値がリクエスト用のXML文書を含む文字列であると想定されます。
(MapViewer XML APIは、マップ・リクエストの他に、新規データソースの追加などの管理リクエストに使用できます。管理リクエストについては、第5章を参照してください。)
1.1.1項の図1-1で示すように、MapViewerの基本的なアクション・フローでは、クライアントがMapViewerのリモート・インスタンスを検索して、そのインスタンスに対してバインドし、マップ・リクエストを送信し、さらにMapViewerインスタンスによって返されたマップ・レスポンスを処理します。
MapViewerサーブレットへのリクエストの書式は、次のとおりです。
http://hostname[:port]/MapViewer-servlet-path?xml_request=xml-request
この書式の意味は次のとおりです。
hostname
は、MapViewerが動作するサーバーのネットワーク・パスです。
port
は、Webサーバーがリスニングするポートです。
MapViewer-servlet-path
は、MapViewerサーブレット・パスです(mapviewer/omserver
など)。
xml-request
は、HTMLのGET
またはPOST
メソッドを使用して発行される、URLでエンコードされたXMLリクエストです。
入力XMLは、すべてのリクエストに必須です。出力は、リクエストの内容によって異なります。レスポンスは、XML文書またはユーザーがリクエストした(生成画像)ファイルが含まれるバイナリ・オブジェクトのいずれかになります。
入力リクエストでは、データソースの指定は必須であり、次の1つ以上を指定できます。
テーマおよびスタイル。
マップ表示の中心点またはボックスと、ハイライト、ラベルおよびスタイルなどのオプション。
事前定義済ベース・マップ。再利用したり、カスタム・データを重ねたりできます。
アクセス可能なデータベースから動的に取得されて直接表示される、ユーザー・データ・ポイント(または任意のジオメトリ)を含むカスタム・テーマ。
表示されるXMLリクエスト文字列で指定されたカスタム地物(ポイント、円または任意のジオメトリ)。これらの地物では、DTDで定義されているように、<geoFeature>
要素(3.1.2.5項を参照)の書式で動的データを提供する必要があります。<geoFeature>
要素のジオメトリ部分では、Open GIS Consortium Geography Markup Languageバージョン1.0 (OGC GML v1.0)で指定されたジオメトリDTDが使用されます。
テーマ・マッピング。
Map Builderツール(第7章を参照)を使用して、ベース・マップ、テーマおよびスタイル(個々の記号表現)の定義を管理できます。
現在のリリースでは、MapViewerはマップ・リクエストの位置を識別する座標ペアのみを使用できます。マップに対する直接入力として郵便の住所は使用できません。
このトピックでは、最初にいくつかのマップ・リクエストの例(3.1.1項を参照)を示してから、リクエストおよびその他の操作に関する次のXML DTDについて詳しく説明します。
この項では、マップ・リクエストの例を示します。ここでは、概念、要素および属性(詳細は3.1.2項を参照)について述べています。次の例を示す項で構成されています。
例3-1は、きわめて単純なマップ・リクエストです。ここでは、mvdemo
というデータソースのブランクの青い画像で構成され、最上部にHello Worldという文字列が示されたマップがリクエストされます。(この特定のマップ・リクエストによってデータソースからマップ・データが取得されない場合でも、マップ・リクエストにはdatasource
属性が必要です。)
例3-2は、動的に定義されるテーマが1つ含まれる単純なマップ・リクエストです。ここでは、COUNTIES表からのすべてのOracle Spatial and Graphジオメトリのマップがリクエストされます。
例3-3では、結果のマップについて指定された中心を含むマップをリクエストし、ベース・マップ(basemap="us_base"
)に含まれる事前定義済テーマに加えて、レンダリングされる事前定義済テーマ(poi_theme_us_restaurants
)を指定しています。
例3-3 ベース・マップ、中心および追加の事前定義済テーマを含むマップ・リクエスト
<?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>
例3-3に関する注意は、次のとおりです。
basemap
が指定されているため、MapViewerは、指定されたテーマ(poi_theme_us_restaurants
)を描画する前に、そのベース・マップのすべての事前定義済テーマを最初に描画します。
M.MOTEL
スタイルのマーカーおよびT.MOTEL
スタイルのラベルMotel 1
によって中心が描画されます。
この中心を囲んで半径300mの円が描画されます。
例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
は動的に定義されるテーマです。動的に定義されるテーマについては、3.1.2.20項および3.1.2.9項を参照してください。
例3-5は、動的に定義される可変マーカー・スタイルを含むポイント地物をレンダリングするためのマップ・リクエストを示しています。attribute_values
属性は、可変マーカー・スタイルに定義されているように、適切なバケット(値が分類される範囲用)を検索するために使用される値を定義します。
例3-5 属性値および動的に定義される可変マーカー・スタイルを含むポイント地物のマップ・リクエスト
<?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-6では、他のすべての標準的なベクター・データの下にイメージ・テーマが表示されるマップをリクエストしています。イメージ・テーマは、マップ・リクエスト内の<theme>
要素の一部として、<jdbc_image_query>
要素内に指定されています。(イメージ・テーマの詳細は、2.3.3項を参照してください。)
例3-6 イメージ・テーマを含むマップ・リクエスト
<?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に示すリクエストを次のように処理します。
MapViewerは、現在のマップ・ウィンドウ・コンテキストでユーザー指定の問合せ(SELECT image, img_extent, image_id FROM my_images
)を実行し、画像データを取得します。
MapViewerは、すべての登録済イメージ・レンダラの内部リストで、ECW形式(image_format="ECW"
)をサポートするレンダラがあるかどうかをチェックします。Oracleが提供するMapViewerはECW形式をサポートしていないため、付録Cで説明するように、この形式をサポートするカスタム・イメージ・レンダラを実装し、登録する必要があります。
MapViewerはrenderImages
メソッドをコールし、ユーザー指定の問合せから取得された画像データが、パラメータの1つとしてこのメソッドに渡されます。
MapViewerは、リクエストされたベクター・データを取得し、レンダリングされた画像の上にそのデータをレンダリングします。
例3-7では、マップ凡例の画像のみを含むマップをリクエストしますが、空間データはレンダリングしません。この例の凡例は、都市、州の境界線、州間高速道路および郡の人口密度の識別に使用する記号表現について説明しています。(マップ凡例については、3.1.2.11項を参照してください。)
例3-7 マップ凡例の画像のみに関するマップ・リクエスト
<?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-8では、郡テーマのデータに関連付けられた座標系(経度/緯度に対するjdbc_srid="8265"
、NAD 83)とは異なる座標系(米国のsrid="32775"
、正積図法)で表示されるマップをリクエストしています。その結果、MapViewerではレンダリング・プロセス中にデータSRIDのすべてのジオメトリをマップ・リクエストSRIDに変換します。
テーマ・データに関連付けられた座標系がない場合、MapViewerではデータがマップ・リクエストの座標系に関連付けられていると想定されるため、変換は行われません。
例3-8 データSRIDと異なるSRIDを含むマップ・リクエスト
<?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>
この項では、円グラフ・テーマによるテーマ・マッピングの使用方法を示します。結果のマップでは、各郡に円グラフが表示され、各区分のサイズは、郡の指定された世帯収入レベル・カテゴリ(低、中または高)に属する人口の比率を反映したものになります。
基本的な手順は次のとおりです。
使用する円グラフの特性を定義する拡張スタイルを作成します。次の例では、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では無視されます。
次の例のように、作成したスタイルを使用した新規テーマを作成します。
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"> </features> <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_LOW、INC_MEDおよびINC_HIGHです。これらの列は、円グラフの各区分のサイズを決定する際に使用される値を提供します。
作成したテーマを使用したマップ・リクエストを発行します。例3-9では、ステップ2で作成したTHEME_PIE_CHART
テーマを使用したマップをリクエストしています。
例3-9 円グラフ・テーマを使用したマップ・リクエスト
<?xml version="1.0" standalone="yes"?> <map_request datasource = "mvdemo" format="PNG_STREAM"> <themes> <theme name="THEME_PIE_CHART"/> </themes> </map_request>
マップ・リクエストを発行する際に、動的(JDBC)テーマに円グラフ・スタイルも使用できます。円グラフ・スタイルで必要とされる属性列を識別する必要があるため、マップ・リクエストではJDBCテーマに関するSQL全問合せを指定する必要があります。SDO_GEOMETRY列またはラベル列ではないSELECT構文のリスト内の列は、拡張スタイルで使用できる属性列であるとみなされます。
例3-10は、円グラフ・スタイルを使用したJDBCテーマを含むリクエストのサンプルです。SQL問合せ(SELECT geom, 'dummy', sales, service, training FROM support_centers
)は、テーマ定義に含まれます。
例3-10 円グラフ・スタイルを使用したJDBCテーマ
<?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-11では、中心および比率スケールを指定してマップ領域を定義するマップをリクエストしています。使用しているテーマは2つであり、それらはTHEME_US_COUNTIES1
という事前定義済テーマ(デフォルトの画面インチ・スケール・モードを使用)およびSTATES_TH
というJDBCテーマ名(比率モードを使用)です。
例3-11 比率スケールおよび複数テーマ・スケール・モードを使用したマップ・リクエスト
<?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-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-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-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>
この項では、事前定義済テーマを使用する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"> </features> <label column="name" style="T.CITY NAME"> 1 </label> </rule> </styling_rules>');
例3-15に、この事前定義済WFSテーマをレンダリングするマップ・リクエストを示します。
例3-15 事前定義済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">
<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-18では、MapViewerにXMLリクエストを送信し、MapViewerからレスポンスを受信するために、java.net
パッケージを使用しています。(ただし、多くのプログラマにとっては、第4章で説明するJavaBeanベースのAPIを使用した方が便利です。)
例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-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; /
マップ・リクエストの完全なDTDを次に示します。各要素や属性を説明する参照項目が続きます。
<?xml version="1.0" encoding="UTF-8"?> <!-- <box> is defined in OGC GML v1.0 --> <!ELEMENT map_request ((box | center | bounding_themes)?, srs?, legend?, themes?, styles?, scale_bar?, north_arrow?, geoFeature*)> <!ATTLIST map_request datasource CDATA #REQUIRED srid CDATA #IMPLIED basemap CDATA #IMPLIED width CDATA #IMPLIED height CDATA #IMPLIED antialiasing (TRUE|FALSE) "FALSE" imagescaling (TRUE|FALSE) "TRUE" format (GIF|GIF_URL|GIF_STREAM|JAVA_IMAGE| PNG_STREAM|PNG_URL|PNG8_STREAM|PNG8_URL| JPEG_STREAM|JPEG_URL|PDF_STREAM|PDF_URL| SVG_STREAM|SVGZ_STREAM|SVGTINY_STREAM| SVG_URL|SVGZ_URL|SVGTINY_URL) "GIF_URL" transparent (TRUE|FALSE) "FALSE" title CDATA #IMPLIED bgcolor (CDATA) "#A6CAF0" bgimage CDATA #IMPLIED zoomlevels CDATA #IMPLIED zoomfactor CDATA #IMPLIED zoomratio CDATA #IMPLIED initscale CDATA #IMPLIED navbar (TRUE|FALSE) "TRUE" infoon (TRUE|FALSE) "TRUE" onclick CDATA #IMPLIED onmousemove CDATA #IMPLIED rasterbasemap (TRUE|FALSE) "FALSE" onrectselect CDATA #IMPLIED onpolyselect CDATA #IMPLIED use_cached_basemap (TRUE|FALSE) "FALSE" snap_to_cache_scale (TRUE|FALSE) "FALSE" title_style CDATA #IMPLIED footnote CDATA #IMPLIED footnote_style CDATA #IMPLIED rotation CDATA #IMPLIED* > <!ELEMENT center (geoFeature)> <!ATTLIST center size CDATA #REQUIRED > <!ELEMENT box (coordinates) > <!ATTLIST box ID CDATA #IMPLIED srsName CDATA #REQUIRED preserve_aspect_ratio (TRUE|FALSE) "FALSE" > <!ELEMENT bounding_themes (#PCDATA) > <!ATTLIST bounding_themes border_margin CDATA #IMPLIED preserve_aspect_ratio CDATA "TRUE" size_hint CDATA #IMPLIED > <!ELEMENT srs (#PCDATA) > <!ELEMENT themes (theme+) > <!ELEMENT theme (jdbc_query | jdbc_image_query | jdbc_georaster_query | jdbc_network_query | jdbc_topology_query | map_tile_theme )? > <!ATTLIST theme name CDATA #REQUIRED datasource CDATA #IMPLIED max_scale CDATA #IMPLIED min_scale CDATA #IMPLIED label_always_on (TRUE|FALSE) "FALSE" fast_unpickle (TRUE|FALSE) "TRUE" mode CDATA #IMPLIED min_dist CDATA #IMPLIED fixed_svglabel (TRUE|FALSE) "FALSE" visible_in_svg (TRUE|FALSE) "TRUE" selectable_in_svg (TRUE|FALSE) "FALSE" part_of_basemap (TRUE|FALSE) "FALSE" simplify_shapes (TRUE|FALSE) "TRUE" onclick CDATA #IMPLIED onmousemove CDATA #IMPLIED onmouseover CDATA #IMPLIED onmouseout CDATA #IMPLIED workspace_name CDATA #IMPLIED workspace_savepoint CDATA #IMPLIED workspace_date CDATA #IMPLIED workspace_date_format CDATA #IMPLIED > <!ELEMENT jdbc_query (#PCDATA, hidden_info?)> <!ATTLIST jdbc_query asis (TRUE|FALSE) "FALSE" spatial_column CDATA #REQUIRED key_column CDATA #IMPLIED label_column CDATA #IMPLIED label_style CDATA #IMPLIED render_style CDATA #IMPLIED datasource CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" > <!ELEMENT hidden_info (field+)> <!ELEMENT field (#PCDATA)> <!ATTLIST field column CDATA #REQUIRED name CDATA #IMPLIED > <!ELEMENT jdbc_image_query (#PCDATA) > <!ATTLIST jdbc_image_query asis (TRUE|FALSE) "FALSE" image_format CDATA #REQUIRED image_column CDATA #REQUIRED image_mbr_column CDATA #REQUIRED image_resolution CDATA #IMPLIED image_unit CDATA #IMPLIED datasource CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" > <!ELEMENT jdbc_georaster_query (#PCDATA) > <!ATTLIST jdbc_georaster_query asis (TRUE|FALSE) "FALSE" georaster_table CDATA #REQUIRED georaster_column CDATA #REQUIRED raster_id CDATA #IMPLIED raster_table CDATA #IMPLIED raster_pyramid CDATA #IMPLIED raster_bands CDATA #IMPLIED datasource CDATA #IMPLIED polygon_mask CDATA #IMPLIED transparent_nodata CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin"> <!ELEMENT jdbc_network_query (#PCDATA) > <!ATTLIST jdbc_network_query asis (TRUE|FALSE) "FALSE" network_name CDATA #REQUIRED network_level CDATA #IMPLIED link_style CDATA #IMPLIED direction_style CDATA #IMPLIED direction_position CDATA #IMPLIED direction_markersize CDATA #IMPLIED link_labelstyle CDATA #IMPLIED link_labelcolumn CDATA #IMPLIED node_style CDATA #IMPLIED node_markersize CDATA #IMPLIED node_labelstyle CDATA #IMPLIED node_labelcolumn CDATA #IMPLIED path_ids CDATA #IMPLIED path_styles CDATA #IMPLIED path_labelstyle CDATA #IMPLIED path_labelcolumn CDATA #IMPLIED analysis_algorithm CDATA #IMPLIED shortestpath_style CDATA #IMPLIED shortestpath_startnode CDATA #IMPLIED shortestpath_endnode CDATA #IMPLIED shortestpath_startstyle CDATA #IMPLIED shortestpath_endstyle CDATA #IMPLIED withincost_startnode CDATA #IMPLIED withincost_style CDATA #IMPLIED withincost_cost CDATA #IMPLIED withincost_startstyle CDATA #IMPLIED datasource CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" > <!ELEMENT jdbc_topology_query (#PCDATA)> <!ATTLIST jdbc_topology_query asis (TRUE|FALSE) "FALSE" topology_name CDATA #REQUIRED feature_table CDATA #REQUIRED spatial_column CDATA #REQUIRED label_column CDATA #IMPLIED label_style CDATA #IMPLIED render_style CDATA #IMPLIED datasource CDATA #IMPLIED edge_style CDATA #IMPLIED edge_marker_style CDATA #IMPLIED edge_marker_size CDATA #IMPLIED edge_label_style CDATA #IMPLIED node_style CDATA #IMPLIED node_label_style CDATA #IMPLIED face_style CDATA #IMPLIED face_label_style CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" > <!ELEMENT map_tile_theme (#PCDATA)> <!ATTLIST map_tile_theme map_tile_layer CDATA # REQUIRED snap_to_tile_scale (TRUE|FALSE) "FALSE" > <!ELEMENT geoFeature (description?, property*, geometricProperty)> <!ATTLIST geoFeature typeName CDATA #IMPLIED id CDATA #IMPLIED render_style CDATA #IMPLIED text_style CDATA #IMPLIED label CDATA #IMPLIED label_always_on (TRUE|FALSE) "FALSE" marker_size CDATA #IMPLIED radius CDATA #IMPLIED attribute_values CDATA #IMPLIED orient_x CDATA #IMPLIED orient_y CDATA #IMPLIED orient_z CDATA #IMPLIED selectable_in_svg (TRUE|FALSE) "FALSE" onclick CDATA #IMPLIED hidden_info CDATA #IMPLIED > <!ELEMENT legend column+ > <!ATTLIST legend bgstyle CDATA #implied font CDATA #implied location_x CDATA #implied location_y CDATA #implied offset_x CDATA #implied offset_y CDATA #implied profile (MEDIUM|SMALL|LARGE) "MEDIUM" position (SOUTH_WEST|SOUTH_EAST|SOUTH|NORTH| NORTH_WEST|NORTH_EAST|EAST|WEST|CENTER) "SOUTH_WEST" > <!ELEMENT column entry+ > <!ATTLIST entry is_title (true|false) "false" is_separator (true|false) "false" tab CDATA "0" style CDATA #implied text CDATA #implied > <!ELEMENT scale_bar > <!ATTLIST scale_bar mode (METRIC_MODE|US_MODE|DUAL_MODES) "METRIC_MODE" position (SOUTH_WEST|SOUTH_EAST|SOUTH|NORTH| NORTH_WEST|NORTH_EAST) "NORTH_EAST" offset_y CDATA #implied offset_y CDATA #implied color1 CDATA #implied color1_opacity CDATA #implied color2 CDATA #implied color2_opacity CDATA #implied length_hint CDATA #implied label_color CDATA #implied label_font_family CDATA #implied label_font_size CDATA #implied label_halo_size CDATA #implied label_position (TOP|BOTTOM) "TOP" > <!ELEMENT styles (style+) > <!ELEMENT style (svg | AdvancedStyle)?> <!ATTLIST style name CDATA #REQUIRED > <!ELEMENT north_arrow (style, location?, size?) >
マップ・リクエストDTDの主な要素および属性については、次の各項で説明します。<map_request>
要素については3.1.2.1項で説明しています。残りの関連要素については、この後の項で要素名のアルファベット順に説明しています。
<map_request>
要素には、次の定義が含まれます。
<!ELEMENT map_request ((box | center | bounding_themes)?, srs?, legend?, themes?, styles?, geoFeature*)> <!ELEMENT map_request ((box | center | bounding_themes)?, srs?, legend?, themes?, styles?, geoFeature*, north_arrow?)>
MapViewerに対するマップ・リクエストのルート要素は、常にmap_request
という名前になります。
<map_request>
には、<box>
(3.1.2.3項を参照)、<center>
(3.1.2.4項を参照)または<bounding_themes>
(3.1.2.2項を参照)のいずれかである子要素を含めることができます。この子要素は、マップに表示されるユーザー・データの範囲を指定します。いずれの子要素も指定されていない場合、結果のマップは、MapViewerで使用できるすべてのデータを使用して描画されます。
オプションの子要素<srs>
は、現行バージョンのMapViewerでは無視されます。
オプションの<legend>
要素(3.1.2.11項を参照)は、生成されたマップの上に凡例(マップ挿入図)を描画し、マップの視覚的な外観をユーザーにとってより意味のあるものにするために使用します。
オプションの<themes>
要素(3.1.2.21項を参照)は、事前定義済テーマまたは動的に定義されるテーマを指定します。
オプションの<styles>
要素(3.1.2.19項を参照)は、動的に定義されるスタイルを指定します。
<geoFeature>
要素(3.1.2.5項を参照)は、任意の数の各ジオメトリとそのレンダリング属性の指定に使用できます。
オプションの<north_arrow>
要素(3.1.2.13項を参照)は、リクエストの回転に基づいて北向き矢印のマーカーを描画するために使用されます。
MapViewerでは、(ベース・マップがルート要素で属性として指定されている場合に)ベース・マップで定義されたテーマが最初に描画され、次にユーザー指定のテーマ、最後に任意のgeoFeature
要素が描画されます。
ルート要素の<map_request>
には多くの属性があり、その中の一部は必須属性で、その他はオプション属性です。これらの属性は次のように定義されます。
<!ATTLIST map_request datasource CDATA #REQUIRED srid CDATA #IMPLIED basemap CDATA #IMPLIED width CDATA #IMPLIED height CDATA #IMPLIED antialiasing (TRUE|FALSE) "FALSE" imagescaling (TRUE|FALSE) "TRUE" format (GIF|GIF_URL|GIF_STREAM|JAVA_IMAGE| PNG_STREAM|PNG_URL|PNG8_STREAM|PNG8_URL| JPEG_STREAM|JPEG_URL|PDF_STREAM|PDF_URL| SVG_STREAM|SVGZ_STREAM|SVGTINY_STREAM| SVG_URL|SVGZ_URL|SVGTINY_URL) "GIF_URL" transparent (TRUE|FALSE) "FALSE" title CDATA #IMPLIED title_style CDATA #IMPLIED footnote CDATA #IMPLIED footnote_style CDATA #IMPLIED rotation CDATA #IMPLIED* bgcolor (CDATA) "#A6CAF0" bgimage CDATA #IMPLIED zoomlevels CDATA #IMPLIED zoomfactor CDATA #IMPLIED zoomratio CDATA #IMPLIED initscale CDATA #IMPLIED navbar (TRUE|FALSE) "TRUE" infoon (TRUE|FALSE) "TRUE" onclick CDATA #IMPLIED onmousemove CDATA #IMPLIED rasterbasemap (TRUE|FALSE) "FALSE" onrectselect CDATA #IMPLIED onpolyselect CDATA #IMPLIED keepthemesorder CDATE #IMPLIED use_cached_basemap (TRUE|FALSE) "FALSE" snap_to_cache_scale (TRUE|FALSE) "FALSE" title_style CDATA #IMPLIED footnote CDATA #IMPLIED footnote_style CDATA #IMPLIED rotation CDATA #IMPLIED* >
datasource
は、データソースを指定する必須属性です。データソースはMapViewerに対し、マップのレンダリングに必要なユーザー・データ(およびマッピング・メタデータ)をフェッチする場所に関する情報を提供します。
srid
はオプション属性です。この属性が指定されている場合、マップ・リクエストの座標系(空間参照システム)のSRID値が指定されます。必要な場合は、テーマ・ジオメトリが、レンダリングされる前に指定した座標系に変換されます。ただし、座標系システムが定義されていないジオメトリは変換されません。この属性が指定されていない場合、MapViewerでは、レンダリングされる最初のテーマの座標系をマップ・リクエストの座標系として使用します。
basemap
はオプション属性です。この属性が指定されている場合、MapViewerによって、このベース・マップに指定されたすべてのテーマがレンダリングされます。ベース・マップの定義は、ユーザーのUSER_SDO_MAPSビューに格納されます(2.9.3項を参照)。独自のテーマおよびジオメトリ地物を表示するバックグラウンド・マップが常に必要である場合は、この属性を使用します。
width
およびheight
はオプション属性で、この両方によって結果のマップの画像サイズ(デバイス単位)を指定します。このサイズは、ウィンドウに表示されるユーザーのソース・データの範囲である、center
要素またはbox
要素で指定されるサイズとは異なります。デフォルトの幅と高さの値は、それぞれ500ピクセルと375ピクセルです。ただし、PDF形式の場合のみ例外で、ピクセルではなくpt
が単位として使用されます。換算は、約1 pt = 1.333 px(または1px = 0.75 pt)となります。そのため、たとえば、PDF形式でサイズ500x375 "pt"のマップをリクエストすると、約667x500ピクセルの画像が生成されます。
antialiasing
はオプション属性です。この属性の値がTRUE
の場合、MapViewerではアンチエイリアシングを使用してマップ画像がレンダリングされます。この場合、通常はグラフィック品質の高いマップが生成されますが、マップの生成に時間がかかる場合があります。マップ生成の速度を上げるため、デフォルト値はFALSE
となっています。(後方互換性を確保するため、antialiase
はantialiasing
のシノニムとなっていますが、antialiasing
を使用することをお薦めします。)
imagescaling
はオプション属性です。この属性の値がTRUE
(デフォルト)の場合、MapViewerでは、現在の問合せウィンドウと生成されるマップ画像のサイズを合わせるために、画像のスケール変更が試行されます。値がFALSE
でイメージ・テーマが直接的または間接的(ベース・マップを介しているなど)に含まれる場合、イメージ・テーマの画像は元の解像度で表示されます。マップ・リクエストにイメージ・テーマが関係していない場合、この属性は影響しません。
format
は、返されるマップ画像のファイル形式を指定するオプション属性です。デフォルト値はGIF_URL
で、これはMapViewerホスト・システムに格納されたGIF画像に対するURLです。
GIF
と指定した場合、生成されたGIF画像データはMapResponse
オブジェクトに埋め込まれ、クライアントに返されます。GIF_STREAM
と指定した場合、生成された画像マップの内容は、HTTP MIMEタイプimage/gif
によって直接クライアントに返されます。
JAVA_IMAGE
と指定した場合、色モデルがTYPE_INT_RGB
であるJava 2D BufferedImage
オブジェクトがMapResponse
オブジェクトに埋め込まれ、クライアントに返されます。
PNG_STREAM
と指定した場合、索引なしのPNG形式の画像のストリームが直接返されます。PNG_URL
と指定した場合、MapViewerホスト・システムに格納された索引なしのPNG画像に対するURLが返されます。(PNG画像形式には、画像の高速エンコードおよびトゥルー・カラーのサポートなど、GIF形式と比べていくつかの利点があります。)
PNG8_STREAM
と指定した場合、索引付きのPNG形式の画像のストリームが直接返されます。PNG8_URL
と指定した場合、MapViewerホスト・システムに格納された索引付きのPNG画像に対するURLが返されます。(PNG画像形式には、画像の高速エンコードおよびトゥルー・カラーのサポートなど、GIF形式と比べていくつかの利点があります。索引付きのPNG形式では、マップの表示に使用できるカラーの総数は256色に制限されます。)
JPEG_STREAM
と指定した場合、JPEG形式の画像のストリームが直接返されます。JPEG_URL
と指定した場合、MapViewerホスト・システムに格納されたJPEG画像に対するURLが返されます。
PDF_STREAM
と指定した場合、PDFドキュメント形式の画像のストリームが直接返されます。PDF_URL
と指定した場合、MapViewerホスト・システムに格納されたPDFドキュメントに対するURLが返されます。
SVG_STREAM
と指定した場合、SVG Basic (SVGB)形式の画像のストリームが直接返されます。SVG_URL
と指定した場合、MapViewerホスト・システムに格納されたSVG Basic画像に対するURLが返されます。
SVGZ_STREAM
と指定した場合、SVG圧縮(SVGZ)形式の画像のストリームが直接返されます。SVGZ_URL
と指定した場合、MapViewerホスト・システムに格納されたSVG圧縮画像に対するURLが返されます。SVG圧縮形式は、SVGマップのサイズをSVG Basic形式に比べて40から70パーセント効果的に縮小できるため、パフォーマンスが向上します。
SVGTINY_STREAM
と指定した場合、SVG Tiny (SVGT)形式の画像のストリームが直接返されます。SVGTINY_URL
と指定した場合、MapViewerホスト・システムに格納されたSVG Tiny画像に対するURLが返されます。(SVG Tiny形式は、携帯電話など、表示能力が制限されるデバイス用に設計されています。)
transparent
は、索引付きPNG (PNG8_STREAM
またはPNG8_URL
)形式のみに適用されるオプション属性です。値がTRUE
の場合、MapViewerではマップのバックグラウンド・カラーが完全に透明になります。デフォルト値はFALSE
です。
title
は、結果のマップ画像の上に表示されるマップ・タイトルを指定するオプション属性です。
title_style
は、タイトルのレンダリング時に使用するテキスト・スタイルの名前を指定するオプション属性です。
footnote
は、最終的なマップに追加する脚注のテキストを指定するオプション属性です。
footnote_style
は、脚注のレンダリング時に使用するテキスト・スタイルの名前を指定するオプション属性です。
bgcolor
は、結果のマップ画像のバックグラウンド・カラーを指定するオプション属性です。デフォルトは水色(RGB値はA6CAF0)です。これは16進数で指定する必要があります。
bgimage
は、結果のマップ画像のバックグラウンド・イメージ(GIFまたはJPEG形式のみ)を指定するオプション属性です。画像はmapリクエスト処理中の実行時に取得され、その他のマップ地物より前にレンダリングされますが、bgcolor
の値はバックグラウンド・イメージの前にレンダリングされます。
zoomlevels
は、SVGマップのズーム・レベル数を指定するオプション属性です。デフォルトは4です。
zoomfactor
は、SVGマップのズーム係数を指定するオプション属性です。ズーム係数は、ズーム・レベルで整数値を1つ上げる(ズームイン操作)ごとに、現行のズーム比に掛ける数値です。zoomfactor
値の逆数は、ズーム・レベルで整数値を1つ下げる(ズームアウト操作)ごとに使用されます。たとえば、zoomfactor
値が2(デフォルト)の場合、ズーム・レベル4から5にズームインすると、2倍の大きさに拡大されます。たとえば、ズーム・レベル4でマップの1インチが10マイルを表す場合、ズーム・レベル5では5マイルを表します。ズーム比とはSVGマップの相対的なスケールのことで、元のサイズ(ズーム・レベル0)ではズーム比は1です。
zoomratio
は、SVGマップが最初に表示されるときのズーム比を指定するオプション属性です。デフォルト値は1で、これが元のマップ・サイズ(ズーム・レベル0)です。ズーム比を大きくするとマップはズームイン表示され、値を小さくするとズームアウト表示されます。
initscale
は、SVGマップが最初に表示されるときの初期スケールを指定するオプション属性です。デフォルト値は1で、これが元のマップ・サイズ(ズーム・レベル0)です。値を大きくすると、SVGマップが最初に表示されたときにズームイン表示されます。
navbar
は、SVGマップ上に組込みのナビゲーション・バーを表示するかどうかを指定するオプション属性です。値がTRUE
(デフォルト)の場合、ナビゲーション・バーが表示され、FALSE
に設定されている場合は表示されません。
infoon
は、非表示情報が設定された地物の上にマウスを移動したときに、非表示情報を表示するかどうかを指定するオプション属性です。値がTRUE
(デフォルト)の場合、マウスをそのような地物の上に移動すると非表示情報が表示されます。FALSE
に設定すると、そのような地物の上にマウスを移動しても、非表示情報は表示されません。ただし、値に関係なく、SVGマップには非表示情報が常にレンダリングされます。この属性は、非表示情報を表示できるかどうかのみを制御します。(地物の非表示情報を指定するには、3.1.2.5項で説明しているように、<geoFeature>
要素のhidden_info
属性を使用します。)
onclick
は、ユーザーがSVGマップをクリックしたときにコールされるJavaScript関数名を指定するオプション属性です。JavaScript関数は、SVG定義以外にHTML文書で定義する必要があります。この関数には、xおよびyの2つのパラメータが必要です。これらのパラメータは、クリックされたSVGウィンドウ内の座標を指定します。座標はローカルのSVGウィンドウ座標系で定義されます。この座標系は左上角の(0, 0)で始まり、右下角(幅, 高さ)で終わります。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
onmousemove
は、ユーザーがSVGマップ上にマウスを移動するとコールされる、JavaScript関数名を指定するオプション属性です。JavaScript関数は、SVG定義以外にHTML文書で定義する必要があります。この関数には、xおよびyの2つのパラメータが必要です。これらのパラメータは、移動が発生したSVGウィンドウ内の座標を指定します。座標はローカルのSVGウィンドウ座標系で定義されます。この座標系は左上角の(0, 0)で始まり、右下角(幅, 高さ)で終わります。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
rasterbasemap
はオプション属性です。マップ形式がSVGで、この属性の値がTRUE
の場合、MapViewerではベース・マップをラスター画像としてレンダリングします。この場合、ベース・マップの画像がSVGマップのバックグラウンド・イメージとなり、その他すべてのベクター地物がその上にレンダリングされます。
onrectselect
は、ユーザーがSVGマップ上でマウスをクリックおよびドラッグして(対角線上で向かい合う2つの角を示して)、矩形の選択領域を描画する場合にコールされるJavaScript関数の名前を指定するオプション属性です。JavaScript関数は、SVG定義以外にHTML文書で定義する必要があります。この関数にはパラメータを指定しないでください。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
onpolyselect
は、ユーザーがSVGマップ上でマウスをクリックおよびドラッグして(2つ以上の頂点を示して)、ポリゴンの選択領域を描画する場合にコールされるJavaScript関数の名前を指定するオプション属性です。JavaScript関数は、SVG定義以外にHTML文書で定義する必要があります。この関数にはパラメータを指定しないでください。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
keepthemesorder
はオプション属性です。マップ形式がSVG以外で、この属性の値がTRUE
の場合、MapViewerは常にマップ・リクエストで指定された順序に従って一連のテーマをレンダリングします。この属性の値がFALSE
の場合は、ベクター・テーマより前にラスター・テーマがレンダリングされます。
use_cached_basemap
はオプション属性です。この属性の値がTRUE
で、basemap
属性によって指定されたのと同じベース・マップをマップ・タイル層がキャッシングする場合、MapViewerはマップ・タイル・サーバーによってキャッシングされたマップ画像を使用して、マップ・リクエストによって指定されたマップをレンダリングしようとします。マップ・タイル・サーバーの詳細は、3.3項を参照してください。
snap_to_cache_scale
は、use_cached_basemap
属性の値がTRUE
の場合にのみ有効なオプション属性です。これは、マップ・リクエストによって指定されたマップ・スケールが事前定義済のキャッシングされたズーム・レベルのいずれにも一致しない場合にのみ、MapViewerの動作に影響を与えます。この属性がFALSE
の場合で、マップ・リクエストによって指定されたマップ・スケールが、キャッシングされた事前定義済ズーム・レベルのスケールに合致するときにのみ、MapViewerはキャッシングされたマップ画像を使用してベース・マップをレンダリングします。この属性がTRUE
の場合で、キャッシングされた事前定義済ズーム・レベルのいずれにもリクエストのマップ・スケールが一致しないとき、MapViewerは常にキャッシングされたマップ画像を使用してベース・マップをレンダリングし、マップ・スケールを調整してキャッシングされた事前定義済ズーム・レベルのスケールに合せます。
title_style
は、タイトルに使用するテキスト・スタイルを定義するオプション属性です。
footnote
は、マップに追加する脚注のテキストを定義するオプション属性です。
footnote_style
は、脚注テキストに使用するテキスト・スタイルを定義するオプション属性です。
rotation
は、マップを回転する度数を定義するオプション属性です。正の値を指定するとマップは左回りに回転します。リクエストに定義済のウィンドウがない場合(中心やサイズが未定義であるか、枠テーマを使用している場合)、rotationの値は無視されます。Oracle Mapsのキャッシュから得られるベース・マップを使用するリクエストに対して、回転はサポートされません。
<bounding_themes>
要素には、次の定義が含まれます。
<!ELEMENT bounding_themes (#PCDATA) > <!ATTLIST bounding_themes border_margin CDATA #IMPLIED preserve_aspect_ratio CDATA "TRUE" size_hint CDATA #IMPLIED >
マップのデータ・サイズを事前に決められない場合、1つ以上のテーマを枠テーマとして指定できます。たとえば、一定の基準を満たすデータ・ポイントをすべて選択する動的テーマが1つあり、選択したすべてのデータ・ポイントを囲むことのできる大きさのマップ上に、それらを表示するとします。このような場合、<bounding_themes>
要素を使用してそのような動的テーマの名前を指定できます。MapViewerでは、まず<bounding_themes>
要素で指定されたテーマを処理し、枠テーマにより生成された地物に基づいて枠ボックスを生成してから、その新しい枠ボックスに応じてその他のテーマを準備します。
マップ・リクエストで<box>
要素または<center>
要素を指定した場合、<bounding_themes>
要素は無視されます。
border_margin
は、生成された枠ボックスの各マージンに追加する割合を指定するオプション属性です。たとえば、0.025の値を指定すると、生成された枠ボックスの左右のマージンに幅の2.5%が追加されます(その結果、x軸で幅が合計5%拡張されます)。同様に上下のマージンにも高さの2.5%が追加されます。デフォルト値は0.05で、各マージンに5%が追加されます。
preserve_aspect_ratio
は、枠テーマの処理後に生成された枠ボックスを、マップ画像またはデバイスと同じ縦横比になるように、さらに変更するかどうかを示すオプション属性です。デフォルトはTRUE
で、結果のマップ画像の変形を防ぐため、縦横比を保つように枠ボックスを変更します。
size_hint
は、元のデータ単位でマップの垂直範囲を指定するオプション属性です。たとえば、ユーザーのデータが10進表記の度数で示されている場合、size_hint
属性は、10進表記の緯度を指定します。ユーザーのデータがメートル単位で投影されている場合、MapViewerではsize_hint
がメートルで解釈されます。
size_hint
属性を使用して、境界制限を拡張できます。これは、枠テーマにポイント地物が1つだけ含まれる場合に便利です。たとえば、ジオコーディング問合せから得られた1つのポイントのみが枠テーマの場合もあります。そのポイントをマップの中央に配置し、そのポイントから境界線を拡張する場合もあります。また、この属性はマップ画像のレンダリング時にデータ範囲を拡張する場合にも使用できます。たとえば、垂直方向に0.2度の広がりのある状態の国が枠テーマに含まれているとすると、size_hint="10"
を指定した場合、その国はマップ画像に対してはるかに小さく表示されます。この属性は、その値が実際のデータ範囲よりも小さい場合には無視されます。たとえば、実際の空間地物の広がりが0.2度の場合、size hint="0.01"
は無視されます。
要素自体には、カンマで区切られた枠テーマの名前のリストが含まれます。テーマ名は、マップ・リクエストまたはマップ・リクエストで使用されているベース・マップのテーマ名と完全に一致する必要があります。次の例では、theme1
とtheme3
という2.3つの枠テーマを含み、2つのテーマに関連付けられた地物の保持のために必要な最小限の枠ボックスの4つのマージンすべてに2%(border_margin="0.023"
)を追加するマップ・リクエストを示しています。
<?xml version="1.0" standalone="yes"?> <map_request title="Bounding Theme Example" title_style="titleText" datasource = "mvdemo" basemap="demo_map" width="600" height="500" bgcolor="#a6cae0" antialiase="false" mapfilename="tilsmq202" format="PNG_STREAM"> <bounding_themes border_margin="0.023">theme1, theme3</bounding_themes> <themes> <theme name="theme1" min_scale="5.0E7" max_scale="0.0"> <jdbc_query datasource="mvdemo" jdbc_srid="8307" spatial_column="geom" label_column="STATE" render_style="myPattern" label_style="myText" >SELECT geom, state from states where state_abrv='IL'</jdbc_query> </theme> <theme name="theme3" min_scale="5.0E7" max_scale="0.0"> <jdbc_query datasource="mvdemo" jdbc_srid="8307" spatial_column="geom" label_column="STATE" render_style="myPattern" label_style="myText" >SELECT geom,state from states where state_abrv='IN'</jdbc_query> </theme> </themes> <styles> <style name="myPattern"> <svg width="1in" height="1in"> <desc></desc> <g class="area" style="stroke:#6666e0;fill:#d6ccff;fill-opacity:128;line-style:L.STATE BOUNDARY"> </g> </svg> </style> <style name="myText"> <svg width="1in" height="1in"> <g class="text" float-width="1.0" style="font-style:bold;font-family:Arial;font-size:16pt;fill:#6600ff"> Hello World! </g> </svg> </style> <style name="titleText"> <svg width="1in" height="1in"> <g class="text" float-width="1.0" style="font-style:bold;font-family:Helvetica;font-size:18pt;fill:#333333"> Hello World! </g> </svg> </style> </styles> </map_request>
前述の例では、2つの<theme>
要素(どちらもmyPattern
というレンダリング・スタイルを指定)での指定に従い、イリノイ州とインディアナ州を示すマップが表示されます。myText
スタイルでは、Map Builderツールなどのスタイル作成ツールでスタイルをプレビューする場合にのみ、「Hello World!」というテキストが表示されます。このスタイルをマップに適用すると、MapViewerがテーマから取得する実際のテキスト・ラベルが提供されます。
図3-2は、前述の例の表示を示しています。
<box>
要素には、次の定義が含まれます。
<!ELEMENT box (coordinates) > <!ATTLIST box ID CDATA #IMPLIED srsName CDATA #REQUIRED preserve_aspect_ratio (TRUE|FALSE) "FALSE" >
<box>
要素は、結果のマップの枠ボックスの指定に使用します。矩形の左下角と右上角を識別する2つの座標値ペアを指定するために、<coordinates>
要素が使用されます。座標値は、ユーザー・データに置き換えて解釈されます。たとえば、ユーザーのデータが測地データであり、10進表記の経度/緯度で指定されている場合、-72.84, 41.67, -70.88, 42.70
に指定された<coordinates>
は、左下角が経度/緯度座標の(-72.84, 41.67)、右上角が座標の(-70.88, 42.70)にある枠ボックスを示します(これはアメリカ合衆国のニューイングランド地方になります)。ただし、測定単位をメートルとしてデータが投影されている場合、座標値はメートルで解釈されます。
preserve_aspect_ratio
は、ボックスの座標を、マップ画像またはデバイスと同じ縦横比になるように、さらに変更するかどうかを示すオプション属性です。この属性を持たない以前のバージョンとの互換性を維持するため、デフォルトはFALSE
です。この値がTRUE
に設定されていると、結果のマップ画像の変形を防ぐため、縦横比を保つように枠ボックスが変更されます。
<center>
要素には、次の定義が含まれます。
<!ELEMENT center (geoFeature)> <!ATTLIST center size CDATA #REQUIRED >
<center>
要素は、結果のマップの中心の指定に使用します。これにはsize
という必須属性が含まれ、元のデータ単位でマップの垂直範囲を指定します。たとえば、ユーザーのデータが10進表記の度数で示されている場合、size
属性は、10進表記の緯度を指定します。ユーザーのデータがメートル単位で投影されている場合、MapViewerではサイズがメートルで解釈されます。
中心自体には、3.1.2.5項で指定される<geoFeature>
要素が埋め込まれる必要があります。
<geoFeature>
要素には、次の定義が含まれます。
<!ELEMENT geoFeature (description?, property*, geometricProperty)> <!ATTLIST geoFeature typeName CDATA #IMPLIED id CDATA #IMPLIED render_style CDATA #IMPLIED text_style CDATA #IMPLIED label CDATA #IMPLIED label_always_on (TRUE|FALSE) "FALSE" marker_size CDATA #IMPLIED radius CDATA #IMPLIED attribute_values CDATA #IMPLIED orient_x CDATA #IMPLIED orient_y CDATA #IMPLIED orient_z CDATA #IMPLIED selectable_in_svg (TRUE|FALSE) "FALSE" onclick CDATA #IMPLIED hidden_info CDATA #IMPLIED >
<geoFeature>
要素は、マップにレンダリングする個々の地理空間エンティティを指定するために使用します。<geoFeature>
要素の主要部分はジオメトリ(<geometricProperty>
要素)であり、OGC GML v1.0のジオメトリDTD(3.1.6項を参照)に従って指定する必要があります。
typeName
は、現行リリースのMapViewerでは無視されるオプション属性です。
id
は、SVGマップ上のすべての地理空間地物から地物を一意に識別するために使用できるオプション属性です。(selectable_in_svg
属性の説明を参照してください。)それ以外の場合、この属性は無視されます。
render_style
はオプション属性です。この属性を省略すると、geoFeature
はレンダリングされません。この属性を指定する場合、値にはユーザーのUSER_SDO_STYLESビューに格納されているスタイル名を指定する必要があります。
text_style
はオプション属性です。この属性を指定し、render_style
属性およびlabel
属性が存在していて有効な場合、地物のラベル付けに使用されるスタイルが識別されます。この属性を指定しない場合は、デフォルトのテキスト・スタイルが使用されます。
label
はオプション属性です。この属性を指定し、render_style
属性およびlabel
属性が存在していて有効な場合、地物のラベル付けに使用されるテキストが識別されます。
label_always_on
はオプション属性です。これをTRUE
に設定した場合、テーマの表示の中で2つ以上のラベルが重なる場合でも、MapViewerによって地物がラベル付けされます。(MapViewerは常にラベルが重ならないようにします。)label_always_on
がFALSE
の場合(デフォルト)、ラベルが重なることが避けられないときは、MapViewerによって1つ以上のラベルの表示が無効化されるため、重なることはありません。label_always_on
属性は、テーマに対して指定することもできます(theme
要素については、3.1.2.20項を参照)。geoFeature
要素を定義する際に地物のlabel_always_on
をTRUE
として指定すると、テーマのlabel_always_on
がFALSE
であり、ラベルの重なりが避けられない場合に、ラベルが表示される地物を制御できます。
marker_size
はオプション属性です。ポイント地物でこの属性を指定し、マーカータイプのスタイルがrender_style
である場合、指定したサイズは、MapViewerによってこの地物のレンダリングに使用されます。これによって、マーカー・スタイルに指定されたデフォルト値は無視されます。
radius
はオプション属性です。この属性を指定した場合、数値または数値のカンマ区切りリストが指定されます。各数値は、この地物を中心として描画される円の半径を表します。測地データの場合、単位はメートルであり、非測地データの場合、単位はデータに関連付けられた測定単位です。
attribute_values
はオプション属性です。この属性を指定した場合、拡張スタイルのバケット範囲で使用される値または値のカンマ区切りリストが指定されます(たとえば、円グラフの扇形部分の値や、可変マーカーのバケット値など)。
orient_x
およびorient_y
は、指定ポイントのマーカー記号(高速道路を示す盾形記号など)やテキストを回転するための方位ベクターを示す仮想終点をオプションで指定します。(orient_z
は、Oracleによる将来の使用のために予約されています。)それぞれの値は-1から1の範囲で指定する必要があります。方位の始点は(0,0)とみなされ、対応する物理ポイントの位置に変換されます。
図3-3は、orient_x="0.3" orient_y="0.2"
を指定した結果となる約34度(x軸から左回り)の方位ベクターを示しています。(方位を特定の角度により正確に一致させるには、三角法のテキストにある表のコタンジェント値またはタンジェント値を参照してください。)
selectable_in_svg
は、SVGマップ上で地物を選択できるかどうかを指定するオプション属性です。デフォルトはFALSE
であるため、SVGマップ上で地物を選択できません。この属性がTRUE
に設定されており、テーマ地物の選択が可能な場合、地物はクリックして選択できます。地物を選択すると、その色が変わり、IDが記録されます。SVGマップで定義されたJavaScript関数getSelectedIdList()
をコールすると、選択したすべての地物のID値のリストを取得できます。(地物選択が正確に機能するようにするには、地物のid
属性値を、SVGマップ上のすべての地理空間地物から地物を一意に識別する値に設定する必要があります。)SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
onclick
は、ユーザーが地物をクリックしたときにコールされる、JavaScript関数名を指定するオプション属性です。JavaScript関数は、SVG定義以外にHTML文書で定義する必要があります。この関数には、テーマ名、地物のキー、およびSVGマップ上でクリックされたポイントの座標(ピクセル単位)を指定するxおよびyの4つのパラメータしか指定できません。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
hidden_info
は、マウスを地物の上に動かしたときに表示される情報やヒントを指定するオプション属性です。複数の行を指定するには、行間に「\n」を使用します。たとえば、hidden_info="State park with\nhistorical attractions"
は、2行のヒントを指定します。(マップで非表示情報の表示を有効にするには、3.1.2.1.1項で説明しているように、<map_request>
要素でinfoon="true"
を指定する必要があります。)
次の例は、経度/緯度座標の(-78.1234, 41.0346)にあるレストランに対する、<geoFeature>
要素の指定を示しています。この場合、render_style
属性およびtext_style
属性が指定されていないため、地物は表示されません。
<geoFeature typeName="Customer" label="PizzaHut in Nashua"> <geometricProperty> <Point srsName="SDO:8265"> <coordinates>-78.1234,41.0346</coordinates> </Point> </geometricProperty> </geoFeature>
次の例は、経度/緯度座標の(-122.2615, 37.5266)にある特定のポイントに対する<geoFeature>
要素の指定を示しています。render_style
属性が指定されているため、この地物は生成されたマップにレンダリングされます。この例では、ラベル・テキスト(A Place
)およびラベル・テキストを描画するためのテキスト・スタイルを指定しています。また、この地物を中心とした、半径が1600mおよび4800mの2つの円を描画するようにMapViewerに指示しています。(この場合、<Point>
要素のsrsName
属性が存在する必要があり、"SDO:
<srid>
"
という書式を使用してOracle Spatial and GraphのSRID値を指定する必要があります。SRID値8265が測地座標系に関連付けられているため、半径の値は1600mおよび4800mと解釈されます。)
<geoFeature render_style="m.star" radius="1600,4800" label="A Place" text_style="T.Name"> <geometricProperty> <Point srsName="SDO:8265"> <coordinates>-122.2615, 37.5266</coordinates> </Point> </geometricProperty> </geoFeature>
図3-4は、前述の例の<geoFeature>
要素を使用して描画されたマップです。地物はA Place
というテキストでラベル付けされ、2つの同心円で囲まれた赤い星型マーカーで表されます。
GeoRasterテーマの定義に使用される<jdbc_georaster_query>
要素には、次の定義が含まれます。
<!ELEMENT jdbc_georaster_query (#PCDATA) > <!ATTLIST jdbc_georaster_query asis (TRUE|FALSE) "FALSE" georaster_table CDATA #REQUIRED georaster_column CDATA #REQUIRED raster_id CDATA #IMPLIED raster_table CDATA #IMPLIED raster_pyramid CDATA #IMPLIED raster_bands CDATA #IMPLIED datasource CDATA #IMPLIED polygon_mask CDATA #IMPLIED transparent_nodata CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" >
GeoRasterテーマの使用方法および参照情報の詳細は、2.3.4項を参照してください。
イメージ・テーマ(2.3.3項を参照)の定義に使用される<jdbc_image_query>
要素には、次の定義が含まれます。
<!ELEMENT jdbc_image_query (#PCDATA) > <!ATTLIST jdbc_image_query asis (TRUE|FALSE) "FALSE" image_format CDATA #REQUIRED image_column CDATA #REQUIRED image_mbr_column CDATA #REQUIRED image_resolution CDATA #IMPLIED image_unit CDATA #IMPLIED datasource CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" >
テーマを動的に定義するには、<jdbc_image_query>
要素の内容として有効なSQL問合せを指定する必要があります。イメージ・テーマのJDBC接続情報(datasource
、またはjdbc_host
、jdbc_port
、jdbc_sid
、jdbc_user
およびjdbc_password
の組合せのいずれか)を指定する必要があります。
jdbc_srid
は、レンダリングするデータの座標系(SDO_SRID
値)を指定するオプション属性です。
jdbc_mode
は、データベースへの接続に使用するOracle JDBCドライバ(thin
またはoci8
)を識別します。
asis
はオプション属性です。この属性をTRUE
に設定すると、MapViewerでは指定された問合せ文字列が変更されません。asis
がFALSE
(デフォルト)の場合、MapViewerによってSQL問合せが空間フィルタ問合せの副問合せとして埋め込まれます。たとえば、中心が(-122, 37)でサイズが1のマップを表示する場合、指定する問合せは次のようになります。
SELECT geometry, sales FROM crm_sales WHERE sales < 100000;
asis
がFALSE
の場合、MapViewerにより実行される実際の問合せは次のようになります。
SELECT * FROM (SELECT geometry, sales FROM crm_sales WHERE sales < 100000) WHERE sdo_filter(geometry, sdo_geometry(. . . -122.5, 36.5, -123.5, 37.5 . . .) ='TRUE';
つまり、現在のマップ・ウィンドウの空間フィルタ問合せによって、元の問合せがさらに詳細化されます。ただし、asis
がTRUE
の場合は、次のようにMapViewerによって指定どおりに問合せが実行されます。
SELECT geometry, sales FROM crm_sales WHERE sales < 100000;
image_format
は、画像データの形式(GIFまたはJPEGなど)を識別します。この画像形式がMapViewerでサポートされていない場合、その形式のカスタム・イメージ・レンダラを作成し、登録する必要があります(付録Cを参照)。
image_column
は、各画像の格納場所であるBLOB型の列を識別します。
image_mbr_column
は、各画像のフットプリント(最小外接矩形(MBR))の格納場所であるSDO_GEOMETRY型の列を識別します。
image_resolution
は、元の画像解像度(ピクセル当たりのimage_unit
単位の数)を指定するオプション属性です。
image_unit
はオプション属性です。ただし、image_resolution
属性を指定した場合は必須です。image_unit
属性は、メートルに対するM
のように、解像度の単位を指定します。この属性の値は、MDSYS.SDO_DIST_UNITS表のSDO_UNIT列に含まれている値のいずれかである必要があります。2.3.3.1項の例2-13では、画像の解像度はピクセル当たり2mです。
イメージ・テーマを指定する<jdbc_image_query>
要素の使用例は、3.1.1.6項の例3-6を参照してください。
ネットワーク・テーマの定義に使用される<jdbc_network_query>
要素には、次の定義が含まれます。
<!ELEMENT jdbc_network_query (#PCDATA) > <!ATTLIST jdbc_network_query asis (TRUE|FALSE) "FALSE" network_name CDATA #REQUIRED network_level CDATA #IMPLIED link_style CDATA #IMPLIED direction_style CDATA #IMPLIED bidirection_style CDATA #IMPLIED direction_position CDATA #IMPLIED direction_markersize CDATA #IMPLIED direction_multimarker (TRUE|FALSE) "FALSE" link_labelstyle CDATA #IMPLIED link_labelcolumn CDATA #IMPLIED node_style CDATA #IMPLIED node_markersize CDATA #IMPLIED node_labelstyle CDATA #IMPLIED node_labelcolumn CDATA #IMPLIED path_ids CDATA #IMPLIED path_styles CDATA #IMPLIED path_labelstyle CDATA #IMPLIED path_labelcolumn CDATA #IMPLIED analysis_algorithm CDATA #IMPLIED shortestpath_style CDATA #IMPLIED shortestpath_startnode CDATA #IMPLIED shortestpath_endnode CDATA #IMPLIED shortestpath_startstyle CDATA #IMPLIED shortestpath_endstyle CDATA #IMPLIED withincost_startnode CDATA #IMPLIED withincost_style CDATA #IMPLIED withincost_cost CDATA #IMPLIED withincost_startstyle CDATA #IMPLIED datasource CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" >
ネットワーク・テーマの使用方法および参照情報の詳細は、2.3.5項を参照してください。
<jdbc_query>
要素はテーマの動的定義に使用されます。この要素と関連する<hidden_info>
要素には、次の定義が含まれます。
<!ELEMENT jdbc_query (#PCDATA, hidden_info?)> <!ATTLIST jdbc_query asis (TRUE|FALSE) "FALSE" spatial_column CDATA #REQUIRED key_column CDATA #IMPLIED label_column CDATA #IMPLIED label_style CDATA #IMPLIED render_style CDATA #IMPLIED x_column CDATA #IMPLIED y_column CDATA #IMPLIED datasource CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" > <!ELEMENT hidden_info (field+)> <!ELEMENT field (#PCDATA)> <!ATTLIST field column CDATA #REQUIRED name CDATA #IMPLIED >
テーマを動的に定義するには、<jdbc_query>
要素の内容として有効なSQL問合せを指定する必要があります。spatial_column
(SDO_GEOMETRY型の列)および動的に定義されるテーマのJDBC接続情報(datasource
、またはjdbc_host
、jdbc_port
、jdbc_sid
、jdbc_user
およびjdbc_password
の組合せのいずれか)を指定する必要があります。
<theme>
要素のselectable_in_svg
属性値がTRUE
である場合、JDBC問合せから選択された各地物を一意に識別できる列名を指定するには、<jdbc_query>
要素のkey_column
属性を使用する必要があります。指定した列は、JDBC問合せのSELECT構文のリストにも表示される必要があります。
render_style
およびlabel_style
はオプション属性です。render_style
では、ポイント地物のデフォルトは45度回転した赤の十字形で、線および曲線のデフォルトは1ピクセル幅の黒い線、ポリゴンのデフォルトは内側が半透明のダークグレーである黒い枠線です。
x_column
およびy_column
はオプション属性です。これらの属性を指定すると、表内の2つの列に基づいてポイントJDBCテーマを定義するのに使用されるため、MapViewerでは、こうした列の値に基づいてポイント・テーマをレンダリングできます。詳細は、2.3.2.1項を参照してください。
jdbc_srid
は、レンダリングするデータの座標系(SDO_SRID
値)を指定するオプション属性です。
jdbc_mode
は、データベースへの接続に使用するOracle JDBCドライバ(thin
またはoci8
)を識別します。
asis
はオプション属性です。この属性をTRUE
に設定すると、MapViewerでは指定された問合せ文字列が変更されません。asis
がFALSE
(デフォルト)の場合、MapViewerによってSQL問合せが空間フィルタ問合せの副問合せとして埋め込まれます。たとえば、中心が(-122, 37)でサイズが1のマップを表示する場合、指定する問合せは次のようになります。
SELECT geometry, sales FROM crm_sales WHERE sales < 100000;
asis
がFALSE
の場合、MapViewerにより実行される実際の問合せは次のようになります。
SELECT * FROM (SELECT geometry, sales FROM crm_sales WHERE sales < 100000) WHERE sdo_filter(geometry, sdo_geometry(. . . -122.5, 36.5, -123.5, 37.5. . . ) ='TRUE';
つまり、現在のマップ・ウィンドウを使用した空間フィルタ問合せによって、元の問合せがさらに詳細化されます。ただし、asis
がTRUE
の場合は、次のようにMapViewerによって指定どおりに問合せが実行されます。
SELECT geometry, sales FROM crm_sales WHERE sales < 100000;
<hidden_info>
要素は、テーマの地物の上にマウスを動かしたときに表示される実表の属性リストを指定します。属性は、<field>
要素のリストで指定します。
各<field>
要素には、column
属性を含める必要があります。この属性は実表の列名を指定します。また、列の表示名を指定するname
属性を使用できます。(name
属性は、列名以外のテキスト文字列を表示する場合に便利です。)
<jdbc_query>
要素を使用してテーマを動的に定義する方法の例は、3.1.1.2項の例3-2および3.1.1.4項の例3-4を参照してください。
トポロジ・テーマの定義に使用される<jdbc_topology_query>
要素には、次の定義が含まれます。
<!ELEMENT jdbc_topology_query (#PCDATA)> <!ATTLIST jdbc_topology_query asis (TRUE|FALSE) "FALSE" topology_name CDATA #REQUIRED feature_table CDATA #REQUIRED spatial_column CDATA #REQUIRED label_column CDATA #IMPLIED label_style CDATA #IMPLIED render_style CDATA #IMPLIED datasource CDATA #IMPLIED edge_style CDATA #IMPLIED edge_marker_style CDATA #IMPLIED edge_marker_size CDATA #IMPLIED edge_label_style CDATA #IMPLIED node_style CDATA #IMPLIED node_label_style CDATA #IMPLIED face_style CDATA #IMPLIED face_label_style CDATA #IMPLIED jdbc_host CDATA #IMPLIED jdbc_port CDATA #IMPLIED jdbc_sid CDATA #IMPLIED jdbc_user CDATA #IMPLIED jdbc_password CDATA #IMPLIED jdbc_srid CDATA #IMPLIED jdbc_mode (thin|oci8) "thin" >
トポロジ・テーマの使用方法および参照情報の詳細は、2.3.6項を参照してください。
<legend>
要素には、次の定義が含まれます。
<!ELEMENT legend (column,themes)? > <!ATTLIST legend bgstyle CDATA #implied font CDATA #implied location_x CDATA #implied location_y CDATA #implied offset_x CDATA #implied offset_y CDATA #implied profile (MEDIUM|SMALL|LARGE) "MEDIUM" position (SOUTH_WEST|SOUTH_EAST|SOUTH|NORTH| NORTH_WEST|NORTH_EAST|EAST|WEST|CENTER) "SOUTH_WEST" > <!ELEMENT column entry+ > <!ATTLIST entry is_title (true|false) "false" is_separator (true|false) "false" tab CDATA "0" style CDATA #implied text CDATA #implied text_size CDATA #implied width CDATA #implied height CDATA #implied > <!ELEMENT themes theme+ > <!ATTLIST theme name CDATA #REQUIRED >
<legend>
要素は、生成されたマップの上に凡例(マップ挿入図)を描画し、マップの視覚的な外観をユーザーにとってより意味のあるものにするために使用します。<legend>
要素の主要部分は1つ以上の<column>
要素であり、それぞれが凡例内の列を定義します。(<column>
要素が存在しない場合、2.4.2項で説明しているとおり、自動凡例が作成されます。)列が1つの凡例では、すべてのエントリが上から下まで配置されます。列が2つの凡例では、1つ目の列を左側にして2つの列が並べられ、それぞれの列に独自の凡例エントリが含まれます。第2.4.2項の図2-13では、列が1つの凡例を示しています。図3-5では、列が2つの凡例を示しています。
bgstyle
は、凡例のバックグラウンド・スタイル全体を指定するオプション属性です。これは、Scalable Vector Graphics (SVG)に似た構文を持つ文字列を使用し、凡例の枠ボックスの塗りおよびストロークの色を指定します。不透明度(fill-opacity
またはstroke-opacity
)の値を指定した場合、塗りおよびストロークの色は透明または一部透明になる場合があります。次の例では、白い半透明のバックグラウンド、および赤のストローク(凡例ボックスの境界)を指定しています。
bgstyle="fill:#ffffff;fill-opacity:128;stroke:#ff0000"
font
は、凡例画像に表示されるテキストに使用するフォント名を指定するオプション属性です。Javaでサポートされている論理フォント名(serif
、sansserif
、monospaced
、dialog
またはdialoginput
)を指定できます。MapViewerサーバーが稼働しているシステムで使用可能な物理フォント名も指定できます。
location_x
およびlocation_y
は、凡例の始点のX座標とY座標(画面単位)を指定するオプション属性です。これらの属性を指定すると、position
属性による指定より優先されます。
offset_x
およびoffset_y
は、position
属性と併用されるオプション属性です。位置ヒントに対する枠線からのデフォルト距離は、10ピクセルです。これらのオフセット・パラメータは、デフォルト値より優先されます。
profile
は、マップ上の凡例の相対的なサイズを指定するオプション属性であり、SMALL
、MEDIUM
(デフォルト)またはLARGE
のいずれかのキーワードを使用します。
position
は、凡例を描画するマップ上の位置を指定するオプション属性です。デフォルトはSOUTH_WEST
であり、結果のマップの左下角に凡例が描画されます。
is_title
は、<entry>
要素のオプション属性です。この値がTRUE
の場合、エントリは列のタイトルとして使用されます。つまり、説明テキストが通常の凡例テキストよりも目立つフォントで表示され、エントリに対して定義されたその他のスタイル属性は無視されます。デフォルトはFALSE
です。
is_separator
は、<entry>
要素のオプション属性です。この値がTRUE
の場合、エントリは列の縦方向の間隔を空けるための空白行の挿入に使用されます。デフォルトはFALSE
です。
tab
は、<entry>
要素のオプション属性です。これは、エントリを列の左余白からインデントするためのタブ位置の数を指定します。デフォルトは0(ゼロ)で、この場合インデントは行われません。
style
は、<entry>
要素のオプション属性です。これは、エントリの一部として描画されるMapViewerスタイル(色または画像など)の名前を指定します。
text
は、<entry>
要素のオプション属性です。これは、エントリに含められる説明テキスト(関連付けられた色または画像の簡潔な説明など)を指定します。
text_size
は、<entry>
要素のオプション属性です。これは、エントリに含められる説明テキストのサイズ(ディスプレイ単位)を指定します。指定された値で、MapViewerの事前定義済プロファイルのサイズがオーバーライドされます。
width
およびheight
はオプション属性で、この両方によって汎用エントリのサイズ(デバイス単位)を指定します。値が指定されると、MapViewerの小、中、大のテキストのプロファイル値に応じたデフォルトが無視されます。
次の例は、第2.4.2項の図2-13の凡例に対する<legend>
要素の指定を示しています。
<legend bgstyle="fill:#ffffff;fill-opacity:128;stroke:#ff0000" position="NORTH_WEST"> <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>
この例の内容は、次のとおりです。
バックグラウンド・カラーは不透明度値が128 (fill-opacity:128
)です。つまり、白いバックグラウンドが半透明になります。
凡例の境界ボックスは赤(stroke:#ff0000
)になります。
凡例の境界ボックスは、ディスプレイの左上部分(position="NORTH_WEST"
)に配置されます。
profile
属性(デフォルト値はMEDIUM
)が指定されていないため、凡例はデフォルト・サイズになります。
凡例は単一列となり、エントリが上から下まで配置されます。
1つ目のエントリは凡例タイトルで、テキストはMap Legendです。
4つ目のエントリは、空白行を追加するためのセパレータです。
7つ目のエントリは説明テキスト(County population:)です。生成されたマップのユーザーが、拡張スタイルを指定する次(および最後)のエントリにこのテキストを関連付けます。拡張スタイルには独自の記述テキストが含まれることが多いため、どのテキストが凡例のどの部分に適用されるのかユーザーが混乱しないようにする際に、このCounty population:というテキスト・エントリが役立ちます。
最後のエントリは拡張スタイル(style="V.COUNTY_POP_DENSITY"
)を指定します。これはタブ1つ分インデントされているため(tab="1"
)、ユーザーにとって、様々な人口密度範囲を識別する色やテキストが、前にあるCounty population:という説明テキストと区別しやすいものになります。
<map_tile_theme>
要素は、マップ・タイル・テーマを定義する際に使用します。マップ・タイル・テーマは、事前に生成されるマップ画像タイルを使用してマップ・タイトル・サーバーによってレンダリングされるマップ画像層を生成します。マップ画像タイルは、任意の内部または外部のマップ・サービス・プロバイダから取得できます。この要素には、次の定義が含まれます。
<!ELEMENT map_tile_theme (#PCDATA)> <!ATTLIST map_tile_theme map_tile_layer CDATA # REQUIRED snap_to_tile_scale (TRUE|FALSE) "FALSE" >
map_tile_name
は、MapViewerで事前定義済のマップ・タイル層の名前を指定します。
snap_to_tile_scale
は、事前定義済のマップ・タイル層ズーム・レベルの1つに適合するようにマップ・スケールを調整するかどうかを指定するオプション属性です。この属性がFALSE
の場合、結果のマップのスケールは常に、マップ・リクエストの指定内容と同じです。事前定義済のマップ・タイル層ズーム・レベルのいずれにもマップ・リクエストのスケールが合致しない場合、マップ・タイル画像はマップ・リクエストのスケールに適合するようにスケールが変更されます。この属性がTRUE
の場合、事前定義済のズーム・レベルのいずれにもマップ・リクエストのスケールが合致しないと、結果のマップのスケールは事前定義済のマップ・タイル層ズーム・レベルのいずれか1つに適合するように調整されます。
<north_arrow>
要素は、マップ上で北の方向を指すためのスタイル(通常はマーカー)を指定します。これは、マップ・リクエストのrotation属性を使用して方位を定義します。この要素には、次の定義が含まれます。
<!ELEMENT north_arrow (style, location?, size?) >
<style>
要素は、北向き矢印のスタイル(通常はマーカー・スタイル)の名前を指定します。
<location>
要素はオプションです。これは、北向き矢印のマップ上での位置をXおよびY座標値(ピクセル数)で指定します。デフォルト値は(25, 25)です。
<size>
要素はオプションです。これは、MapViewerによって北向き矢印をレンダリングする際に使用される幅と高さ(ピクセル数)を指定します。デフォルト値は(16, 32)です。
例3-20に、スタイルm.image41_bw
を使用し、マップ画像の(35, 35)の位置に配置される、幅16、高さ32の北向き矢印の定義を示します。
<operation>
要素を使用すると、レンダリング時、元のデータに対してその他の変換を実行できます。<operation>
要素には、次の定義が含まれます。
<!ELEMENT operation (parameter+) > <!ATTLIST parameter name CDATA #REQUIRED >
現在、この要素はGeoRasterテーマで使用されています(2.3.4項を参照)。正規化、均等化、線形伸長、区分線形伸長、輝度とコントラストの調整、しきい値の変更といった一部のイメージ処理オペレーションを、元の画像に対して実行できます。
例3-21では、GeoRasterテーマを使用した正規化オペレーションを指定しています。
例3-21 GeoRasterテーマを使用した正規化オペレーション
<theme name="geor_theme" > <jdbc_georaster_query jdbc_srid="0" datasource="mvdemo" georaster_table="dem" georaster_column="georaster" asis="false"> select georaster from dem </jdbc_georaster_query> <operations> <operation name="normalize"> </operation> </operations> </theme>
次のコード・セグメントは、手動による線形伸長オペレーションを示しています。(自動線形伸長の場合、<operation>
要素は含めますが、<parameter>
要素は含めません。)
<operation name="linearstretch"> <parameter name="autostretch" value="false"/> <parameter name="lowstretch" value="50"/> <parameter name="highstretch" value="150"/> </operation>
表3-1に、イメージ処理オペレーション、<operation>要素名のキーワード値および関連する<parameter>要素値(該当する場合)を示します。
表3-1 GeoRasterテーマ・オペレーションのイメージ処理オプション
オペレーション | <operation>名値 | <parameter>値 |
---|---|---|
正規化 |
|
(該当せず) |
均等化 |
|
(該当せず) |
線形伸長 |
|
|
区分線形伸長 |
|
(該当せず) |
輝度 |
|
|
コントラスト |
|
|
しきい値の変更 |
|
|
<operations>
要素は1つ以上の<operation>
要素(3.1.2.14項を参照)を指定します。<operations>
要素には、次の定義が含まれます。
<!ELEMENT operations (oepration+) >
事前定義済GeoRasterテーマの場合、<operations>要素は、スタイリング・ルール定義の一部になります。例3-21は、正規化オペレーションを使用するGeoRasterテーマのスタイリング・ルールを示しています。
<parameter>
要素では、テーマに適用されるオペレーションで使用される値を定義します。(オペレーションは、<operations>
要素(3.1.2.14項を参照)で指定します。)<parameter>
要素には、次の定義が含まれます。
<!ELEMENT parameter > <!ATTLIST parameter name CDATA #REQUIRED value CDATA #REQUIRED >
どのパラメータも、名前とそれに関連する値を持つ必要があります。
<scale_bar>
要素は、マップに既知の空間参照システム(SRS)が含まれる場合に、マップ・リクエストに追加するスケール・バー(バー上にマークされた距離で何キロメートル/マイルを表すかを示す)を定義します。表示モードは単一(メートル法または米国式)または二重(メートル法と米国式の両方)を指定できます。<scale_bar>
要素には、次の定義が含まれます。
<!ELEMENT scale_bar > <!ATTLIST scale_bar mode (METRIC_MODE|US_MODE|DUAL_MODES) "METRIC_MODE" position (SOUTH_WEST|SOUTH_EAST|SOUTH|NORTH| NORTH_WEST|NORTH_EAST) "NORTH_EAST" offset_y CDATA #implied offset_y CDATA #implied color1 CDATA #implied color1_opacity CDATA #implied color2 CDATA #implied color2_opacity CDATA #implied length_hint CDATA #implied label_color CDATA #implied label_font_family CDATA #implied label_font_size CDATA #implied label_halo_size CDATA #implied label_position (TOP|BOTTOM) "TOP" >
<scale_bar>
属性はすべてオプションです。
mode
は、スケール・バーがメートル法または米国式、あるいは両方のモードのいずれであるかを指定します。デフォルトはMETRIC_MODE
です。
position
は、スケール・バーを配置するマップ上の相対的な位置を定義します。デフォルトはNORTH_EAST
です。
offset_xおよびoffset_y
は、マップのマージンからのスケール・バーの位置を示すXおよびYの値を定義します。デフォルト値は0(ゼロ)です。
color1
、color1_opacity
、color2
およびcolor2_opacity
は、スケール・バーのレンダリング時に使用する色を定義します。color1
とcolor2
には赤、緑、青のデフォルト値、color1_opacity
には(0x44, 0x44, 0x44, 210)のデフォルト値、2_opacity
には(0xee, 0xee, 0xee, 210)のデフォルト値があります。
length_hint
は、スケール・バーのレンダリングに使用するピクセル数を定義します。デフォルトは、マップ幅の約17%です。
label_color
、label_font_family
、label_font_size
およびlabel_halo_size
は、スケール・バーのテキストに影響します。デフォルトは、黒色、Serifフォント・ファミリ、フォント・サイズ12pt、ハローなし(ハロー・サイズ0)です。
label_positionは、スケール・バーに対するテキストの位置(TOP
またはBOTTOM
)を定義します。デフォルトはTOP
です。
例3-23では、スケール・バーを定義します。
<style>
要素には、次の定義が含まれます。
<!ELEMENT style (svg | AdvancedStyle)?> <!ATTLIST style name CDATA #REQUIRED >
<style>
要素により、動的に定義されるスタイルを指定できます。スタイルは次のいずれかです。
色、線、マーカー、領域またはテキスト・スタイルを表すSVG記述
バケット、カラー・スキームまたは可変マーカー・スタイルを表す拡張スタイル定義(A.6項を参照)
name
属性は、スタイル名を識別します。
次の例では、マップ・リクエストに2つのスタイル(色スタイルおよび拡張スタイル)を動的に定義する部分の抜粋を示しています。
<map_request . . .> . . . <styles> <style name="color_red"> <svg width="1in" height="1in"> <g class="color" style="stroke:red;stroke-opacity:100;fill:red;fill-opacity:100"> <rect width="50" height="50"/> </g> </svg> </style> <style name="ranged_bucket_style"> <AdvancedStyle> <BucketStyle> <Buckets> <RangedBucket seq="0" label="less than 100k" high="100000.0" style="C.RB13_13"/> <RangedBucket seq="1" label="100k - 150k" low="100000.0" high="150000.0" style="C.RB13_1"/> <RangedBucket seq="2" label="150k - 250k" low="150000.0" high="250000.0" style="C.RB13_4"/> <RangedBucket seq="3" label="250k - 350k" low="250000.0" high="350000.0" style="C.RB13_7"/> <RangedBucket seq="4" label="350k - 450k" low="350000.0" high="450000.0" style="C.RB13_10"/> </Buckets> </BucketStyle> </AdvancedStyle> </style> </styles> </map_request>
<styles>
要素には、次の定義が含まれます。
<!ELEMENT styles (style+) >
<styles>
要素は1つ以上の<style>
要素(3.1.2.18項を参照)を指定します。
<theme>
要素には、次の定義が含まれます。
<!ELEMENT theme (jdbc_query | jdbc_image_query | jdbc_georaster_query | jdbc_network_query | jdbc_topology_query | map_tile_theme)?, operations? > <!ATTLIST theme name CDATA #REQUIRED datasource CDATA #IMPLIED template_theme CDATA #IMPLIED max_scale CDATA #IMPLIED min_scale CDATA #IMPLIED label_max_scale CDATA #IMPLIED label_min_scale CDATA #IMPLIED label_always_on (TRUE|FALSE) "FALSE" fast_unpickle (TRUE|FALSE) "TRUE" mode CDATA #IMPLIED min_dist CDATA #IMPLIED fixed_svglabel (TRUE|FALSE) "FALSE" visible_in_svg (TRUE|FALSE) "TRUE" selectable_in_svg (TRUE|FALSE) "FALSE" part_of_basemap (TRUE|FALSE) "FALSE" simplify_shapes (TRUE|FALSE) "TRUE" transparency CDATA #IMPLIED minimum_pixels CDATA #IMPLIED onclick CDATA #IMPLIED onmousemove CDATA #IMPLIED onmouseover CDATA #IMPLIED onmouseout CDATA #IMPLIED workspace_name CDATA #IMPLIED workspace_savepoint CDATA #IMPLIED workspace_date CDATA #IMPLIED workspace_date_format CDATA #IMPLIED fetch_size CDATA #IMPLIED timeout CDATA #IMPLIED >
<theme>
要素を使用すると、事前定義済テーマまたは動的に定義されるテーマを指定できます。
事前定義済テーマの場合、定義はすでにUSER_SDO_THEMESビューに格納されているので、テーマ名のみが必要です。
動的に定義されるテーマの場合は、次のいずれか1つの要素で情報を指定する必要があります。<jdbc_query>
(3.1.2.9項を参照)、<jdbc_image_query>
(3.1.2.7項を参照)、<jdbc_georaster_query>
(2.3.4項を参照)、<jdbc_network_query>
(2.3.5項を参照)または<jdbc_topology_query>
(2.3.6項を参照)。
GeoRasterテーマの場合は、一部のイメージ処理オプション(3.1.2.14項を参照)を定義できます。
name
属性は、テーマ名を識別します。事前定義済テーマの場合、この名前がUSER_SDO_THEMESビュー(2.9.2項を参照)のNAME列の値と一致する必要があります。動的に定義されるテーマの場合、この名前は、jdbc_query
ベースのテーマを参照するための単なる一時名です。
datasource
は、テーマのデータソースを指定するオプション属性です。この属性を指定しない場合、マップ・リクエストのデータソースが想定されます(3.1.2.1.1項のdatasource
属性の説明を参照)。異なるテーマに異なるデータソースを指定することにより、1つのマップ・リクエストで複数のデータソースを使用できます。
template_theme
は、事前定義済テーマが複数のデータソース内で同じ名前を持つときに複数のテーマのレンダリングに使用できるオプション属性です。テーマ名は、同一のマップ・リクエスト内で繰り返すことができません。ただし、同一の事前定義済テーマ名を持つデータソースが2つ存在する場合は、この属性を使用すると、両方のテーマをレンダリングできます。次の例で指定している2つのテーマのベースになっているテーマUS_STATES
は、2つのデータソースに存在していますが、各データソース内のコンテンツは異なっています。
<themes> <theme name="US_STATES" datasource="dsrc"/> <theme name="OTHER_US_STATES" template_theme="US_STATES" datasource="other_dsrc" /> </themes>
max_scale
属性およびmin_scale
属性は、このテーマの可視性に影響を与えます。max_scale
およびmin_scale
が省略された場合、マップ・スケールに関係なくテーマは常にレンダリングされます。(max_scale
およびmin_scale
については、2.4.1項を参照してください。)
label_max_scale
およびlabel_min_scale
属性は、このテーマの地物ラベルの可視性に影響を与えます。label_max_scale
やlabel_min_scale
を省略すると、テーマの地物ラベルは常に、マップ・スケールがテーマのスケールの参照可能な範囲内(max_scale
とmin_scale range
の間)にある場合にレンダリングされます。(label_max_scale
およびlabel_min_scale
については、2.4.1項を参照してください。)
label_always_on
はオプション属性です。これをTRUE
に設定した場合、表示の中で2つ以上のラベルが重なる場合にも、MapViewerによってテーマのすべての地物がラベル付けされます。(MapViewerは常にラベルが重ならないようにします。)label_always_on
がFALSE
の場合(デフォルト)、ラベルが重なることが避けられないときは、MapViewerによって1つ以上のラベルの表示が無効化されるため、重なることはありません。label_always_on
属性は、マップ地物に対しても指定できるため(3.1.2.5項のgeoFeature
要素を参照)、テーマについてlabel_always_on
がFALSE
であり、ラベルの重なりが避けられない場合には、ラベルを表示する地物を制御できます。
fast_unpickle
はオプション属性です。この属性がTRUE
(デフォルト)の場合、MapViewerでは汎用のJDBC変換アルゴリズムではなく、独自の高速な非Pickle化(アンストリーム)アルゴリズムを使用して、データベースからフェッチされたSDO_GEOMETRYオブジェクトをMapViewerがアクセス可能なJavaオブジェクトに変換します。このプロセスによりパフォーマンスは向上しますが、場合によっては座標の精度が失われ(約0.00000005)、各座標ですべて正確な数値を保持する必要のあるアプリケーションに重大な影響を与える可能性があります。fast_unpickle
がFALSE
に設定されている場合、MapViewerでは汎用のJDBC変換アルゴリズムが使用されます。このプロセスはMapViewerの高速な非Pickle化処理よりは時間がかかりますが、精度が失われることはありません。
mode
はオプション属性です。トポロジ・テーマの場合、mode="debug"
を指定すると、エッジ、ノードおよびフェースを表示できます(2.3.6項を参照)。その他のタイプのテーマでは、mode
属性は無視されます。
min_dist
はオプション属性です。これは、別々の形状ポイントをレンダリングするための線文字列またはポリゴン上の、2つの隣接した形状ポイント間の画面上の最小距離(ピクセル数)を指定します。2つの隣接形状ポイント間の画面上の距離が、min_dist
値より小さい場合は、一方の形状ポイントのみがレンダリングされます。デフォルト値は0.5です。属性値に大きな値を指定してSVGマップ上でレンダリングされる形状ポイント数を減らし、結果的にSVGファイルのサイズを小さくできます。異なるテーマ定義で異なる値を指定でき、それによりSVGマップの詳細レベルをカスタマイズできます。
fixed_svglabel
はオプション属性です。SVGマップ上で各ラベルの外見上のサイズがすべてのズーム・レベルで同一になるように、元の固定ラベルを使用し、ズーム・レベルの増加(ズームイン)または減少(ズームアウト)に合せてラベルを拡大または縮小表示するか、または同一のテキストで実際のサイズが異なるラベルを使用するかを指定します。fixed_svglabel
値がTRUE
に指定されている場合、すべてのズーム・レベルで同じテーマ・ラベルがマップに表示され、マップのズームイン、ズームアウトに合わせてラベルがズームイン、ズームアウトされます。値が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を参照してください。
part_of_basemap
はオプション属性です。マップ形式がSVGで、この属性の値がTRUE
の場合、MapViewerではテーマをベース・マップの一部として、その上にレンダリングします。ベース・マップはラスター画像としてレンダリングされます。
simplify_shapes
は、レンダリングされる前に形状を簡略化するかどうかを指定するオプション属性です。簡略化は、元のジオメトリより低い解像度でマップを表示する場合に便利です。たとえば、川や政治的境界における数百または数千という曲がり角をディスプレイの解像度で表示できない場合は、形状を簡略化して主要な曲がり角のみを表示すれば、パフォーマンスが改善される場合もあります。デフォルト値はTRUE
です。その場合、形状はレンダリングされる前に簡略化されます。この属性をFALSE
に設定すると、MapViewerは元のジオメトリのすべての頂点および線セグメントをレンダリングしようとするので、パフォーマンスが低下する場合もあります。
transparencyは、レンダリング時にテーマに適用される基本のアルファ構成値を定義するオプション・パラメータです。この値は0から1の範囲で指定でき、0は完全な透明、1(デフォルト値)は完全な不透明を意味します。
minimum_pixelsは、空間フィルタ問合せで使用される解像度のレベルを定義するオプション・パラメータです。これは、画面の同じ位置にレンダリングされる要素が多くなりすぎるのを防ぐことができます。(Oracle Spatial and Graphに関するドキュメントで、SDO_FILTER演算子のmin_resolution
オプションおよびmax_resolution
オプションを参照のこと。)minimum_pixels
の単位は、画面ピクセルです。たとえば、minimum_pixels=1
と指定すると、現在のデバイス・ウィンドウおよび現在の問合せウィンドウで1ピクセルが表す量未満の解像度を持つ地物は空間フィルタ問合せから返されません。
onclick
は、ユーザーがSVGマップ上をクリックし、テーマ地物の選択が可能な場合(selectable_in_svg
属性の説明を参照)にコールされるJavaScript関数名を指定するオプション属性です。JavaScript関数は、SVGマップが埋め込まれたHTML文書で定義する必要があります。この関数には、テーマ名、地物のキー、およびSVGマップ上でクリックされたポイントの座標(ピクセル単位)を指定するxおよびyの4つのパラメータしか指定できません。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
onmousemove
は、ユーザーがSVGマップ上のテーマの任意の地物の上にマウスを移動するとコールされる、JavaScript関数名を指定するオプション属性です。JavaScript関数は、SVGマップが埋め込まれたHTML文書で定義する必要があります。この関数には、テーマ名、地物のキー、およびSVGマップ上での移動に対するポイントの座標(ピクセル単位)を指定するxおよびyの4つのパラメータしか指定できません。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
onmouseover
は、ユーザーがSVGマップ上のテーマの地物内にマウスを移動するとコールされる、JavaScript関数名を指定するオプション属性です。(onmousemove
関数はマウスがテーマの内部で移動すると常にコールされますが、onmouseover
関数はテーマの地物の外側からテーマの地物の内側にマウスが移動したときに1回のみコールされます。)JavaScript関数は、SVGマップが埋め込まれたHTML文書で定義する必要があります。この関数には、テーマ名、地物のキー、およびSVGマップの地物の内部にマウスが移動したポイントの座標(ピクセル単位)を指定するxおよびyの4つのパラメータしか指定できません。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
onmouseout
は、ユーザーがSVGマップ上のテーマの地物から外にマウスを移動するとコールされる、JavaScript関数名を指定するオプション属性です。JavaScript関数は、SVGマップが埋め込まれたHTML文書で定義する必要があります。この関数には、テーマ名、地物のキー、およびSVGマップの地物から外にマウスが移動したポイントの座標(ピクセル単位)を指定するxおよびyの4つのパラメータしか指定できません。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
workspace_name
、workspace_savepoint
、workspace_date
およびworkspace_date_format
は、MapViewerにおけるWorkspace Managerのサポート(2.8項を参照)に関連するオプション属性です。
fetch_size
は、メモリー内にプリフェッチする行数を指定するオプション属性です。デフォルト値は100です。
timeout
は、WMSまたはWFSサーバーへの接続を待機するミリ秒数を指定するオプション属性です。
<themes>
要素には、次の定義が含まれます。
<!ELEMENT themes (theme+) >
<themes>
要素は、1つ以上の<theme>
要素(3.1.2.20項を参照)を指定します。ベース・マップ(map_request
要素のbasemap
属性)を指定した場合、<themes>
要素に指定したテーマは、ベース・マップに定義されたテーマの後に表示されます。ベース・マップを指定していない場合、指定されたテーマのみがレンダリングされます。
この<themes>
要素の中には、1つ以上の子要素<theme>
が含まれる必要があります。これらの子要素は、表示されている順序でレンダリングされます。
<theme_modifiers>
要素には、次の定義が含まれます。
<!ELEMENT theme_modifiers (theme_decorations)? >
theme_modifiersを使用すると、ベース・マップ定義の編集および変更を実行せずに、ベース・マップ上のテーマの定義をオーバーライドできます。<theme_decorations>
要素は、<theme>
要素(3.1.2.20項を参照)と同じ属性を持ちます。
次の例では、ベース・マップFORCED_LABELING
上のテーマtheme_us_airport
のlabels_always_on
属性をオーバーライドしています。
<?xml version="1.0" standalone="yes"?> <map_request title="Override labeling on map definition" basemap="FORCED_LABELING" datasource="tilsmenv" width="500" height="375" bgcolor="#a6caf0" antialiase="true" format="PNG_URL"> <center size="15.0"> <geoFeature> <geometricProperty typeName="center"> <Point> <coordinates>-122.4,37.8</coordinates> </Point> </geometricProperty> </geoFeature> </center> <theme_modifiers> <theme_decorations name="theme_us_airport" label_always_on="false"/> </theme_modifiers> </map_request>
マップ・リクエスト(3.1.2項を参照)および管理リクエスト(第5章を参照)の発行の他に、MapViewerに対して情報リクエストを発行できます。情報リクエストはXMLリクエスト文字列であり、これを使用してSQL問合せを実行し、文字列の配列またはXML文書の形で結果を取得できます。SQL問合せはSELECT文である必要があり、SQLの基本型(非LOB型またはユーザー定義オブジェクト型など)のみを選択する必要があります。
MapViewerの情報リクエストのDTDは次のとおりです。
<!ELEMENT info_request (#PCDATA) > <!ATTLIST info_request datasource CDATA #REQUIRED format (strict | non-strict) "strict" >
datasource
は、情報を取得するデータソースを指定する必須属性です。
format
はオプション属性です。この属性がstrict
(デフォルト)である場合、すべての行が書式設定され、XML文書の形で返されます。format
がnon-strict
に設定されている場合、すべての行および列見出しリストがカンマ区切りのテキスト文字列で返されます。
例3-24は、都市、1990年の人口およびCITIES表の州の略記を選択するための情報リクエストを示しています。このリクエストでは、データソースmvdemo
の接続情報が使用され、情報がXML文書(format="strict"
)で返されます。
例3-24 MapViewer情報リクエスト
<?xml version="1.0" standalone="yes"?> <info_request datasource="mvdemo" format="strict"> SELECT city, pop90 population, state_abrv state FROM cities </info_request>
例3-24では、次の内容を含むXML文書が返されます。
<?xml version="1.0" encoding="UTF-8"?> <ROWSET> <ROW num="1"> <CITY>New York</CITY> <POPULATION>7322564</POPULATION> <STATE>NY</STATE> </ROW> <ROW num="2"> <CITY>Los Angeles</CITY> <POPULATION>3485398</POPULATION> <STATE>CA</STATE> </ROW> <ROW num="3"> <CITY>Chicago</CITY> <POPULATION>2783726</POPULATION> <STATE>IL</STATE> </ROW> <ROW num="4"> <CITY>Houston</CITY> <POPULATION>1630553</POPULATION> <STATE>TX</STATE> </ROW> . . . </ROWSET>
マップ・リクエストの通常の処理から生成されるマップ・レスポンスのDTDを次に示します。(3.1.5項に、例外または回復不能なエラーが発生した場合のレスポンスのDTDを示しています。)
<!ELEMENT map_response (map_image)> <!ELEMENT map_image (map_content, box, themes, WMTException)> <!ELEMENT map_content EMPTY> <!ATTLIST map_content url CDATA #REQUIRED> <!ELEMENT WMTException (#PCDATA)> <!ATTLIST WMTException version CDATA "1.0.0" error_code (SUCCESS|FAILURE) #REQUIRED >
このレスポンスには、エラー情報以外に画像を取得するためのURLが含まれます。有効なマップが生成された場合、マップの最小枠ボックスも返されます。また、枠ボックスと交差する最小外接矩形(MBR)の中に地物が存在するテーマのリストも返されます。
例3-25では、マップ・レスポンスを示しています。
例3-25 マップ・レスポンス
<?xml version="1.0" encoding="UTF-8" ?> <map_response> <map_image> <map_content url="http://map.oracle.com/output/map029763.gif"/> <box srsName="default"> <coordinates>-122.260443,37.531621 -120.345,39.543</coordinates> </box> <themes> <theme name="US_STATES" /> <theme name="US_HIGHWAYS" /> </themes> <WMTException version="1.0.0" error_code="SUCCESS"> </WMTException> </map_image> </map_response>
次のDTDは、マップ・リクエストの処理中に例外または回復不能なエラーが発生した場合、出力XMLで使用されます。
<!ELEMENT oms_error (#PCDATA)>
この要素には、例外またはエラー・メッセージが埋め込まれます。
MapViewerでは、Open Geospatial Consortium (OGC) GML v1.0の仕様で定義されているGeometry DTDがサポートされています。この仕様には次の著作権情報が含まれます。
Copyright © 2000 OGC All Rights Reserved.
この仕様には次のステータス情報が含まれます。ただし、現行の公式ステータスはDeprecated Recommendation Paperです。
This document is an OpenGIS® Consortium Recommendation Paper. It is similar to a proposed recommendation in other organizations. While it reflects a public statement of the official view of the OGC, it does not have the status of a OGC Technology Specification. It is anticipated that the position stated in this document will develop in response to changes in the underlying technology. Although changes to this document are governed by a comprehensive review procedure, it is expected that some of these changes may be significant. The OGC explicitly invites comments on this document. Please send them to gml.rfc@opengis.org
次に示す追加の法定通知文が仕様に適用されます。
THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
この仕様のOGCのジオメトリDTDは次のとおりです。
<!-- ============================================================== --> <!-- G e o g r a p h y --> <!-- M a r k u p --> <!-- L a n g u a g e --> <!-- --> <!-- ( G M L ) --> <!-- --> <!-- G E O M E T R Y D T D --> <!-- --> <!-- Copyright (c) 2000 OGC All Rights Reserved. --> <!-- ============================================================== --> <!-- the coordinate element holds a list of coordinates as parsed character data. Note that it does not reference a SRS and does not constitute a proper geometry class. --> <!ELEMENT coordinates (#PCDATA) > <!ATTLIST coordinates decimal CDATA #IMPLIED cs CDATA #IMPLIED ts CDATA #IMPLIED > <!-- the Box element defines an extent using a pair of coordinates and a SRS name. --> <!ELEMENT Box (coordinates) > <!ATTLIST Box ID CDATA #IMPLIED srsName CDATA #REQUIRED > <!-- ============================================================== --> <!-- G E O M E T R Y C L A S S D e f i n i t i o n s --> <!-- ============================================================== --> <!-- a Point is defined by a single coordinate. --> <!ELEMENT Point (coordinates) > <!ATTLIST Point ID CDATA #IMPLIED srsName CDATA #IMPLIED > <!-- a LineString is defined by two or more coordinates, with linear interoplation between them. --> <!ELEMENT LineString (coordinates) > <!ATTLIST LineString ID CDATA #IMPLIED srsName CDATA #IMPLIED > <!-- a Polygon is defined by an outer boundary and zero or more inner boundaries. These boundaries are themselves defined by LinerRings. --> <!ELEMENT Polygon (outerBoundaryIs, innerBoundaryIs*) > <!ATTLIST Polygon ID CDATA #IMPLIED srsName CDATA #IMPLIED > <!ELEMENT outerBoundaryIs (LinearRing) > <!ELEMENT innerBoundaryIs (LinearRing) > <!-- a LinearRing is defined by four or more coordinates, with linear interpolation between them. The first and last coordinates must be coincident. --> <!ELEMENT LinearRing (coordinates) > <!ATTLIST LinearRing ID CDATA #IMPLIED > <!-- a MultiPoint is defined by zero or more Points, referenced through a pointMember element. --> <!ELEMENT MultiPoint (pointMember+) > <!ATTLIST MultiPoint ID CDATA #IMPLIED srsName CDATA #IMPLIED > <!ELEMENT pointMember (Point) > <!-- a MultiLineString is defined by zero or more LineStrings, referenced through a lineStringMember element. --> <!ELEMENT MultiLineString (lineStringMember+) > <!ATTLIST MultiLineString ID CDATA #IMPLIED srsName CDATA #IMPLIED > <!ELEMENT lineStringMember (LineString) > <!-- a MultiPolygon is defined by zero or more Polygons, referenced through a polygonMember element. --> <!ELEMENT MultiPolygon (polygonMember+) > <!ATTLIST MultiPolygon ID CDATA #IMPLIED srsName CDATA #IMPLIED > <!ELEMENT polygonMember (Polygon) > <!-- a GeometryCollection is defined by zero or more geometries, referenced through a geometryMember element. A geometryMember element may be any one of the geometry classes. --> <!ENTITY % GeometryClasses "( Point | LineString | Polygon | MultiPoint | MultiLineString | MultiPolygon | GeometryCollection )" > <!ELEMENT GeometryCollection (geometryMember+) > <!ATTLIST GeometryCollection ID CDATA #IMPLIED srsName CDATA #IMPLIED > <!ELEMENT geometryMember %GeometryClasses; > <!-- ============================================================== --> <!-- G E O M E T R Y P R O P E R T Y D e f i n i t i o n s --> <!-- ============================================================== --> <!-- GML provides an 'endorsed' name to define the extent of a feature. The extent is defined by a Box element, the name of the property is boundedBy. --> <!ELEMENT boundedBy (Box) > <!-- the generic geometryProperty can accept a geometry of any class. --> <!ELEMENT geometryProperty (%GeometryClasses;) > <!-- the pointProperty has three descriptive names: centerOf, location and position. --> <!ELEMENT pointProperty (Point) > <!ELEMENT centerOf (Point) > <!ELEMENT location (Point) > <!ELEMENT position (Point) > <!-- the lineStringProperty has two descriptive names: centerLineOf and edgeOf. --> <!ELEMENT lineStringProperty (LineString) > <!ELEMENT centerLineOf (LineString)> <!ELEMENT edgeOf (LineString)> <!-- the polygonProperty has two descriptive names: coverage and extentOf. --> <!ELEMENT polygonProperty (Polygon) > <!ELEMENT coverage (Polygon)> <!ELEMENT extentOf (Polygon)> <!-- the multiPointProperty has three descriptive names: multiCenterOf, multiLocation and multiPosition. --> <!ELEMENT multiPointProperty (MultiPoint) > <!ELEMENT multiCenterOf (MultiPoint) > <!ELEMENT multiLocation (MultiPoint) > <!ELEMENT multiPosition (MultiPoint) > <!-- the multiLineStringProperty has two descriptive names: multiCenterLineOf and multiEdgeOf. --> <!ELEMENT multiLineStringProperty (MultiLineString) > <!ELEMENT multiCenterLineOf (MultiLineString) > <!ELEMENT multiEdgeOf (MultiLineString) > <!-- the multiPolygonProperty has two descriptive names: multiCoverage and multiExtentOf. --> <!ELEMENT multiPolygonProperty (MultiPolygon) > <!ELEMENT multiCoverage (MultiPolygon) > <!ELEMENT multiExtentOf (MultiPolygon) > <!ELEMENT geometryCollectionProperty (GeometryCollection) > <!-- ============================================================== --> <!-- F E A T U R E M E T A D A T A D e f i n i t i o n s --> <!-- ============================================================== --> <!-- Feature metadata, included in GML Geometry DTD for convenience; name and description are two 'standard' string properties defined by GML. --> <!ELEMENT name (#PCDATA)> <!ELEMENT description (#PCDATA)>
MapViewerマップ・データ・サーバーは、データベースからクライアントへのライブ・データのストリーミング・サービスを提供します。このデータは、Oracle Maps JavaScript V2 APIクライアントで利用できます。また、V2 API編集ユーティリティで編集することもできます。さらに、データ同期タスクを処理するための、中間層コンポーネントとして使用されることもあります。
最も簡単に説明すると、クライアントはテーマの名前とオプションの枠ボックスを指定したリクエストをマップ・データ・サーバーに送信します。サーバーは、圧縮されたGeoJSON形式でライブ・データを返します(このデータには、ジオメトリと属性の両方が含まれています)。
次の内容について説明します。
マップ・データ・サーバーは、複数のドメインを使用します。それぞれのドメインが1つのMapViewerデータソースに対応します。たとえば、mvdemo
データソースからのデータをリクエストするには、URLが次のパターンに従っている必要があります。
http://example.com:8080/mapviewer/dataserver/mvdemo?
このURLリクエストでは、/dataserver
がマップ・データ・サーバーを表しています。/mvdemo
は、このリクエストが、どのドメインまたはデータソースに向けられているかを示しています。URLリクエストの残りの部分で、明示的にデータソースを指定する必要はありません。このURLパターンには、保護の観点からの柔軟性があります。ユーザーやWeb管理者は、そのようなURLパターンを使用して、簡単に様々なドメインに様々な保護のレベルを設定できます。
サポートされているHTTPリクエスト・パラメータの完全なリストについてのクイック・ヘルプを取得するには、helpパラメータを含んでいるリクエストを発行します。次に例を示します。
http://example:8080/mapviewer/dataserver/mvdemo?help=true
この例により、サポートされているパラメータのリストが返されます。(/mvdemo
パスは、このヘルプ・リクエストの場合にも必要とされます)。
データを取得するマップ・データ・サーバー・リクエストでは、URLに適切な問合せパラメータが含まれている必要があります。データは、MapViewer事前定義済ジオメトリ・テーマかJDBCテーマからのものになります。
次のパラメータは、MapViewer事前定義済ジオメトリ・テーマからデータを取得するマップ・データ・サーバー・リクエストに使用できます。t
(テーマ名)パラメータは必須ですが、その他のパラメータはオプションです。
t
: テーマの名前。
bbox
: バウンディング・ボックス。minx,miny,maxx,maxy
のカンマ区切りリストにする必要があります。
to_srid
: データを返すためのSRID (空間参照システム)。
bbox_srid
: データのネイティブSRIDとは異なる場合の枠ボックスのSRID (空間参照システム)。
seq
: シーケンスID。マルチパート形式でデータを取得するときに使用します。
dadp
: 小数点以下の桁数。返されるデータの座標系に対する小数点以下の最大桁数です。
include_style_info
: それぞれの地物にスタイリング情報(レンダリング/ラベリング・スタイル名、および関連する列)を含めるかどうかを決定します。(デフォルト値はtrue
です。)
include_label_box
: 各ポリゴン地物にラベル・ボックスを含めるかどうかを決定します。(デフォルト値はtrue
です。)ラベル・ボックスは、ポリゴンに収まる最大付近の矩形です。この矩形の内側に配置されるラベルは、ポリゴン地物に完全に収まるように生成されます。このパラメータは、ポリゴン以外の地物に対しては無視されます。
次に例を示します
すべてのデータをCITIES表から3857 SRIDで取得する場合:
http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_cities&to_srid=3857
指定したbboxに接触するすべてのデータをCITIES表から3857 SRIDで取得する場合:
http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_cities&bbox=-122.0,25,-100,45&to_srid=3857
指定したbboxに接触するすべてのデータをCITIES表から小数点以下3桁、スタイリング情報なしの3857 SRIDで取得する場合:
http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_cities&bbox=-122.0,25,-100,45&to_srid=3857&dadp=3&include_style_info=no
すべてのデータをCOUNTIES表から取得して、ラベル・ボックスを含める場合:
http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_counties&include_label_box=yes
次のパラメータは、動的JDBCテーマに基づいたMapViewerテーマからデータを取得するマップ・データ・サーバー・リクエストに使用できます。t
(テーマ名)パラメータとsql
(SQL問合せ)パラメータは必須ですが、その他のパラメータはオプションです。
t
: テーマの名前。
sql
: 完全なSQL問合せ(適切にURLエンコードされたもの)。
asis
: 問合せを「そのまま」実行する必要があるかどうかを決定します。デフォルトは、false
です。この値により、MapViewerは、MapViewerの空間フィルタ問合せの副問合せとしてSQL問合せを埋め込みます。この値がtrue
の場合、MapViewerは指定された問合せ文字列の変更を試行しなくなります。
bbox
: バウンディング・ボックス。minx,miny,maxx,maxy
のカンマ区切りリストにする必要があります。
to_srid
: データを返すためのSRID (空間参照システム)。
bbox_srid
: データのネイティブSRIDとは異なる場合の枠ボックスのSRID (空間参照システム)。
seq
: シーケンスID。マルチパート形式でデータを取得するときに使用します。
dadp
: 小数点以下の桁数。返されるデータの座標系に対する小数点以下の最大桁数です。
include_style_info
: それぞれの地物にスタイリング情報(レンダリング/ラベリング・スタイル名、および関連する列)を含めるかどうかを決定します。(デフォルト値はtrue
です。)
include_label_box
: 各ポリゴン地物にラベル・ボックスを含めるかどうかを決定します。(デフォルト値はtrue
です。)ラベル・ボックスは、ポリゴンに収まる最大付近の矩形です。この矩形の内側に配置されるラベルは、ポリゴン地物に完全に収まるように生成されます。このパラメータは、ポリゴン以外の地物に対しては無視されます。
次に例を示します
CITIES表のすべてのデータをSRID 3857で取得する場合:
http://example:8080/mapviewer/dataserver/mvdemo?t=theme1&sql=select+*+from+cities&to_srid=3857
特定のbboxに収まるCITIES表のすべてのデータをSRID 3857で取得する場合:
http://example:8080/mapviewer/dataserver/mvdemo?t=theme1&sql=select+*+from+cities&to_srid=3857&bbox=-122.0,25,-100,45
問合せをbboxなしでそのまま実行し、SRID 3857でデータを返す場合:
http://example:8080/mapviewer/dataserver/mvdemo?t=theme1&sql=select+*+from+cities&to_srid=3857&bbox=-122.0,25,-100,45&asis=t
JDBCテーマから注釈テキストの要素を取得するリクエストは、 3.2.2.2項「JDBCテーマからのデータの取得」のリクエストと同様のものになります。
次のパラメータは、動的JDBCテーマに基づいたMapViewerテーマからデータを取得するマップ・データ・サーバー・リクエストに使用できます。t
(テーマ名)、sql
(SQL問合せ)、geom_type
、およびbase_table
の各パラメータは必須ですが、その他のパラメータはオプションです。
t
: テーマの名前。
sql
: 完全なSQL問合せ(適切にURLエンコードされたもの)。
geom_type
: 空間列が注釈タイプであることを示す、annotation
として指定する必要があります。
base_table
: データベース表(その表の注釈テキスト・メタデータを読み取るサーバー用のもの)。
asis
: 問合せを「そのまま」実行する必要があるかどうかを決定します。デフォルトは、false
です。この値により、MapViewerは、MapViewerの空間フィルタ問合せの副問合せとしてSQL問合せを埋め込みます。この値がtrue
の場合、MapViewerは指定された問合せ文字列の変更を試行しなくなります。
bbox
: バウンディング・ボックス。minx,miny,maxx,maxy
のカンマ区切りリストにする必要があります。
to_srid
: データを返すためのSRID (空間参照システム)。
bbox_srid
: データのネイティブSRIDとは異なる場合の枠ボックスのSRID (空間参照システム)。
seq
: シーケンスID。マルチパート形式でデータを取得するときに使用します。
dadp
: 小数点以下の桁数。返されるデータの座標系に対する小数点以下の最大桁数です。
include_style_info
: それぞれの地物にスタイリング情報(レンダリング/ラベリング・スタイル名、および関連する列)を含めるかどうかを決定します。(デフォルト値はtrue
です。)
include_label_box
: 各ポリゴン地物にラベル・ボックスを含めるかどうかを決定します。(デフォルト値はtrue
です。)ラベル・ボックスは、ポリゴンに収まる最大付近の矩形です。この矩形の内側に配置されるラベルは、ポリゴン地物に完全に収まるように生成されます。このパラメータは、ポリゴン以外の地物に対しては無視されます。
次の例では、注釈テキスト情報を取得します。
http://example:8080/mapviewer/dataserver/tilsmenv?t=theme1&sql=select+*+from+annotext_table&geom_col=textobj&geom_type=annotation&base_table=annotext_table&bbox=0,0,10,10
通常のレスポンスには、注釈テキスト・メタデータ情報に加えて、注釈テキスト地物が含まれています。それぞれの注釈テキスト地物には、1つ以上のテキスト要素が含まれていることがあります。それぞれのテキスト要素は、テキスト値、場所、引出し線、およびグラフィックの属性で定義されています。詳細は、注釈テキストについてのOGC仕様書を参照してください。
レスポンスは、次のようになります。
{"type":"AnnotationText", "collectionName":"theme1", "srs":0, "geodetic":false, "bbox":[0, 0, 10, 10], "attr_names":["ID"], "attr_types":["double"], "default_text_attributes":{"fontWeight":"Normal","fontStyle":"Normal","textDecoration":"None","letterSpacing":"Normal","wordSpacing":"Normal","fill":"black","fill-opacity":1.0,"stroke":"black","strokeWidth":1.0,"stroke-opacity":1.0,"horizontalAlignment":"start","verticalAlignment":"top","multilineJustification":"left","multilineSpacing":0.0}, "metadata":{"textExpression":"name","textAttributes":{"fontFamily":"Serif","fontSize":14.0,"fill":"#ff0000"}}, "features":[ {"type":"AnnoText", "elements":[{"location":{"type":"Point", "coordinates":[1, 1]},"textValue":"Sample Label 1","leaderLine":{"type":"LineString", "coordinates":[0,0,1,1]}}],"envelope":{"type":"Rectangle", "coordinates":[0,0,1,1]},"properties":{"ID":"1.0"}}, {"type":"AnnoText", "elements":[{"location":{"type":"LineString", "coordinates":[2,5,4,5,6,5]},"leaderLine":{"type":"LineString", "coordinates":[4,3,4,5]},"textAttributes":{"fontFamily":"Dialog","fontSize":14.0,"fill":"blue"}}],"envelope":{"type":"Rectangle", "coordinates":[2,3,6,5]},"properties":{"ID":"3.0"}}, {"type":"AnnoText", "elements":[{"location":{"type":"Point", "coordinates":[10, 10]},"textValue":"Sample Label 2","leaderLine":{"type":"LineString", "coordinates":[5,10,10,10]}}],"envelope":{"type":"LineString", "coordinates":[5,10,10,10]},"properties":{"ID":"2.0"}} ]}
トポロジ・セットは、トポロジ・プリミティブのセット(フェイス、エッジ、およびノード)で定義されます。それぞれのトポロジ地物は、1つ以上のトポロジ・プリミティブに関連付けできます。
トポロジ・プリミティブを取得するリクエストには、次の例に示すように、topology
パラメータを含める必要があります。
http://example:8080/mapviewer/dataserver/tilsmenv?topology=city_data&bbox=10,10,35,35
レスポンスには、入力MBRに接触するすべてのプリミティブが含まれています。
{"type":"TopologyPrimitives", "topology":"city_data", "srs":0, "bbox":[0, 0, 62, 42], "face_attr_names":["FACE_ID","BOUNDARY_EDGE_ID","ISLAND_EDGE_ID_LIST","ISLAND_NODE_ID_LIST"], "face_attr_types":["integer","integer","array:integer","array:integer"], "edge_attr_names":["EDGE_ID","START_NODE_ID","END_NODE_ID","NEXT_LEFT_EDGE_ID","PREV_LEFT_EDGE_ID","NEXT_RIGHT_EDGE_ID","PREV_RIGHT_EDGE_ID","LEFT_FACE_ID","RIGHT_FACE_ID"], "edge_attr_types":["integer","integer","integer","integer","integer","integer","integer","integer","integer"], "node_attr_names":["NODE_ID","EDGE_ID","FACE_ID"], "node_attr_types":["integer","integer","integer"], "primitives":[ {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[3,30,15,38]}, "properties":{"FACE_ID":"1", "BOUNDARY_EDGE_ID":"1", "ISLAND_EDGE_ID_LIST":[25]}}, {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[9,14,21,22]}, "properties":{"FACE_ID":"3", "BOUNDARY_EDGE_ID":"19"}}, {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[9,6,21,14]}, "properties":{"FACE_ID":"6", "BOUNDARY_EDGE_ID":"20"}}, {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[17,30,31,40]}, "properties":{"FACE_ID":"2", "BOUNDARY_EDGE_ID":"2", "ISLAND_NODE_ID_LIST":[4]}}, {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[21,6,35,14]}, "properties":{"FACE_ID":"7", "BOUNDARY_EDGE_ID":"10"}}, {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[21,14,35,22]}, "properties":{"FACE_ID":"4", "BOUNDARY_EDGE_ID":"17"}}, {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[35,14,47,22]}, "properties":{"FACE_ID":"5", "BOUNDARY_EDGE_ID":"15"}}, {"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[35,6,47,14]}, "properties":{"FACE_ID":"8", "BOUNDARY_EDGE_ID":"16"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[8,30,16,30,16,38,3,38,3,30,8,30]}, "properties":{"EDGE_ID":"1", "START_NODE_ID":"1", "END_NODE_ID":"1", "NEXT_LEFT_EDGE_ID":"1", "PREV_LEFT_EDGE_ID":"1", "NEXT_RIGHT_EDGE_ID":"-1", "PREV_RIGHT_EDGE_ID":"-1", "LEFT_FACE_ID":"1", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[4,31,7,31,7,34,4,34,4,31]}, "properties":{"EDGE_ID":"26", "START_NODE_ID":"20", "END_NODE_ID":"20", "NEXT_LEFT_EDGE_ID":"26", "PREV_LEFT_EDGE_ID":"26", "NEXT_RIGHT_EDGE_ID":"-26", "PREV_RIGHT_EDGE_ID":"-26", "LEFT_FACE_ID":"9", "RIGHT_FACE_ID":"1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,22,21,22]}, "properties":{"EDGE_ID":"6", "START_NODE_ID":"16", "END_NODE_ID":"17", "NEXT_LEFT_EDGE_ID":"7", "PREV_LEFT_EDGE_ID":"21", "NEXT_RIGHT_EDGE_ID":"-21", "PREV_RIGHT_EDGE_ID":"19", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"3"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,14,9,22]}, "properties":{"EDGE_ID":"21", "START_NODE_ID":"15", "END_NODE_ID":"16", "NEXT_LEFT_EDGE_ID":"6", "PREV_LEFT_EDGE_ID":"22", "NEXT_RIGHT_EDGE_ID":"9", "PREV_RIGHT_EDGE_ID":"-6", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"3"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,14,21,14]}, "properties":{"EDGE_ID":"9", "START_NODE_ID":"15", "END_NODE_ID":"14", "NEXT_LEFT_EDGE_ID":"19", "PREV_LEFT_EDGE_ID":"-21", "NEXT_RIGHT_EDGE_ID":"-22", "PREV_RIGHT_EDGE_ID":"20", "LEFT_FACE_ID":"3", "RIGHT_FACE_ID":"6"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,6,21,6]}, "properties":{"EDGE_ID":"12", "START_NODE_ID":"8", "END_NODE_ID":"9", "NEXT_LEFT_EDGE_ID":"20", "PREV_LEFT_EDGE_ID":"-22", "NEXT_RIGHT_EDGE_ID":"22", "PREV_RIGHT_EDGE_ID":"-13", "LEFT_FACE_ID":"6", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,35,13,35]}, "properties":{"EDGE_ID":"25", "START_NODE_ID":"21", "END_NODE_ID":"22", "NEXT_LEFT_EDGE_ID":"-25", "PREV_LEFT_EDGE_ID":"-25", "NEXT_RIGHT_EDGE_ID":"25", "PREV_RIGHT_EDGE_ID":"25", "LEFT_FACE_ID":"1", "RIGHT_FACE_ID":"1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,6,9,14]}, "properties":{"EDGE_ID":"22", "START_NODE_ID":"8", "END_NODE_ID":"15", "NEXT_LEFT_EDGE_ID":"21", "PREV_LEFT_EDGE_ID":"-12", "NEXT_RIGHT_EDGE_ID":"12", "PREV_RIGHT_EDGE_ID":"-9", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"6"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[25,30,31,30,31,40,17,40,17,30,25,30]}, "properties":{"EDGE_ID":"2", "START_NODE_ID":"2", "END_NODE_ID":"2", "NEXT_LEFT_EDGE_ID":"3", "PREV_LEFT_EDGE_ID":"-3", "NEXT_RIGHT_EDGE_ID":"-2", "PREV_RIGHT_EDGE_ID":"-2", "LEFT_FACE_ID":"2", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,6,35,6]}, "properties":{"EDGE_ID":"13", "START_NODE_ID":"9", "END_NODE_ID":"10", "NEXT_LEFT_EDGE_ID":"18", "PREV_LEFT_EDGE_ID":"-20", "NEXT_RIGHT_EDGE_ID":"-12", "PREV_RIGHT_EDGE_ID":"-14", "LEFT_FACE_ID":"7", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,22,35,22]}, "properties":{"EDGE_ID":"7", "START_NODE_ID":"17", "END_NODE_ID":"18", "NEXT_LEFT_EDGE_ID":"8", "PREV_LEFT_EDGE_ID":"6", "NEXT_RIGHT_EDGE_ID":"-19", "PREV_RIGHT_EDGE_ID":"17", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"4"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,6,21,14]}, "properties":{"EDGE_ID":"20", "START_NODE_ID":"9", "END_NODE_ID":"14", "NEXT_LEFT_EDGE_ID":"-9", "PREV_LEFT_EDGE_ID":"12", "NEXT_RIGHT_EDGE_ID":"13", "PREV_RIGHT_EDGE_ID":"10", "LEFT_FACE_ID":"6", "RIGHT_FACE_ID":"7"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,14,21,14]}, "properties":{"EDGE_ID":"10", "START_NODE_ID":"13", "END_NODE_ID":"14", "NEXT_LEFT_EDGE_ID":"-20", "PREV_LEFT_EDGE_ID":"18", "NEXT_RIGHT_EDGE_ID":"17", "PREV_RIGHT_EDGE_ID":"-19", "LEFT_FACE_ID":"7", "RIGHT_FACE_ID":"4"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,14,21,22]}, "properties":{"EDGE_ID":"19", "START_NODE_ID":"14", "END_NODE_ID":"17", "NEXT_LEFT_EDGE_ID":"-6", "PREV_LEFT_EDGE_ID":"9", "NEXT_RIGHT_EDGE_ID":"-10", "PREV_RIGHT_EDGE_ID":"-7", "LEFT_FACE_ID":"3", "RIGHT_FACE_ID":"4"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[25,30,25,35]}, "properties":{"EDGE_ID":"3", "START_NODE_ID":"2", "END_NODE_ID":"3", "NEXT_LEFT_EDGE_ID":"-3", "PREV_LEFT_EDGE_ID":"2", "NEXT_RIGHT_EDGE_ID":"2", "PREV_RIGHT_EDGE_ID":"3", "LEFT_FACE_ID":"2", "RIGHT_FACE_ID":"2"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,6,47,6]}, "properties":{"EDGE_ID":"14", "START_NODE_ID":"10", "END_NODE_ID":"11", "NEXT_LEFT_EDGE_ID":"16", "PREV_LEFT_EDGE_ID":"-18", "NEXT_RIGHT_EDGE_ID":"-13", "PREV_RIGHT_EDGE_ID":"-16", "LEFT_FACE_ID":"8", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,14,47,14]}, "properties":{"EDGE_ID":"11", "START_NODE_ID":"13", "END_NODE_ID":"12", "NEXT_LEFT_EDGE_ID":"15", "PREV_LEFT_EDGE_ID":"-17", "NEXT_RIGHT_EDGE_ID":"-18", "PREV_RIGHT_EDGE_ID":"16", "LEFT_FACE_ID":"5", "RIGHT_FACE_ID":"8"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,6,35,14]}, "properties":{"EDGE_ID":"18", "START_NODE_ID":"10", "END_NODE_ID":"13", "NEXT_LEFT_EDGE_ID":"10", "PREV_LEFT_EDGE_ID":"13", "NEXT_RIGHT_EDGE_ID":"14", "PREV_RIGHT_EDGE_ID":"-11", "LEFT_FACE_ID":"7", "RIGHT_FACE_ID":"8"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,22,47,22]}, "properties":{"EDGE_ID":"8", "START_NODE_ID":"18", "END_NODE_ID":"19", "NEXT_LEFT_EDGE_ID":"-15", "PREV_LEFT_EDGE_ID":"7", "NEXT_RIGHT_EDGE_ID":"-17", "PREV_RIGHT_EDGE_ID":"15", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"5"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,14,35,22]}, "properties":{"EDGE_ID":"17", "START_NODE_ID":"13", "END_NODE_ID":"18", "NEXT_LEFT_EDGE_ID":"-7", "PREV_LEFT_EDGE_ID":"-10", "NEXT_RIGHT_EDGE_ID":"11", "PREV_RIGHT_EDGE_ID":"-8", "LEFT_FACE_ID":"4", "RIGHT_FACE_ID":"5"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[36,38,38,35,41,34,42,33,45,32,47,28,50,28,52,32,57,33]}, "properties":{"EDGE_ID":"4", "START_NODE_ID":"5", "END_NODE_ID":"6", "NEXT_LEFT_EDGE_ID":"-5", "PREV_LEFT_EDGE_ID":"-4", "NEXT_RIGHT_EDGE_ID":"4", "PREV_RIGHT_EDGE_ID":"5", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[41,40,45,40,47,42,62,41,61,38,59,39,57,36,57,33]}, "properties":{"EDGE_ID":"5", "START_NODE_ID":"7", "END_NODE_ID":"6", "NEXT_LEFT_EDGE_ID":"-4", "PREV_LEFT_EDGE_ID":"-5", "NEXT_RIGHT_EDGE_ID":"5", "PREV_RIGHT_EDGE_ID":"4", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[47,14,47,22]}, "properties":{"EDGE_ID":"15", "START_NODE_ID":"12", "END_NODE_ID":"19", "NEXT_LEFT_EDGE_ID":"-8", "PREV_LEFT_EDGE_ID":"11", "NEXT_RIGHT_EDGE_ID":"-16", "PREV_RIGHT_EDGE_ID":"8", "LEFT_FACE_ID":"5", "RIGHT_FACE_ID":"-1"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[47,6,47,14]}, "properties":{"EDGE_ID":"16", "START_NODE_ID":"11", "END_NODE_ID":"12", "NEXT_LEFT_EDGE_ID":"-11", "PREV_LEFT_EDGE_ID":"14", "NEXT_RIGHT_EDGE_ID":"-14", "PREV_RIGHT_EDGE_ID":"-15", "LEFT_FACE_ID":"8", "RIGHT_FACE_ID":"-1"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[4, 31]}, "properties":{"NODE_ID":"20", "EDGE_ID":"26", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[8, 30]}, "properties":{"NODE_ID":"1", "EDGE_ID":"1", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 6]}, "properties":{"NODE_ID":"8", "EDGE_ID":"12", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 35]}, "properties":{"NODE_ID":"21", "EDGE_ID":"25", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 14]}, "properties":{"NODE_ID":"15", "EDGE_ID":"21", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 22]}, "properties":{"NODE_ID":"16", "EDGE_ID":"6", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[13, 35]}, "properties":{"NODE_ID":"22", "EDGE_ID":"-25", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[20, 37]}, "properties":{"NODE_ID":"4", "EDGE_ID":"0", "FACE_ID":"2"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[21, 14]}, "properties":{"NODE_ID":"14", "EDGE_ID":"19", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[21, 22]}, "properties":{"NODE_ID":"17", "EDGE_ID":"7", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[21, 6]}, "properties":{"NODE_ID":"9", "EDGE_ID":"20", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[25, 30]}, "properties":{"NODE_ID":"2", "EDGE_ID":"2", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[25, 35]}, "properties":{"NODE_ID":"3", "EDGE_ID":"-3", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[35, 14]}, "properties":{"NODE_ID":"13", "EDGE_ID":"17", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[35, 6]}, "properties":{"NODE_ID":"10", "EDGE_ID":"18", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[35, 22]}, "properties":{"NODE_ID":"18", "EDGE_ID":"8", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[36, 38]}, "properties":{"NODE_ID":"5", "EDGE_ID":"4", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[41, 40]}, "properties":{"NODE_ID":"7", "EDGE_ID":"5", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[47, 14]}, "properties":{"NODE_ID":"12", "EDGE_ID":"15", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[47, 6]}, "properties":{"NODE_ID":"11", "EDGE_ID":"-14", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[47, 22]}, "properties":{"NODE_ID":"19", "EDGE_ID":"-15", "FACE_ID":"0"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[57, 33]}, "properties":{"NODE_ID":"6", "EDGE_ID":"-4", "FACE_ID":"0"}} ]}
トポロジ地物を取得するために、次の例では、topology
パラメータ、base_table
パラメータ、およびgeom_col
パラメータを指定しています(grom_col
は、トポロジ列を表しています)。
http://example:8080/mapviewer/dataserver/tilsmenv?topology=city_data&base_table=land_parcels&geom_col=feature
このリクエストのレスポンスは、次のようなものになります。
{"type":"TopologyFeatures", "topology":"CITY_DATA", "topology_id":5, "topology_owner":"TILSZUSER", "tolerance":5.0E-5, "srs":0, "table_schema":"TILSZUSER", "table_name":"LAND_PARCELS", "topo_column":"FEATURE", "layer_id":1, "layer_type":"POLYGON", "layer_level":0, "child_layer":0, "node_sequence":"CITY_DATA_NODE_S", "edge_sequence":"CITY_DATA_EDGE_S", "face_sequence":"CITY_DATA_FACE_S", "feature_sequence":"CITY_DATA_TG_S", "digits_right_decimal":16, "attr_names":["FEATURE_NAME"], "attr_types":["string"], "features":[ {"type":"topology", "tg_id":4, "primitives":[{"topo_id":3,"topo_type":3},{"topo_id":6,"topo_type":3}], "properties":{"FEATURE_NAME":"P1"}}, {"type":"topology", "tg_id":5, "primitives":[{"topo_id":4,"topo_type":3},{"topo_id":7,"topo_type":3}], "properties":{"FEATURE_NAME":"P2"}}, {"type":"topology", "tg_id":6, "primitives":[{"topo_id":5,"topo_type":3},{"topo_id":8,"topo_type":3}], "properties":{"FEATURE_NAME":"P3"}}, {"type":"topology", "tg_id":7, "primitives":[{"topo_id":2,"topo_type":3}], "properties":{"FEATURE_NAME":"P4"}}, {"type":"topology", "tg_id":8, "primitives":[{"topo_id":1,"topo_type":3}], "properties":{"FEATURE_NAME":"P5"}} ]}
プリミティブのフェイス、エッジ、およびノードを指定するために、次の例ではプリミティブの識別子を定義しています。
http://example:8080/mapviewer/dataserver/tilsmenv?topology=city_data&face_ids=-1&edge_ids=3,4&node_ids=5
このリクエストのレスポンスは、次のようなものになります。
{"type":"TopologyPrimitives", "topology":"city_data", "srs":0, "bbox":[0, 0, 57, 38], "face_attr_names":["FACE_ID","BOUNDARY_EDGE_ID","ISLAND_EDGE_ID_LIST","ISLAND_NODE_ID_LIST"], "face_attr_types":["integer","integer","array:integer","array:integer"], "edge_attr_names":["EDGE_ID","START_NODE_ID","END_NODE_ID","NEXT_LEFT_EDGE_ID","PREV_LEFT_EDGE_ID","NEXT_RIGHT_EDGE_ID","PREV_RIGHT_EDGE_ID","LEFT_FACE_ID","RIGHT_FACE_ID"], "edge_attr_types":["integer","integer","integer","integer","integer","integer","integer","integer","integer"], "node_attr_names":["NODE_ID","EDGE_ID","FACE_ID"], "node_attr_types":["integer","integer","integer"], "primitives":[ {"type":"Face", "properties":{"FACE_ID":"-1", "BOUNDARY_EDGE_ID":"0", "ISLAND_EDGE_ID_LIST":[-1,-2,4,6]}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[25,30,25,35]}, "properties":{"EDGE_ID":"3", "START_NODE_ID":"2", "END_NODE_ID":"3", "NEXT_LEFT_EDGE_ID":"-3", "PREV_LEFT_EDGE_ID":"2", "NEXT_RIGHT_EDGE_ID":"2", "PREV_RIGHT_EDGE_ID":"3", "LEFT_FACE_ID":"2", "RIGHT_FACE_ID":"2"}}, {"type":"Edge", "geometry":{"type":"LineString", "coordinates":[36,38,38,35,41,34,42,33,45,32,47,28,50,28,52,32,57,33]}, "properties":{"EDGE_ID":"4", "START_NODE_ID":"5", "END_NODE_ID":"6", "NEXT_LEFT_EDGE_ID":"-5", "PREV_LEFT_EDGE_ID":"-4", "NEXT_RIGHT_EDGE_ID":"4", "PREV_RIGHT_EDGE_ID":"5", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"-1"}}, {"type":"Node", "geometry":{"type":"Point", "coordinates":[36, 38]}, "properties":{"NODE_ID":"5", "EDGE_ID":"4", "FACE_ID":"0"}} ]}
マップ・データ・サーバーは、圧縮されたGeoJSON形式でデータを返します。パフォーマンスと情報の実用性を向上するために、標準GeoJSONにいくつかのマイナーな変更と追加が実施されています。
次に、レスポンス例を示します。
{"type":"FeatureCollection", "collectionName":"theme1", "srs":3857, "geodetic":false, "bbox":[-17566686.86258, 2414218.89842, -7905675.57465, 8629389.76988], "attr_names":["CITY","STATE_ABRV","POP90","RANK90"], "attr_types":["string","string","double","double"], "features":[ {"type":"Feature","_id":"AAASQ3AAEAAAAMbAAA","geometry": {"type":"Point", "coordinates":[-119.99823, 38.9052]},"properties":{"CITY":"SOUTH LAKE TAHOE", "SALES":"125.8", "NAME":"FACTORY STORES AT THE Y", "_label_":"FACTORY STORES AT THE Y"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}}, {"type":"Feature","_id":"AAASQ3AAEAAAAMbAAB","geometry": {"type":"Point", "coordinates":[-121.95073, 37.53356]},"properties":{"CITY":"FREMONT", "SALES":"186.8", "NAME":"OHLONE VILLAGE", "_label_":"OHLONE VILLAGE"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}}, {"type":"Feature","_id":"AAASQ3AAEAAAAMbAAC","geometry": {"type":"Point", "coordinates":[-118.48844, 34.02353]},"properties":{"CITY":"SANTA MONICA", "SALES":"9.1", "NAME":"SANTA MONICA PLACE", "_label_":"SANTA MONICA PLACE"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}}, {"type":"Feature","_id":"AAASQ3AAEAAAAMbAAD","geometry": {"type":"Point", "coordinates":[-118.55093, 34.42104]},"properties":{"CITY":"SANTA CLARITA", "SALES":"52.6", "NAME":"VALENCIA TOWN CENTER", "_label_":"VALENCIA TOWN CENTER"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}}, {"type":"Feature","_id":"AAASQ3AAEAAAAMbAAE","geometry": {"type":"Point", "coordinates":[-122.56007, 38.08187]},"properties":{"CITY":"NOVATO", "SALES":"119.1", "NAME":"VINTAGE OAKS AT NOVATO", "_label_":"VINTAGE OAKS AT NOVATO"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}}]}
レスポンスには、最小限のヘッダーに加えて、地物の配列が含まれています。ヘッダーには、空間参照システム(srs
) IDと結果データの最小枠ボックスが含まれています。地物の配列には、属性名とそのタイプが含まれています。有効なタイプ名には、"byte"、"short"、"int","long"、"float"、"double"、"char"、"string"、"boolean"、"date"
があります。
それぞれの地物には、次のフィールドが適用されます。
type
: 常にFeature
です。
_id
: オプションのIDまたはkey属性。
geometry
: 変更済のGeoJSON形式でエンコードされた実際のジオメトリ。
properties
: 地物に関するすべてのプロパティ(名前と値のペア)を格納しているオブジェクト。
styles
: オプションのスタイリング情報オブジェクト。2つの埋込みオブジェクトrendering
とlabeling
が含まれています。これらは、同じ構造体を共有しています。基本的に、オブジェクトにはstyle
フィールドとオプションのcolumns
配列が含まれています。現時点では、事前定義済テーマのみがレスポンスに含まれるスタイリング情報をサポートしています。そのため、動的テーマのレスポンスには、スタイリング情報が含まれません。
label_box
: 4つの要素の配列。ラベル・ボックスのminX
、minY
、maxX
、およびmaxY
を指定しています。ポリゴンにのみ、ラベル・ボックスが含まれている可能性があります。
ラベル・テキストは、_label_
という名前の疑似プロパティとして、常にプロパティ・リストに含まれている点に注意してください。
マップ・データ・サーバーは、データ・リクエストを処理できない場合に、エラー・オブジェクトを含むJSONレスポンスを送信します。このJSONエラー・オブジェクトは、次のようなものになります。
{"error": {"code": "ora-500", "message": "Table requested does not exist", "details": "maybe a stack trace here..." } }
前述のJSONオブジェクトでは、code
はマップ・データ・サーバーのみが理解するエラー・コードになり、message
には警告ダイアログでユーザーに表示できる短いメッセージが含まれています。また、details
は、詳細を含めることができるオプションのフィールドです(これが含まれている場合は、スタック・トレースなどになります)。
マップ・タイル・サーバーは、事前に生成される固定サイズのマップ画像タイルをフェッチ、キャッシュおよび提供するマップ画像キャッシング・エンジンです。これは、MapViewerサーバーの一部であるJavaサーブレットとして実装されます。マップ・タイル・サーバーは、タイルのズーム・レベルおよびタイル位置(メッシュ・コード)によって指定されたマップ画像タイルを要求するリクエストを受け付け、リクエストされたタイルをクライアントに返送します。
マップ・タイル・サーバーの基本的なワークフローを、図3-6に示します。
図3-6のように、マップ・タイル・サーバーは、マップ・タイルを求めるリクエストを受信すると、該当するタイルをキャッシュ・ストレージ・システム内で検索します。該当するタイルがキャッシュされていると、マップ・タイル・サーバーはそのタイルをクライアントに送信します。該当するタイルがキャッシュされていない場合は、該当するタイルをフェッチしてキャッシュに保存した後、クライアントに送信します。
MapViewer管理ツールを使用すると、マップ・タイル・サーバーを管理できます。
関連項目:
この項では、Oracle Mapsを効果的に使用するために知っておくべき、マップ・タイル・サーバーに関する概念について説明します。
関連項目:
マップ・タイル層はすべてマップ・タイル・サーバーで管理されます。マップ・タイル・サーバーは、マップ・タイル層に属するマップ画像タイルのフェッチおよび格納を実行した後、マップ画像タイルをクライアントに返します。マップ・タイル・サーバーでは複数のマップ・タイル層を管理できます。
どのマップ・タイル層にも、事前定義済のズーム・レベルを複数持たせることができます。各ズーム・レベルに、0からn-1 (nはズーム・レベルの総数)のズーム・レベル番号のうち1つが割り当てられます。ズーム・レベル0は最もズーム・アウトしたレベル、ズーム・レベルn-1は最もズーム・インしたレベルです。
マップは、ズーム・レベルごとに、同一サイズの小さな一連のマップ画像タイルに均等に分割されています。クライアントは、そのズーム・レベルおよびタイル・メッシュ・コードによってマップ・タイルを指定します。
マップ・タイル層は、次の2つのタイプのソースから得られます。
MapViewer内部のベース・マップ(MapViewerマップ・レンダリング・エンジンによってレンダリングされる)。MapViewerベース・マップは、事前定義済の一連のテーマから構成され、データベース・ビューUSER_SDO_MAPS内で事前定義済である必要があります。
外部Webマップ・サービス・プロバイダによってレンダリングされたマップ。外部Webマップ・サービス・プロバイダは、Webを介したクライアント・リクエストに対してマップのレンダリングおよび表示を実行するサーバーです。外部マップ・サービス・プロバイダからマップをフェッチできるアダプタを正しく構成すると、マップ・タイル・サーバーは該当する外部マップ・サービス・プロバイダによって生成された一連のマップ・タイルをフェッチして表示できるようになります。(マップ・タイル・サーバーが内部で動作しているMapViewer以外のMapViewerインスタンスも、外部マップ・サービス・プロバイダとみなされます。)
Oracle Mapsには、マップ画像タイルのストレージのための3つのオプションがあります。
ローカル・ファイル・システムをキャッシュに使用する場合、このストレージに使用するパスをマップ・タイル・サーバーの構成設定の一部としてカスタマイズできます。
データベース表をキャッシュに使用する場合は、データベース表を作成し、USER_SDO_CACHED_MAPSビューで、タイル層のTILES_TABLE列をこの表に設定する必要があります。
画像タイルをキャッシュしない場合は、それをタイル層の定義に示す必要があります。
ファイル・システムには各タイル層の独自のストレージ・ルート・ディレクトリがあり、タイル層定義では<cache_storage>
要素のroot_path
属性によって指定されます。この属性が指定されていない場合は、mapViewerConfig.xml
ファイルの<tile_storage>
要素に指定されたデフォルトのストレージの場所がルート・パスとして使用されます。たとえば、ルート・パスが/scratch/tilecache/
として定義され、MVDEMOというデータ・ソースに19のズーム・レベルを持つDEMO_MAPというタイル層が含まれている場合は、サーバーのインスタンス化の後に/scratch/tilecache/MVDEMO.DEMO_MAP
フォルダが作成されます。このフォルダには、19個のサブフォルダが含まれており(/0
、/1
、…、/18
)、画像タイルがズーム・レベル別に各サブフォルダに保存されます。
各ズーム・レベル下に、マップ・タイルのサブフォルダを編成するための2つのオプションがあります。1つはデフォルトのオプションで、メッシュ・コードのツリー構造を使用します。もう1つは、xyzストレージ・スキームと呼ばれており、タイルの行と列の値をサブフォルダおよびタイル名として使用してマップ・タイルを保存します。どちらのストレージ・オプションも各ズーム・レベルに対するタイルのメッシュ・コード値から開始します(タイル・メッシュ・コードの詳細は、3.3.1.4項「タイル・メッシュ・コード」を参照)。ズーム・レベルにおける各タイルは、メッシュ・コード値のペア(mx, my
)を使用して表すことができます。mx
およびmy
は、それぞれ水平方向および垂直方向の整数値です。左下隅のタイルは、(0, 0)の値を持ちます。また、タイルの行とタイルの列値のペア(tile_column, tile_row
)を使用してタイルを配置することもできます。左上隅のタイルは、(0, 0)の値を持ちます。
画像タイルは、データベース表に保存できます。その手順は次のとおりです。
画像タイルを保存する表を作成します。次に例を示します。
CREATE TABLE tile_dbt ( tile_layer varchar2(64), zoom_level number, x number, y number, modified TIMESTAMP, data BLOB); COMMIT;
USER_SDO_CACHED_MAPSビューでタイル層のTILES_TABLE列を更新します。たとえば、DEMP_MAPというタイル層があり、ステップ1で作成した表をマップ・タイルの保存に使用する場合は、次のようにタイル層のTILES_TABLE列を更新します。
UPDATE user_sdo_cached_maps SET tiles_table='tiles_dbt' WHERE name='DEMP_MAP';
MapViewerサーバーを再起動して、変更を有効にします。
この例を使用すると、タイル層DEMP_MAPのマップ画像タイルはデータベース表TILE_DBTに保存されます。
タイルの内容が常に変更される可能性がある場合(雲量のリアルタイム衛星画像マップなど)、または画像タイルを保存しない場合は、タイルを保存せずに直接にストリーミングできます。
このオプションを選択するには、タイル層の定義で<map_tile_layer>
要素のpersistent_tiles
属性をfalse
に設定します。(persistent_tiles
属性のデフォルト値はtrue
です。)例3-26では、persistent_tiles
属性がfalse
に設定されたDEMO_MAPというタイル層が挿入されているため、このタイル層のマップ画像タイルはキャッシュされません。
例3-26 タイルを保存せずにストリーミングする
INSERT INTO user_sdo_cached_maps values(
'DEMO_MAP',
'an example tile layer that does not cache image tiles',
'',
'YES',
'YES',
'<map_tile_layer name="DEMO_MAP_TREEMESH" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3" persistent_tiles="false">
<internal_map_source data_source="mvdemo" base_map="DEMO_MAP" bgcolor="#dddddd" out_of_bounds_color="#eeddff"/>
<tile_storage root_path="/temp" short_path="false" />
<coordinate_system srid="8307" minX="-180.0" maxX="180.0" minY="-90.0" maxY="90.0"/>
<tile_image width="256" height="256"/>
<tile_dpi value="90.7142857"/>
<tile_meters_per_unit value="111319.49079327358"/>
<zoom_levels levels="19" min_scale="2132.729583849784" max_scale="559082264.0287178"/>
</map_tile_layer>',
'DEMO_MAP',
'');
COMMIT;
マップ・タイル・サーバーでは、同一サイズの小さな矩形のイメージ・タイルとして一連のマップ画像をキャッシュし、管理します。タイル処理は現在、任意の2次元のデカルト座標系でサポートされています。測地座標系も、デカルト座標系であるかのようにマッピングされる場合(図3-7のように経度および緯度が単に2つの直交軸として取り扱われる場合)はサポートされています。
ズーム・レベルごとに、マップ・タイルはマップ座標系全体を2つの次元(XとY。図3-7では緯度と経度)に沿って均等に分割して作成されます。マップ・タイル・サーバーは、マップ画像タイルを作成する際、マップ座標系のこの次元情報を必要とします。そのため、マップ・タイル層の構成設定でこの情報を指定する必要があります。
マップ座標系全体は1つの矩形として表現でき、その境界線は(Xmin, Ymin)および(Xmax, Ymax)として指定します(Xminは座標系で許可される最小のX値、Yminは許可される最小のY値、Xmaxは許可される最大のX値、Ymaxは許可される最大のY値)。図3-7の場合、Xminは-180、Yminは-90、Xmaxは180、Ymaxは90です。
また、マップ・タイル・サーバーがマップ・スケールを計算できるように、座標系の空間参照ID (SRID)も指定する必要があります。
各マップ・タイルは、(Mx, My)という整数のペアとして定義されるメッシュ・コードによって指定します(MxはタイルのXディメンション・インデックス、MyはタイルのYディメンション・インデックスを指定する)。タイルがXminから始まるXディメンション上のi番目のタイルである場合、Mxはi-1になります。タイルがYminから始まるYディメンション上のj番目のタイルである場合、Myはj-1になります。マップ上のタイルのメッシュ・コードを、図3-8に示します。
JavaScriptマップ・クライアントは、Webブラウザにマップを表示するのに必要なタイルを自動的に計算し、メッシュ・コードを指定したリクエストをサーバーに送信します。メッシュ・コードはアプリケーションにとって透過的であり、アプリケーションの開発者はメッシュ・コードを直接取り扱う必要がありません。
マップ・タイル・サーバーは、マップ・タイル・リクエストを処理します。マップ・タイル・リクエストは、キー/値ペア形式またはREST形式になります。
キー/値ペア形式のマップ・タイル・リクエスト
たとえば、データソースDS_NAMEにタイル層TL_NAMEがある場合、ズーム・レベル2およびメッシュ・コード(3.2)のマップ・タイル画像をPNG形式で取得するには、URLの形式を次のようにします。
http://localhost:8080/mapviewer/mcserver?request=gettile&format=PNG&zoomlevel=2&mapcache=DS_NAME.TL_NAME&mx=3&my=2
REST形式のマップ・タイル・リクエスト
REST形式のリクエストの一般的な形式は、次のとおりです。
http://localhost:8080/mapviewer/mcserver/DS_NAME/TL_NAME/{zoom}/{row}/{column}.png
たとえば、前述のキー/値ペアの例に示したマップ・タイル・リクエストと同じリクエストをREST形式で送信する場合、URLは次のようになります。
http://localhost:8080/mapviewer/mcserver/DS_NAME/TL_NAME/2/1/3.png
キー/値ペア形式のメッシュ・コードには左下隅の原点がありますが、REST形式ではタイルの行と列をリクエストするため原点が右上隅にあります。この2つの形式は異なる原点を持つため、my
とrow
値は異なりますが、mx
値とcolumn
値は同じになります。
通常、マップ・タイル・リクエストは、MapViewer JavaScript APIでカプセル化されるため、そのAPIがマップ・タイル・リクエストを処理します。ただし、サード・パーティ製のJavaScript APIを使用してMapViewerサーバーと通信している場合は、対象のアプリケーションでマップ・タイル・リクエストの形式を指定する必要があります。たとえば、Leaflet JavaScript APIを使用してMapViewerからマップ・タイルを取得する場合は、次に示すように、L.tileLayer
のURLテンプレートを設定する必要があります。
http://localhost:8080/mapviewer/mcserver/DS_NAME/TL_NAME/{z}/{y}/{x}.png.
マップの分割方法およびタイルの作成方法を決めるタイル処理ルールを作成する必要があります。マップ・タイル・サーバーは、そのようなタイル処理ルールを使用してマップを小さなマップ画像タイルに分割し、タイル・ストレージ・システムに格納します。そのようなルールは、JavaScriptマップ・クライアントも使用します。
1つのズーム・レベルに対応するタイルはすべて同じサイズなので、マップ・タイル・サーバーはタイルの分割を実行するために次の情報を必要とします。
画面ピクセルで指定したマップ・タイル画像のサイズ(幅と高さ)。これは、タイル画像の物理サイズです。
マップ座標系に従って指定されたタイル・サイズ。たとえば、マップで測地座標系を使用する場合、タイルの幅と高さは度の単位で指定します。このサイズは、タイルの幅と高さを使用して明示的に指定することもできますし、マップ・スケールを使用して暗黙的に指定することもできます。(マップ・スケールとタイル画像のサイズから、マップ座標系に従ってタイルの幅と高さを求めることができます。)
先の情報が、ズーム・レベルに対応するタイル処理ルールになります。どのズーム・レベルも、独自のタイル処理ルールを持つ必要があります。マップ・タイル・サーバーに対して構成設定を指定する場合は、3.3.2項で示すように、タイル処理ルールを定義する必要があります。
タイル層メタデータ定義には、タイルの色に影響を与える2つの属性があります。それらは、bgcolor
(背景色)とout_of_bounds_color
(範囲外の色)です。bgcolor
属性の値はタイル層の有効データ領域内の塗りつぶしに使用され(有効データ領域はminX, minY, maxY, maxY
で定義される)、out_of_bounds_color
属性の値は有効データ領域の外側にある領域の塗りつぶしに使用されます。これらの属性のデフォルト値は同じです(Color(192, 192, 192)
)。
タイルを生成しようとした時点で例外によりタイルのフェッチ・プロセスが失敗した場合、有効データ領域内かどうかにかかわらず、範囲外の色で塗りつぶされたタイルがその代替として使用されます。ただし、このようなタイル・フェッチ処理の例外による代替タイルは、ディスクに永続的に保存されず、むしろ、一時的にクライアントにストリーミングされます。クライアント・ブラウザのキャッシュ内の一時タイル・データがパージされるか、別のクライアントがリクエストを開始した場合、後続のリクエストでタイル生成が再試行されます。
bgcolor
をnone
に設定すると、タイルは透明になります。つまり、bgcolor
およびout_of_bounds_color
の両方の属性値がHTMLページの背景色によって置換されます。
マップ・タイル・サーバーの構成設定は、ローカルな構成ファイルおよびデータベース・ビューに格納されています。それらの設定は、カスタマイズが可能です。
関連項目:
ロギング・オプションやデフォルトのキャッシュ・ストレージ・ディレクトリといったマップ・タイル・サーバーのグローバル設定は、MapViewer構成ファイルmapViewerConfig.xml
(ディレクトリ$MAPVIEWER_HOME
/web/WEB-INF/conf
の下)に格納されています。
マップ・タイル・サーバーの構成設定は、次の例で示すように、トップレベルの<mapperConfig>
要素の中の<map_tile_server>
要素で定義されています。
<map_tile_server> <tile_storage default_root_path="/scratch/tilecache/"/> </map_tile_server>
<
tile_storage>
要素は、マップ・タイル・ストレージについての設定を指定します。default_root_path
属性では、キャッシングされたタイル画像が格納されるデフォルトのファイル・システム・ディレクトリを指定します。デフォルトのルート・ディレクトリは、設定されていない場合または有効でない場合、$MAPVIEWER_HOME
/web/tilecache
になります。マップ・タイル層の構成でそれ自体のマップ・タイル・ストレージ・ディレクトリが指定されていない場合は、今示したディレクトリの下にサブディレクトリが1つ作成され、マップ・タイル層用に使用されます。このサブディレクトリの名前は、マップ・タイル層の名前と同じになります。
マップ・タイル層の構成設定は、メタデータ・ビューUSER_SDO_CACHED_MAPSに格納されています。詳細は、2.9.4項を参照してください。通常、このビューは直接操作せず、MapViewer管理ツールを介して使用して、マップ・タイル層を構成します。
どのデータベース・ユーザー(スキーマ)も、独自のUSER_SDO_CACHED_MAPSビューを持ちます。このビュー内の各エントリには、各マップ・タイル層の構成設定が格納されます。マップ・タイル層がMapViewerの内部ベース・マップまたはテーマに基づいている場合、そのマップ・タイル層に関連付けられているベース・マップまたはテーマは、マップ・タイル層の構成設定が保存されている場所と同じデータベース・スキーマで定義されている必要があります。
マップ・タイル・サーバーは、MapViewerデータソースによって指定されているデータベース接続を使用してUSER_SDO_CACHED_MAPSビューに問合せを実行し、マップ・ソースの構成を取得します。この処理は、MapViewerの管理リクエストの結果としてマップ・タイル・サーバーが起動された場合またはMapViewerに新しいデータソースが追加された場合に実行されます。
USER_SDO_CACHED_MAPSビューのDEFINITION列については、マップ・ソース定義に次の一般的な形式があります。
<map_tile_layer name = "map tile layer name" image_format ="tile-image-format"> <internal_map_source data_source="name-of-data-source" base_map="name-of-MapViewer-base-map" bgcolor="base-map-background-color" antialias="whether-to-turn-on-antialiasing" /> </internal_map_source> <external_map_source url="external-map-service-url" adapter_class="name-of-adapter-class" proxy_host=" proxy-server-host " proxy_port="proxy-server-port" timeout="request-timeout" request_method="http-request-method: 'GET'|'POST'"> <properties> <property name="property-name" value="property-value"/> … </properties> </external_map_source> <tile_storage root_path="disk-path-of-cache-root-directory" </tile_storage> <coordinate_system srid="coordinate-system-srid" minX="minimum-allowed-X-value" maxX="maximum-allowed-X-value" minY="minimum-allowed-Y-value" maxY="maximum-allowed-Y-value"> </coordinate_system> <tile_image width="tile-image-width-in-screen-pixels" height="tile-image-height-in-screen-pixels" > </tile_image> <tile_bound> <coordinates> … </coordinates> </tile_bound> <zoom_levels levels="number-of-zoom-levels" min_scale="map-scale-at-highest-zoom-level" max_scale="map-scale-at-lowest-zoom-level" min_tile_width="tile-width-specified-in-map-data-units-at- highest-zoom-level" max_tile_width="tile-width-specified-in-map-data-units-at- lowest-zoom-level"> <zoom_level description="zoom-level-description" level_name="zoom-level-name" scale="map-scale-of-zoom-level" tile_width ="tile-width-specified-in-map-data-units" tile_height ="tile-height-specified-in-map-data-units"> <tile_bound> <coordinates> … </coordinates> </tile_bound> </zoom_level> … </zoom_levels> </map_tile_layer>
マップ・タイル層を定義するXMLのDTDは、A.9項にリストされています。
例3-27は、ベース・マップに基づいた内部マップ・タイル層のXML定義を示しています。例3-28は、ベース・マップではなくテーマに基づいた内部マップ・タイル層のXML定義を示しています。また、例3-29は、外部マップ・タイル層のXML定義を示しています。<map_tile_layer>
要素およびそのサブ要素の説明は、これらの例の後に示します。
例3-27 ベース・マップに基づいた内部マップ・タイル層のXML定義
<?xml version = '1.0'?> <!-- XML definition of an internal map tile layer. --> <map_tile_layer image_format="PNG"> <internal_map_source base_map="demo_map"/> <tile_storage root_path="/scratch/mapcache/"/> <coordinate_system srid="8307" minX="-180" maxX="180" minY="-90" maxY="90"/> <tile_image width="250" height="250"/> <zoom_levels> <zoom_level description="continent level" scale="10000000"/> <zoom_level description="country level" scale="3000000"/> <zoom_level description="state level" scale="1000000"/> <zoom_level description="county level" scale="300000"/> <zoom_level description="city level" scale="100000"/> <zoom_level description="street level" scale="30000"/> <zoom_level description="local street level" scale="10000"/> </zoom_levels> </map_tile_layer>
例3-28 テーマに基づいた内部マップ・タイル層のXML定義
<?xml version = '1.0' encoding = 'UTF-8'?> <map_tile_layer name="TL1" image_format="PNG" http_header_expires="168.0" utfgrid="true" utfgrid_resolution="4" concurrent_fetching_threads="3"> <internal_map_source data_source="MVDEMO" bgcolor="none" out_of_bounds_color="#ffffff" base_map="" db_tile_table=""/> <tile_storage root_path="/temp" xyz_storage_scheme="true"/> <coordinate_system srid="3857" minX="-2.0037508E7" minY="-2.0037508E7" maxX="2.0037508E7" maxY="2.0037508E7"/> <tile_image width="256" height="256"/> <tile_dpi value="90.714"/> <tile_meters_per_unit value="1.0"/> <zoom_levels levels="19" min_scale="2132.72958384" max_scale="5.59082264028E8" min_tile_width="152.874538064" max_tile_width="4.00751429065E7"> <zoom_level level="0" name="level0" tile_width="4.00751429065E7" tile_height="4.00751429065E7"/> <zoom_level level="1" name="level1" tile_width="2.003757145325E7" tile_height="2.003757145325E7"/> <zoom_level level="2" name="level2" tile_width="1.0018785726625258E7" tile_height="1.001878572662E7"/> <zoom_level level="3" name="level3" tile_width="5009392.86331" tile_height="5009392.86331"/> <zoom_level level="4" name="level4" tile_width="2504696.431656" tile_height="2504696.431656"/> <zoom_level level="5" name="level5" tile_width="1252348.215828" tile_height="1252348.215828"/> <zoom_level level="6" name="level6" tile_width="626174.1079140786" tile_height="626174.107914"/> <zoom_level level="7" name="level7" tile_width="313087.0539570393" tile_height="313087.053957"/> <zoom_level level="8" name="level8" tile_width="156543.5269785" tile_height="156543.5269785"/> <zoom_level level="9" name="level9" tile_width="78271.763489" tile_height="78271.763489"/> <zoom_level level="10" name="level10" tile_width="39135.8817446" tile_height="39135.8817446"/> <zoom_level level="11" name="level11" tile_width="19567.9408723" tile_height="19567.9408723"/> <zoom_level level="12" name="level12" tile_width="9783.9704361" tile_height="9783.9704361"/> <zoom_level level="13" name="level13" tile_width="4891.9852180" tile_height="4891.9852180"/> <zoom_level level="14" name="level14" tile_width="2445.9926090" tile_height="2445.99260903"/> <zoom_level level="15" name="level15" tile_width="1222.99630451" tile_height="1222.99630451"/> <zoom_level level="16" name="level16" tile_width="611.49815225" tile_height="611.49815225"/> <zoom_level level="17" name="level17" tile_width="305.74907612" tile_height="305.74907612"/> <zoom_level level="18" name="level18" tile_width="152.87453806" tile_height="152.87453806"/> </zoom_levels> <auto_update finest_level_to_refresh="13" dirty_mbr_batch="100" dirty_mbr_cap="1000"> <dirty_mbr_table name="TL1MBR"/> <logtable name="TL1LOG"/> </auto_update> <themes> <theme name="UTFGRID_THEME_DEMO_STATES" from_level="0" to_level="18"/> <theme name="UTFGRID_THEME_DEMO_COUNTIES" from_level="0" to_level="18"/> <theme name="UTFGRID_THEME_DEMO_HIGHWAYS" from_level="0" to_level="18"/> <theme name="UTFGRID_THEME_DEMO_CITIES" from_level="0" to_level="18"/> </themes> </map_tile_layer>
例3-29 外部マップ・タイル層のXML定義
<?xml version = '1.0'?> <!-- XML definition of an external map tile layer.--> <map_tile_layer name="TILELAYER1" image_format="PNG"> <external_map_source url="http://mycorp.com:7001/mapviewer/wms/" request_method="GET" adapter_class="oracle.lbs.mapcache.adapter.WMSAdapter" adapter_class_path=""> <properties> <property name="datasource" value="mvdemo"/> <property name="version" value="1.1.1"/> <property name="srs" value="EPSG:4326"/> <property name="layers" value="THEME_DEMO_COUNTIES,THEME_DEMO_HIGHWAYS"/> <property name="format" value="image/png"/> <property name="transparent" value="true"/> </properties> </external_map_source> <tile_storage root_path="/scratch/tmp/"/> <coordinate_system srid="8307" minX="-180.0" minY="-90.0" maxX="180.0" maxY="90.0"/> <tile_image width="256" height="256"/> <!— The following <zoom_levels> element does not have any <zoom_level> element inside it. But since it has its levels, min_scale and max_scale attributes set, map tile server will automatically generate the <zoom_level> elements for the 10 zoom levels. --> <zoom_levels levels="10" min_scale="1000.0" max_scale="2.5E8"> </zoom_levels> </map_tile_layer>
トップレベルの要素は<map_tile_layer>
です。image_format
属性ではタイル画像の形式を指定しますが、この属性で現在サポートされている値はPNG
、GIF
およびJPG
です。PNGおよびGIFの画像は一般に、ベクター・ベースのマップに適しています。一方、JPG画像は、圧縮率に優れているので、一般に衛星画像のようなラスター・マップに適しています。現在は、PNG形式のタイル画像のみ、バックグラウンドを透明にできます。
http_header_expires
属性には、キャッシュされたタイル層が失効と見なされるまでの時間数を指定します。
utfgrid
属性は、true
に設定されている場合に、イメージ・ファイルのコンパニオンUTFGridデータセットが生成されることを示します。(デフォルト値はfalse
です)
utfgrid_resolution
属性では、画像タイルと比較した場合のグリッド・データの精細度を指定します。たとえば、4の値(デフォルト)は、1つのグリッド・セルがコンパニオン画像タイルの4x4ピクセルを表すことを意味します。
concurrent_fetching_threads
属性では、このタイル層にフェッチする画像タイルに対して作成される可能性のある同時タイル・フェッチ・スレッドの最大数を定義します。(デフォルト値は3です)
fetch_larger_tile
属性は、true
(デフォルト)に設定されている場合、キャッシュ内でタイルが使用できないときには、そのタイルの隣接タイルも生成することをサーバーに通知します。要求されたタイルがキャッシュ内ですでに使用できる場合は、このパラメータがgetTile
のパフォーマンスに影響を与えることはありません。デフォルト設定(true
)は、サーバーのレスポンス時間の短縮に向いています。
persistent_tiles
属性は、true
(デフォルト)の場合、画像タイルがサーバーのディスク・キャッシュに保存されることを指定します。この属性をfalseに設定すると、getTileリクエストごとにMapViewerサーバーの画像タイル・レンダリング・プロセスが起動され、新しく取得した画像タイルは今後の使用のためにキャッシュされなくなります。false
を指定する可能性のある状況には、(A) GeoRasterテーマがタイル層で使用されていて、MapViewerのディスク・キャッシュにラスター画像が複製されないようにする場合、または(B)タイル・サーバーが常に最新の画像タイルを提供するようにする場合があります。
<internal_map_source>
要素は、マップ・タイルがMapViewerのローカル・インスタンスによってレンダリングされる場合にのみ必須です。
base_map
属性は、必須であり、マップ・タイル・サーバーによってキャッシングされる事前定義済のMapViewerベース・マップを指定します。その値は、USER_SDO_CACHED_MAPSビュー内のBASE_MAP列のエントリに一致する必要があります。
bgcolor
属性は、オプションであり、マップの背景色を指定します。この属性の値をNONE
に設定すると、バックグラウンドは透明になります。(現時点では、背景を透明にできるタイル画像はPNG形式のみです)。
out_of_bounds_color
属性は、オプションです。この属性では、データ境界の外側の領域の色を指定します。データ境界は、<coordinate_system>
要素の属性で指定されます。
db_tile_table
属性はオプションです。この属性では、タイル層の画像タイルをキャッシュするデータベース表を指定します。この属性が指定されていない場合、タイルはMapViewerのディスク・キャッシュにキャッシュされます。
<external_map_source>
要素は、マップ・タイルが外部マップ・サービス・プロバイダによってレンダリングされる場合にのみ必須です。この要素には、次の属性があります。
url
属性は、必須であり、マップ・タイルをフェッチできるマップ・サービスのURL (http://myhost/mapviewer/omserver
など)を指定します。
adapter_class
属性は、必須であり、パッケージ名が含まれる、マップ・アダプタ・クラスのフルネーム(mcsadapter.MVAdapter
など)を指定します。
proxy_host
属性およびproxy_port
属性は、プロキシ・サーバーを介して外部マップ・プロバイダ・サーバーにアクセスする必要がある場合にのみ必要であり、それぞれプロキシ・サーバーのホスト名およびポート番号を指定します。proxy_host
をNONE
として指定すると、マップ・タイル・リクエストはすべて、プロキシ・サーバーを経由することなく、リモート・サーバーに直接送信されます。proxy_host
を省略するか、空白を指定すると、マップ・タイル・リクエストの送信時に、mapViewerConfig.xmlファイル
で定義されているMapViewerのグローバル・プロキシ設定が使用されます。
timeout
属性は、オプションであり、外部マップ・タイル画像に対するマップ・タイル・サーバーの最大待ち時間(ミリ秒数)を指定します。デフォルトのタイムアウト値は15000です。
request_method
属性は、オプションであり、マップ・タイル・リクエストを送信する場合のHTTPリクエスト・メソッドです。その値は、POST
(デフォルト)またはGET
です。
外部マップ・タイル層の詳細および例は、3.3.2.4項「外部Webマップ・ソースによるマップ・タイル層の作成」を参照してください。
<external_map_source>
要素内の<properties>要素には<property>
要素を複数含めることができ、そのそれぞれではマップ・タイルをフェッチする際にマップ・アダプタが使用する各ユーザー定義パラメータを指定します。マップ・ソース・アダプタが同一でも、別々のパラメータ・セットを使用すれば、別々のマップ・タイル層をフェッチできます。たとえば、MapViewerに同梱されているサンプルのMapViewerアダプタmcsadapter.MVAdapter
では、次のように定義されているパラメータを受け付けます。
<properties> <property name="data_source" value="elocation"/> <property name="base_map" value="us_base_map"/> </properties>
ただし、このアダプタを使用する場合は、value
属性の値を変更すれば、同一のデータソースまたは他のデータソースから、別のベース・マップをフェッチできます。
<tile_storage>
要素は、マップ・タイル層のストレージ設定を指定します。
オプションのroot_path
属性では、タイル・ストレージのルート・ディレクトリとして使用するファイル・システム・ディレクトリを指定します。この属性が省略されているか無効であると、mapViewerConfig.xml
ファイルで定義されているデフォルトのルート・ディレクトリが使用されます。
オプションのxyz_storage_scheme
要素では、マップ・タイルのディレクトリ構造がディスク・キャッシュで編成される方法を制御します。デフォルト値(false
)にすると、MapViewerの内部メッシュ・コード・ストレージ・スキームが使用されます。値がtrue
の場合は、XYZストレージ・スキームが使用されます。詳細は、3.3.2.3項「マップ・タイルのストレージ・スキーム: 内部メッシュ・コードまたはXYZ」を参照してください。
<coordinate_system>
要素は、マップ座標系を指定し、いくつかの必須属性があります。srid
属性では、座標系の空間参照IDを指定します。minX
属性ではXディメンションの下限、minY
属性ではYディメンションの下限、maxX
属性ではXディメンションの上限、maxY
属性ではYディメンションの上限を指定します。標準の経度/緯度(WGS 84)座標系の場合、srid
値は8307で、minX
、minY
、maxX
およびmaxY
の値はそれぞれ-180、-90、180および90です。
内部マップ・タイル層の場合、マップ座標系はデータ座標系と異なっていてもかまいません。それらが異なっている場合、マップ・タイル・サーバーでは<coordinate_system>
要素で定義されている座標系にマップ・データを変換し、その座標系を使用してマップ・タイル画像をレンダリングします。
<tile_image>
要素は、タイル画像のサイズ設定を指定します。この属性には、タイル画像の幅を画面のピクセル数で指定するwidth
属性と、タイル画像の高さを画面のピクセル数で指定するheight
属性が必須です。
オプションの<tile_bound>
要素では、キャッシングされたマップ・タイルの枠ボックスを指定します。マップ・タイル・サーバーでは、このボックス内のタイルのみをフェッチし、リクエストされたタイルがこのボックスの外部にある場合は空白のタイルを返します。枠ボックスは、マップ・データ座標系内で矩形によって指定します。該当する矩形は、<coordinates>
要素により、次の形式で指定します。
<coordinates>minX, minY, maxX, maxY</coordinates>
キャッシュのデフォルトの枠ボックスは、<coordinate_system>
要素で指定される枠ボックスと同じです。
オプションの<tile_dpi>
要素では、マップ表示画面の解像度を"ドット/インチ(DPI)"の値として指定します。この要素が指定されていない場合は、mapViewerConfig.xmlファイルで指定されている値がタイル層に割り当てられます。MapViewerがWMTSサービスでタイル層を公開する際にOGC標準に準拠する必要がある場合は、この要素を値90.714
で指定する必要があります。
オプションの<tile_meters_per_unit>
要素では、単位あたりのメートル数を指定します。この単位は、<coordinate_system>
要素のsrid
属性で間接的に定義されます。たとえば、srid
が3857の場合、単位はメートル数になるため、この属性の値は1.0にする必要があります。また、srid
が8307の場合、単位は10進表記の度数になるため、この値を111319.49に設定できます。この要素が指定されていない場合、MapViewerの内部プロセスはデータ範囲に従って値を計算します。計算結果は、111319.49に非常に近い値になります。このタイル層がWMTSサービスを提供するためにMapViewerによって公開されるときに、srid
が8307の場合は、OGC標準に準拠するように、この要素の値を111319.49に設定する必要があります。
<zoom_levels>
要素では、事前定義済のズーム・レベルを指定します。事前定義済のズーム・レベルにある画像タイルのみが、マップ・タイル・サーバーによってキャッシングされ、表示されます。<zoom_levels>
要素で持つことができる複数の<zoom_level>
要素のそれぞれでは、事前定義済の1つのズーム・レベルを指定します。<zoom_level>
要素が存在しない場合、マップ・タイル・サーバーは<zoom_levels>
要素内の次の属性を使用して、<zoom_level>
要素を自動的に生成します。(それらの属性は、省略が可能であり、いずれかの<zoom_level>
要素が存在する場合は無視されます。)
levels
では、ズーム・レベルの総数を指定します。
min_scale
では、最高のズーム・レベル(最もズーム・インしたレベル)にあるマップ画像のスケールを指定します。
max_scale
では、最低のズーム・レベル(最もズーム・アウトしたレベル)にあるマップ画像のスケールを指定します。
min_tile_width
では、最高のズーム・レベルにあるマップ・タイルの幅を指定します。この幅は、マップ・データ単位で指定します。
max_tile_width
では、最低のズーム・レベルにあるマップ・タイルの幅を指定します。この幅は、マップ・データ単位で指定します。
各ズーム・レベルの定義をマップ・タイル・サーバーが自動的に生成できるようにするには、前述の属性を次のように組み合せて指定する必要があります。
levels
、min_scale
およびmax_scale
levels
、min_tile_width
およびmax_tile_width
ズーム・レベルをこのように定義すると、マップ・タイル・サーバーは各ズーム・レベルの定義をすべて自動的に導出し、それらのズーム・レベルで生成された<zoom_level>
要素を使用してXML定義を更新します。各ズーム・レベルはその後、必要に応じて調整できます。
各ズーム・レベルには、ズーム・レベルの定義順に基づいて、マップ・タイル・サーバーによりズーム・レベル番号が割り当てられます。<zoom_levels>
要素内で定義される最初のズーム・レベルはズーム・レベル0、2番目のズーム・レベルはズーム・レベル1、...のようになります。これらのズーム・レベル番号は、事前定義済のズーム・レベルを参照するために、タイル・リクエスト内で使用されます。
<zoom_level>
要素は、事前定義済のズーム・レベルを指定し、いくつかの属性を持ちます。description
属性は、オプションであり、ズーム・レベルの説明文を指定します。level_name
属性は、オプションであり、ズーム・レベルの名前を指定します。scale
属性は、ズーム・レベルのマップ・スケールを指定し、tile_width
属性およびtile_height
属性が定義されていない場合は必須です。tile_width
属性およびtile_height
属性ではそれぞれ、タイルの幅および高さをマップ・データ単位で指定します。fetch_larger_tiles
属性は、オプションであり、小さなマップ画像タイルのかわりに大きなマップ画像をフェッチするかどうかを指定します。値がTRUE
(デフォルト)の場合は、複数のマップ・タイルから構成される大きなマップ画像がフェッチされ、小さなマップ画像タイルに分割されます。そのため、マップ・タイル・サーバーとマップ・サービス・プロバイダの間のネットワーク・ラウンドトリップを抑えられます。
<zoom_level>
要素では、scale
属性か、tile_width
要素およびtile_height
要素の両方を指定する必要があります。
<zoom_level>
要素内の<tile_bound>
要素では、ズーム・レベルに合せてキャッシュされたマップ・タイルの枠ボックスを指定します(オプション)。マップ・タイル・サーバーでは、このボックス内のタイルのみをフェッチし、リクエストされたタイルがこのボックスの外部にある場合は空白のタイルを返します。枠ボックスは、マップ・データ座標系内で指定された矩形によって指定します。該当する矩形は、このトピックで説明した<coordinates>
要素で指定します。<zoom_level>
要素内で<tile_bound>
要素を指定すると、XML階層内で上位にある<tile_bound>
要素で指定されているキャッシュの枠ボックスの設定全体がオーバーライドされます。
<auto_update>
要素では、実表の空間データが変更されたときにタイル層のディスク・キャッシュが自動的に更新される方法を定義します。詳細は、3.3.3.2項「タイル層定義への<auto_update>要素の追加」を参照してください。
<themes>
要素では、テーマに基づいて層を定義します(ベース・マップに基づいた層と対照的な定義)。画像タイルのレンダリングに使用されるテーマは、この要素のサブ要素にリストします。各サブ要素<theme>
には、メタデータで事前定義済テーマを指定するためのname
属性が必要になります。それ以外の2つのオプションの属性from_level
とto_level
では、そのテーマの可視性を定義します。これら2つの属性のデフォルト値は、from_level
が0 (最も少ないマップ詳細が含まれる)、to_level
が最後のレベル(最も多いマップ詳細が含まれる)です。
<file_storage>
要素(3.3.2.2項を参照)のxyz_storage_scheme
属性では、マップ・タイルのディレクトリ構造がディスク・キャッシュで編成される方法を制御します。デフォルトのスキームでは、MapViewerの内部メッシュ・コードが使用されますが、XYZストレージ・スキームをかわりに選択することもできます。
図3-9は、両方のストレージ・スキームを示しています。
MapViewerの内部メッシュ・コードの詳細は、ユーザーにとって重要ではありません。理解しておく必要があることは、2つの異なるストレージ・スキームのオプションがあり、XYZストレージ・スキームは複数のマップ・データ・プロバイダが使用しているスキームと似ているということです。そのため、オフライン・プロジェクト(ローカル・タイル層)用に複数のズーム・レベルのタイルをエクスポートする場合、XYZストレージ・スキームのほうが直感的であると考えた場合は、それを指定してください。
MapViewerのXYZストレージ・スキームでは、サブディレクトリの名前が/z/y/x
という形式で付けられます。z
はズーム・レベル、y
はタイルの行番号、およびx
はタイルの列番号になります。たとえば、図3-9では、MapViewerのXYXストレージ・スキームは、ズーム・レベル8、タイル行33のタイル列に含まれる画像(74.png
、75.png
、76,png
、77.png
)を示しています。
外部Webマップ・ソースを使用してマップ・タイル層を作成するには、次のようにします。
MapViewer管理コンソールにログインします。
「タイル層の作成」をクリックします。
このタイル層のマップ画像ソースとして「外部」を選択し、「続行」をクリックします。
外部マップ・ソースのマップ・タイル層の作成 ページで、適切な情報を入力します。
名前:タイル層の名前。例: TILELAYER1
データソース:タイル層のデータソース名。例: MVDEMO
ブラウザのタイル・キャッシュの最大期間(時間):タイルをリフレッシュするまでの最大時間(時間単位)。例: 168
マップ・サービスのURL:例: http://mycorp.com:7001/mapviewer/wms
リクエスト・メソッド: HTTP GET
アダプタ・クラス: oracle.lbs.mapcache.adapter.WMSAdapter
JARファイルの場所:例: adapterlibs/
背景: transparent
アダプタ・プロパティ: (選択し、次の値を入力するたびに「追加」を必要に応じて複数回クリックします。)
datasource: 例: mvdemo
version: 1.1.1
srs: EPSG:4326
layers:例: THEME_DEMO_COUNTIES,THEME_DEMO_HIGHWAYS
format: image/png
transparent: true
タイル・ストレージ:例: C:\temp
SRID: 8307
最小X: -180.0
最大X: 180.0
最小Y: -90.0
最大Y: 90.0
タイルの幅(ピクセル): 256
タイルの高さ(ピクセル): 256
ファイル形式: PNG
ズーム・レベル数: 10
最小マップ・スケール: 1000
最大マップ・スケール: 250000000
「送信」をクリックして、タイル層を作成します。
情報: 新しいマップ・タイル層が正常に作成されましたというメッセージが表示されます。
作成された層を確認するには、左側の「タイル層の管理」をクリックし、タイル層を選択し、「マップの表示」→「タイルの管理」をクリックしてマップをプレビューします。
マップ・キャッシュの自動更新機能は、ダーティになったキャッシュ・マップ・タイルを定期的に更新します。キャッシュ・マップ・タイルは、更新、挿入または削除操作によって実表内のデータが変更されるとダーティになります。それは、このような変更が、すでにキャッシュされているマップ・タイルの図形、注釈またはレンダリング・スタイルの選択に影響を与える可能性があるからです。ダーティ・タイルの更新は、次のいずれかの操作を呼び出します: a)リフレッシュ:キャッシュされたダーティ・タイルを削除した後、それらを再フェッチ。または、b)クリア:キャッシュされたダーティ・タイルの削除のみ。タイル層の自動更新を有効にするには、次の主要手順を実行します。
タイルの自動更新をテストする場合は、3.3.3.4項「MapViewerサーバーの起動およびマップ・キャッシュの自動更新機能のテスト」の説明を参照してください。
<dirty_tile_auto_update>
要素を<map_tile_server>
要素の子要素として追加します。次に例を示します。
<map_tile_server> <tile_storage default_root_path="/scratch/tilecache/"/> <dirty_tile_auto_update auto_update="true" auto_update_interval="1" recycle_interval="168"/> </map_tile_server>
auto_update
属性をtrue
に設定すると、サーバーの自動更新が有効になります(デフォルトはfalse
)。この属性をtrue
に設定した場合、サーバー上のすべての適格なタイル層が自動的に更新されます。適格となるには、タイル層が適切に定義されている必要があります(3.3.3.2項を参照)。
auto_update_interval
属性は、実表のログ表およびダーティMBR表のチェックを繰り返す間隔を設定します。この値は分単位であり、デフォルト値は1です。この値は数分以下にし、実表の更新頻度が非常に少ない場合でも(日次または週次など)、大きい値にしないでください。実表のログ表およびダーティなMBR表は、MapViewerサーバーを起動する前に作成されている必要があります。この2つの表および関連シーケンスおよびトリガーを作成するサンプル・スクリプトは、3.3.3.3項に含まれています。
recycle_interval
属性は、処理された行をログ表およびダーティなMBR表に保持する期間を指定します。この値は時単位の時間であり、デフォルト値は168です。これより古くなると、処理された行は削除されます。
MapViewerが起動されると、mapViewerConfig.xml
構成ファイルから<dirty_tile_auto_update>
要素がロードされ、そのサーバーのすべてのタイル層に適用されます。この要素が見つからない場合、サーバーのタイル層の自動更新機能は無効になります。
<auto_update>
要素は、タイル層定義の<zoom_levels>
要素の後に追加します。この要素を追加するには、手動で行うかMapViewer Webコンソールを使用します。次に例を示します。
<auto_update finest_level_to_refresh="15" dirty_mbr_batch="100" dirty_mbr_cap="1000"> <dirty_mbr_table name="mbr_mcau"/> <logtable name="log_mcau_tl"/> </auto_update>
finest_level_to_refresh
属性は、リフレッシュの対象となる最も詳細なレベルを指定します。レベル0から始まり、この指定されたレベルまでがリフレッシュの対象となり(レベル0、レベル1、レベル2、…)、残りのズーム・レベルではダーティなタイルが消去されます。飲食店の店名変更や新たに開発された道路の挿入など、実表でのデータ修正が地理的に小さい地物であることが多い場合(ほとんどのデータ修正がそうであるように)、この値はタイル層の定義で見つかった最も詳細なズーム・レベルにすることができます。たとえば、0から18までの19のズーム・レベルがある場合は、この属性を18に設定できます。
dirty_mbr_batch
属性は、更新するダーティなMBR表からの最大行数を指定します。デフォルト値は100です。この値は、サーバーが一度に大量のタイルを更新するのを防ぎます。大量のダーティ・タイルのリフレッシュまたはクリア操作が必要な場合、それらのタイルは多くの更新で処理され、1つの間隔で処理されるのは1バッチのみです。この属性の最適値を決定するには、次の要素を考慮してください。
auto_update_interval
の値(3.3.3.1項を参照)およびその間にサーバーが完了できるタイル数
サーバーで使用できるメモリー量
マップ・キャッシュの自動更新が有効なタイル層の数およびそれらの実表での変更の頻度と規模
dirty_mbr_batch
の最適値を正確に計算できる式がないため、ベスト・プラクティスは、様々な設定をテストする環境をセットアップすることです。値を選択するときは、最悪のシナリオを考慮します。回避する2つの極端なシナリオは、a)値が非常に小さいためにリフレッシュ操作の終了後にサーバーがアイドル状態になっているが、ダーティMBR表のダーティMBR行の数が増加し続けるシナリオ、またはb)値が非常に大きいためにサーバーがメモリー不足になり、メモリー不足例外をスローし、すべてのサービスが停止するシナリオです。
dirty_mbr_cap
属性は、ログ表が1つの間隔で生成するダーティ・タイルの最大数を指定します。この制約は、リフレッシュ操作のための最も詳細なズーム・レベル、およびクリア操作に設定される残りのズーム・レベルに影響を与える場合があります。ダーティ・タイルの累積カウンタは、ズーム・レベル0から始まり、上限に達するかリフレッシュする最も詳細なレベルに達するまで、レベル1、レベル2へとカウントし続けます。
リフレッシュ用に指定された最も詳細なレベルに到達する前にレベルnで上限に到達した場合、すでにカウントされているレベル0、レベル1、レベル2、…、およびレベルn-1のタイルはリフレッシュ操作の対象となり(削除後に再フェッチ)、現在のズーム・レベル(この例ではレベルn)およびこれより詳細な他のすべてのレベルはクリア操作の対象となります(マップ・タイル・キャッシュから削除され、再フェッチなし)。たとえば、上限値が1000であり、ダーティ・タイル・カウンタがズーム・レベル4で上限に到達した場合、レベル0からレベル3までのすべてのカウント済ダーティ・タイルがリフレッシュの対象となります。その後、レベル3の各ダーティ・タイルは矩形(タイルが地面を覆う矩形領域)を定義するために使用され、この矩形は、レベル4から始まりレベル5およびこのタイル層内の他のすべてのより詳細なズーム・レベルをクリアするためのMBRとされます。
<dirty_mbr_table>
要素は、ダーティなMBRの表名を指定します。ダーティMBRはこの表に保存、取得および更新されます。MapViewerサーバーを起動する前に、この表を手動で作成しておく必要があります(3.3.3.3項の例を参照)。
<logtable>
要素は、実表のログ表名を指定します。多くの場合がそうであるように、タイル層が複数の実表に依存している場合は、それぞれの実表内でのすべての変更を、そのトリガーによってこのログ表に挿入する必要があります。スキーマがmapViewerConfig.xmlで定義された複数のデータソースからアクセスされている場合は、実表内の1つの変更につき、各データソース用に1行を挿入する必要があります。
各タイル層が独自のログ表およびダーティMBR表を持つことをお薦めします。これらの表は、サーバーの起動前に手動で作成しておく必要があります(3.3.3.3項の例を参照)。
この項では、ダーティなMBR表、実表のログ表およびトリガーを作成するための処理の例を全体的に示します。この例のセグメントは、DEMO_MAPというベース・マップがすでに定義されており、スキーマにアクセスするMVDEMOという1つのデータソースが存在することを前提としています。
例のコード・セグメントには説明のコメントが含まれており、次の処理を実行します。
<auto_update>
要素を含むタイル層を作成します。
insert into user_sdo_cached_maps values( 'MCAU_TL', 'a test case for map cache auto update', '', 'YES', 'YES', '<map_tile_layer name="MCAU_TL" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3" fetch_larger_tiles="false"> <internal_map_source data_source="mvdemo" base_map="DEMO_MAP"/> <coordinate_system srid="8307" minX="-180.0" maxX="180.0" minY="-90.0" maxY="90.0"/> <tile_image width="256" height="256"/> <tile_dpi value="90.7142857"/> <tile_meters_per_unit value="111319.49079327358"/> <zoom_levels levels="19" min_scale="2132.729583849784" max_scale="559082264.0287178"> </zoom_levels> <auto_update finest_level_to_refresh="15" dirty_mbr_batch="100" dirty_mbr_cap="1000"> <dirty_mbr_table name="mbr_MCAU_TL"/> <logtable name="log_MCAU_TL"/> </auto_update> </map_tile_layer>', 'DEMO_MAP', ''); commit;
ダーティなMBR表およびそのトリガーを作成します。
ダーティなMBR表には、リフレッシュおよびクリア操作のためのダーティなMBRが格納されます。この表は、ログ表からジオメトリを使用して移入されます。この表のID列に一意のIDを生成するためにシーケンスおよびトリガーも作成されます。
-- create the dirty MBR table CREATE TABLE mbr_MCAU_TL ( -- dirty MBR table name id number, -- id, used for tracking the status datasource varchar2(32), -- data source name tile_layer varchar2(32), -- tile layer name logtable varchar2(32), -- basetable's log-table refresh_status varchar2(1), -- n: not refreshed, y: refreshed, p:pending, f: failed clear_status varchar2(1), -- n: not cleared, y: cleared, p:pending, f: failed mbr_to_clear varchar2(1), -- y/n: use tile's mbr for clearing finer levels zoom_level number, -- zoom level of this tile mx number, -- mesh x ordinate my number, -- mesh Y ordinate minx number, -- tile's minimum x coordinate miny number, -- tile's minimum y coordinate maxx number, -- tile's maximum x coordinate maxy number, -- tile's maximum y coordinate insert_time Date, -- when the tile MBR was inserted into this table update_time Date -- most recent update (refresh/clear) time ); -- create a sequence for mbr_MCAU_TL CREATE SEQUENCE mbr_MCAU_TL_seq START WITH 1 INCREMENT BY 1 CYCLE MAXVALUE 9999999999; -- create a trigger to get a unique id create or replace trigger mbr_MCAU_TL_br before insert on mbr_MCAU_TL -- before inserting the row referencing new as new old as old for each row -- for each row begin select mbr_MCAU_TL_seq.nextval INTO :new.id FROM dual; end; /
ログ表を作成します。
実表のログ表には、タイル層の実表で変更された行が記録されます。各タイル層はマップ・タイルの生成時にその実表内のデータに依存するため、実表に対する変更は(ジオメトリの変更や属性値に対する変更など)、対応するマップ・タイルの表示に影響する場合があります。このような変更は、実表に作成されたトリガーを通じて変更ログ表に記録されます。
次の文は、ログ表およびシーケンスを作成し、シーケンスを使用して一意のID値を生成して表のトリガーを作成します。
-- create the log table create table log_MCAU_TL( id number, geomO sdo_geometry, -- the affected geometry or its attributes, original geometry geomN sdo_geometry, -- the affected geometry or its attributes, new geometry modified Date, -- when the modified occurred status varchar2(1), -- y: processed, n: not processed datasource varchar2(32), -- data source name, more than one ds may access the same log tile_layer varchar2(32), -- tile layer name basetable varchar2(32) -- base table name, more than one base table may insert into this log ); -- create a sequence for log_MCAU_TL CREATE SEQUENCE log_MCAU_TL_seq START WITH 1 INCREMENT BY 1 CYCLE MAXVALUE 9999999999; -- create a trigger for log_MCAU_TL to create a unique id create or replace trigger log_MCAU_TL_br before insert on log_MCAU_TL -- before inserting referencing new as new old as old for each row -- for each row begin select log_MCAU_TL_seq.nextval INTO :new.id FROM dual; end; /
ログ表に変更を挿入するために各実表上のトリガーを作成します。
実表のトリガーでは、ログ表に挿入されたジオメトリはタイル層と同じ空間参照システム(座標系)に変換されます。mapViewerConfig.xml
構成ファイルに定義された複数のデータソースが同じスキーマにアクセスする場合は、各トリガーの定義でこれらのデータソースごとに1つのINSERT文を使用する必要があります。
次の文で想定されている事項は次のとおりです。
MVDEMOという1つのデータソースがMCAU_TLタイル層を含むスキーマにアクセスしています。(したがって、各トリガー定義のINSERT文は1つのみです。)
タイル層の空間参照システム(SRID)は8307 (WGS 84の緯度/経度)です。
このタイル層にはモニターする実表が4つあります(州、郡、州間および都市)。
--states trigger create or replace trigger states_MCAU_TL_ar after insert or update or delete on states -- any change referencing new as new old as old for each row when (old.geom IS NOT NULL OR new.geom IS NOT NULL) declare oldGeom SDO_GEOMETRY; newGeom SDO_GEOMETRY; tileSRID number; begin tileSRID := 8307; oldGeom := :old.geom; if (:old.geom IS NOT NULL) then if (:old.geom.SDO_SRID != tileSRID) then select sdo_cs.transform(:old.geom, tileSRID) into oldGeom from dual; end if; end if; newGeom:=:new.geom; if (:new.geom IS NOT NULL) then if (:new.geom.SDO_SRID!= tileSRID) then select sdo_cs.transform(:new.geom, tileSRID) into newGeom from dual; end if; end if; insert into log_MCAU_TL (id, geomO, geomN, modified, status, datasource, tile_layer, basetable) values(null, oldGeom, newGeom, sysdate, 'n', 'MVDEMO', 'MCAU_TL', 'states'); end; / --counties trigger create or replace trigger counties_MCAU_TL_ar after insert or update or delete on counties referencing new as new old as old for each row when (old.geom IS NOT NULL OR new.geom IS NOT NULL) declare oldGeom SDO_GEOMETRY; newGeom SDO_GEOMETRY; tileSRID number; begin tileSRID := 8307; oldGeom := :old.geom; if (:old.geom IS NOT NULL) then if (:old.geom.SDO_SRID!=tileSRID) then select sdo_cs.transform(:old.geom, tileSRID) into oldGeom from dual; end if; end if; newGeom:=:new.geom; if (:new.geom IS NOT NULL) then if (:new.geom.SDO_SRID!= tileSRID) then select sdo_cs.transform(:new.geom, tileSRID) into newGeom from dual; end if; end if; insert into log_MCAU_TL (id, geomO, geomN, modified, status, datasource, tile_layer, basetable) values(null, oldGeom, newGeom, sysdate, 'n', 'MVDEMO', 'MCAU_TL', 'counties'); end; / --interstates trigger create or replace trigger interstates_MCAU_TL_ar after insert or update or delete on interstates referencing new as new old as old for each row when (old.geom IS NOT NULL OR new.geom IS NOT NULL) declare oldGeom SDO_GEOMETRY; newGeom SDO_GEOMETRY; tileSRID number; begin tileSRID := 8307; oldGeom := :old.geom; if (:old.geom IS NOT NULL) then if (:old.geom.SDO_SRID!=tileSRID) then select sdo_cs.transform(:old.geom, tileSRID) into oldGeom from dual; end if; end if; newGeom:=:new.geom; if (:new.geom IS NOT NULL) then if (:new.geom.SDO_SRID!= tileSRID) then select sdo_cs.transform(:new.geom, tileSRID) into newGeom from dual; end if; end if; insert into log_MCAU_TL (id, geomO, geomN, modified, status, datasource, tile_layer, basetable) values(null, oldGeom, newGeom, sysdate, 'n', 'MVDEMO', 'MCAU_TL', 'interstates'); end; / --cities trigger create or replace trigger cities_MCAU_TL_ar after insert or update or delete on cities referencing new as new old as old for each row when (old.location IS NOT NULL OR new.location IS NOT NULL) declare oldGeom SDO_GEOMETRY; newGeom SDO_GEOMETRY; tileSRID number; begin tileSRID := 8307; oldGeom := :old.location; if (:old.location IS NOT NULL) then if (:old.location.SDO_SRID!=tileSRID) then select sdo_cs.transform(:old.location, tileSRID) into oldGeom from dual; end if; end if; newGeom:=:new.location; if (:new.location IS NOT NULL) then if (:new.location.SDO_SRID!= tileSRID) then select sdo_cs.transform(:new.location, tileSRID) into newGeom from dual; end if; end if; insert into log_MCAU_TL (id, geomO, geomN, modified, status, datasource, tile_layer, basetable) values(null, oldGeom, newGeom, sysdate, 'n', 'MVDEMO', 'MCAU_TL', 'cities'); end; / commit;
タイルの自動更新をテストするには、MapViewerサーバーを起動し、実表内の1つ以上の行を変更します。
実表内の行を変更します。次に例を示します。
update cities set city='Worcester' where city='Worcester' and state_abrv='MA';
ログ表を確認します。次に例を示します。
select * from log_mcau_tl;
実表のトリガーによって挿入された行が結果に含まれている必要があります。
しばらく待って1つの間隔が経過したころに(この例では1分)、ダーティなMBR表を確認します。次に例を示します。
select count(*) from mbr_mcau_tl;
サーバーによって挿入されたダーティなMBR行が結果に含まれている必要があります。
また、ダーティなMBR表のrefresh_status
列の変化を見ることもできます。行が最初に挿入されると、ステータスは未処理を表すn
に設定されます。その後、処理が実行されると保留中を表すp
に、更新が完了すると処理済を表すy
に変更されます。また、サーバーでは、タイルがサーバーによって更新されたことを確認できます(最も詳細なログ情報を表示するには、サーバーのロガーをfinest
に設定する必要があります)。
タイル層のUTFGridが有効になっていると、UTFGridという名前のデータセットは画像タイルの「コンパニオン」になります。コンパニオンは、画像タイル内の地物に関するテキスト情報を含んでいます。このテキスト情報は、マウス・イベント(マップ地物上でマウスをクリックするなど)への応答時にブラウザで表示できます。
UTFGridデータセットは、JSON形式で保存されます。また、2つのコンポーネント(a)コンパニオン画像タイルをミラーするグリッド・データセットと、(b)すべてのグリッド・セルの属性が含まれています。各グリッド・セルの値は、画像タイル・セルとその属性をリンクするためのキーの役割を果たします。マップ上の各画像ピクセルは、UTFGridグリッド・セルに関連付けられていて、そのセルの値は属性(テキスト文字列)が取得できる場所を示しています。ストレージを効果的に使用するために、各グリッド・セルの値は改訂されたUTF-8コード体系でエンコードされます。
次の内容について説明します。
マップ・タイル層のUTFGridオプションを有効にするには、そのタイル層のUSER_ADO_CACHED_MAPS行で、<map_tile_layer>
要素にutfgrid="true"
を指定します。また、オプションとして、utfgrid_resolution
属性(デフォルトは4)でUTFGridの解像度を指定します。次に例を示します。
insert into user_sdo_cached_maps values(
'UTFGRID_TL',
'utfgrid enalbled test case ',
'',
'YES',
'YES',
'<map_tile_layer name="UTFGRID_TL" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3" fetch_larger_tiles="false"
persistent_tiles="true" utfgrid="true" utfgrid_resolution="4">
<internal_map_source data_source="mvdemo" base_map="UTFGRID_BASEMAP" bgcolor="#dddddd" out_of_bounds_color="#eeddff"/>
<tile_storage root_path="/temp" xyz_storage_scheme="true"/>
<coordinate_system srid="8307" minX="-180.0" maxX="180.0" minY="-90.0" maxY="90.0"/>
<tile_image width="256" height="256"/>
<tile_dpi value="90.7142857"/>
<tile_meters_per_unit value="111319.49079327358"/>
<zoom_levels levels="19" min_scale="2132.729583849784" max_scale="559082264.0287178">
</zoom_levels>
</map_tile_layer>',
'UTFGRID_BASEMAP',
'');
commit;
utfgrid_resolution
属性により、UTFGridデータセットに含まれるグリッド・セルの精細度が決まります。デフォルト値の4は、1つのグリッド・セルがコンパニオン画像タイルの4x4の画像ピクセルを表すことを意味します。たとえば、イメージのディメンションが256x256の場合、グリッドのディメンションは64x64になります。また、行10、列20のグリッド・セルは、行40から行43および列80から列83のタイル画像に含まれるピクセルを表します(1つのグリッド・セルが16の画像タイル・ピクセルを表している点に注意してください)。マップ画像タイル内の複数の地物が指定された解像度で1つのグリッド・セルに収まる場合、ピクセルの過半数または多数を占める地物がグリッド・セルに割り当てられます。グリッド・セルに格納されている値は、UTF-8エンコーディングを使用してエンコードされています。
タイル層のUTFGridが有効になっている場合、マップ・サーバーはマップ画像タイルを生成するときに、JSON形式で保存されるUTFGridデータセットも生成します。クライアントがマップ画像タイルをリクエストすると、画像タイルとそのタイルのUTFGrid JSONファイルの両方がレスポンスで返されます。
MapViewerサーバーでは、UTFGrid JSONファイルはそれに対応する画像タイルと同じ場所に保存されます。たとえば、画像タイルが/mapcache/MVDEMO.UTFGRID_TL/0/1/2.PNG
にキャッシュされている場合、そのコンパニオンUTFGridファイルは/mapcache/MVDEMO.UTFGRID_TL/0/1/2.JSON
で確認できます。
このUTFGridオプションは、現時点では、画像タイルがデータベース表に保存されていて(「データベース表にタイルを保存」を参照)、タイル層のディスク・キャッシュが無効化されている(「タイルを保存せずに直接ストリーミングを行う」を参照)ときにはサポートされません。
1つのタイル層には複数のデータ層またはテーマを含めることができます。それぞれのテーマが独自のグリッド・データセットを保持し、1つのUTFGrid JSONオブジェクトには複数のグリッド・データセットが含まれている可能性があります。各テーマのグリッドでは、その画像タイルに示される地物も各地物のレンダリングするためのスタイルを使用して描画されます。それに関連付けられた画像タイルについては、地物がキーを使用して描画されます。また、キーは各地物に割り当てられた序数になります。この数値は、セルの値にUTF-8エンコードされた値を割り当てるために使用されます。
画像タイル内の地物でマウス・イベントがトリガーされると、画像ピクセルの対応するグリッド・セルが特定できるようになるため、セルの値(UTF-8エンコードされた値)を取得できます。このUTF-8エンコードされた値は、キー(序数)を導出するためにデコードされます。このキーを使用すると、保存されている属性を取得できます。(「UTFGridテスト・ケースの作成」の後半にあるサンプルを参照)。
このテスト・ケースは、サーバー側に焦点を合わせています。重要な手順は2つあります。1つはUTFGrid対応のタイル層を作成すること、もう1つはハードコード化された複数の要求をサーバーに送信することです。(実際のアプリケーションでは、タイル層を使用するためのクライアント側マップ・アプリケーションを用意する必要があります)。
UTFGrid対応のタイル層を作成します。
すべての空間実表とスタイルがメタデータに存在していると、次の例は4つのテーマ、1つのベース・マップ、および1つのUTFGrid対応タイル層を作成します。地物の属性はテーマの<hidden_info>
要素から得られるUTFGrid JSONオブジェクトに格納されているため、<hidden_info>
要素は4つのテーマのうちの3つで定義されます。(この4つのテーマのいずれもが<hidden_info>
要素を定義していない場合は、このタイル層のUTFGridを有効にしてもUTFGridオブジェクトは空になるため意味がありません。それでも、そのオブジェクトを作成することでサーバーのリソースが消費されてしまいます)。
-- insert theme 1 insert into USER_SDO_THEMES (name, description, base_table, geometry_column, styling_rules) values ( 'UTFGRID_THEME_DEMO_STATES', 'for utfgrid testing', 'STATES', 'GEOM', '<?xml version="1.0" standalone="yes"?> <styling_rules> <hidden_info> <field column="STATE" name="State"/> <field column="STATE_ABRV" name="Abrv."/> <field column="TOTPOP" name="Population"/> </hidden_info> <rule> <features style="C.S02_COUNTRY_AREA"> </features> <label column="STATE_ABRV" style="T.S02_STATE_ABBREVS"> 1 </label> </rule> </styling_rules>'); -- insert theme 2 insert into USER_SDO_THEMES (name, description, base_table, geometry_column, styling_rules) values ( 'UTFGRID_THEME_DEMO_COUNTIES', 'for utfgrid testing', 'COUNTIES', 'GEOM', '<?xml version="1.0" standalone="yes"?> <styling_rules> <!--<hidden_info> <field column="COUNTY" name="County"/> <field column="FIPSSTCO" name="Fips"/> <field column="TOTPOP" name="Population"/> <field column="STATE_ABRV" name="State"/> </hidden_info>--> <rule> <features style="L.S06_BORDER_STATE"> </features> </rule> </styling_rules>'); -- insert theme 3 insert into USER_SDO_THEMES (name, description, base_table, geometry_column, styling_rules) values ( 'UTFGRID_THEME_DEMO_HIGHWAYS', 'for utfgrid testing', 'INTERSTATES', 'GEOM', '<?xml version="1.0" standalone="yes"?> <styling_rules> <hidden_info> <field column="HIGHWAY" name="Highway"/> <field column="ROUTEN" name="No."/> </hidden_info> <rule> <features style="L.S04_ROAD_INTERSTATE"> </features> <label column="routen" style="M.HWY_USA_INTERSTATE_NARROW"> (3-length(routen)) </label> </rule> </styling_rules>'); -- insert theme 4 insert into USER_SDO_THEMES (name, description, base_table, geometry_column, styling_rules) values ( 'UTFGRID_THEME_DEMO_CITIES', 'for utfgrid testing', 'CITIES', 'LOCATION', '<?xml version="1.0" standalone="yes"?> <styling_rules> <hidden_info> <field column="CITY" name="City"/> <field column="POP90" name="Population"/> </hidden_info> <rule> <features style="M.ALL_CITY_L2"> (pop90 between 200000 AND 1000000 ) </features> <label column="city" style="T.S07_CITIES_L2"> 1 </label> </rule> <rule> <features style="M.ALL_CITY_L3"> (pop90 between 0 and 200000) </features> <label column="city" style="T.S07_CITIES_L3"> 1 </label> </rule> </styling_rules>'); -- insert a basemap INSERT INTO USER_SDO_MAPS (name, description, definition) values ( 'UTFGRID_BASEMAP', 'for utfgrid testing', '<?xml version="1.0" standalone="yes"?> <map_definition> <theme name="UTFGRID_THEME_DEMO_STATES" min_scale="1.5E8" max_scale="0.0" scale_mode="RATIO"/> <theme name="UTFGRID_THEME_DEMO_COUNTIES" min_scale="8500000.0" max_scale="0.0" scale_mode="RATIO"/> <theme name="UTFGRID_THEME_DEMO_HIGHWAYS" min_scale="4.5E7" max_scale="0.0" scale_mode="RATIO"/> <theme name="UTFGRID_THEME_DEMO_CITIES" min_scale="7500000.0" max_scale="0.0" scale_mode="RATIO"/> </map_definition>' ); -- insert the UTFGrid enabled tile layer insert into user_sdo_cached_maps values( 'UTFGRID_TL', 'a utfgrid ', '', 'YES', 'YES', '<map_tile_layer name="UTFGRID_TL" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3" fetch_larger_tiles="false" persistent_tiles="true" utfgrid="true" utfgrid_resolution="8"> <internal_map_source data_source="mvdemo" base_map="UTFGRID_BASEMAP" bgcolor="#dddddd" out_of_bounds_color="#eeddff"/> <tile_storage root_path="/temp" xyz_storage_scheme="true"/> <coordinate_system srid="8307" minX="-180.0" maxX="180.0" minY="-90.0" maxY="90.0"/> <tile_image width="256" height="256"/> <tile_dpi value="90.7142857"/> <tile_meters_per_unit value="111319.49079327358"/> <zoom_levels levels="19" min_scale="2132.729583849784" max_scale="559082264.0287178"> </zoom_levels> </map_tile_layer>', 'UTFGRID_BASEMAP', ''); commit;
マップ画像とそのUTFGridオブジェクトをリクエストします。
実際のアプリケーションでは、マップ画像タイルとそのコンパニオンUTFGrid JSONファイルのリクエストは、MapViewer HTML5 V2 APIで処理されます。ただし、説明のために、ここではハードコード化された要求による2つの副手順を示します。
サーバーからの画像タイルをリクエストします。次に例を示します。
http://localhost:8080/mapviewer/mcserver?request=gettile&format=png&zoomlevel=8&mapcache=MVDEMO.UTFGRID_TL&mx=77&my=94
サーバーのレスポンスは、次のとおりです。
サーバーからの画像タイルのコンパニオンUTFGridをリクエストします。次に例を示します。
http://localhost:8080/mapviewer/mcserver?request=getutfgrid&format=json&zoomlevel=8&mapcache=MVDEMO.UTFGRID_TL&mx=77&my=94
サーバーのレスポンスは、次のとおりです。
{"UTFGRID_THEME_DEMO_STATES": {"keys":["1","2","3"], "data":{ "1":{"State":"New Hampshire","Abrv.":"NH","Population":"1109252"}, "2":{"State":"Maine","Abrv.":"ME","Population":"1227928"}, "3":{"State":"Massachusetts","Abrv.":"MA","Population":"6016424"}}, "grid":[ "!!!!!!!!!!!!!!!!!###############", "!!!!!!!!!!!!!!!!!###############", "!!!!!!!!!!!!!!!!!############## ", "!!!!!!!!!!!!!!!!!###############", "!!!!!!!!!!!!!!!!!############## ", "!!!!!!!!!!!!!!!!!############# ", "!!!!!!!!!!!!!!!!!!######### ", "!!!!!!!!!!!!!!!!!!!######## ", "!!!!!!!!!!!!!!!!!!!!####### ", "!!!!!!!!!!!!!!!!!!!!###### ", "!!!!!!!!!!!!!!!!!!!!###### ", "!!!!!!!!!!!!!!!!!!!!!!### ", "!!!!!!!!!!!!!!!!!!!!!!!# ", "!!!!!!!!!!!!!!!!!!!!!!! ", "!!!!!!!!!!!!!!!!!!!!!! ", "!!!!!!!!!!!!!!!!!!!!!! ", "!!!!!!!!!!!!!!!!!$$!! ", "!!!!!!!!!!!!!!!$$$$$$ ", "!!!!!!!!!!!!$$$$$$$$$ ", "!!!!!!!!!!!$$$$$$$$$$$ ", "$$$$$!!!!$$$$$$$$$$$$$$ $$ ", "$$$$$$$$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$$$$ ", "$$$$$$$$$$$$$$$$$$$$$$$ "]}, "UTFGRID_THEME_DEMO_HIGHWAYS":{ "keys":["1","2","3","4","5","6","7","8","9"], "data":{ "1":{"Highway":"I 93","No.":"93"}, "2":{"Highway":"I 95","No.":"95"}, "3":{"Highway":"I 89","No.":"89"}, "4":{"Highway":"I 293","No.":"293"}, "5":{"Highway":"I 495","No.":"495"}, "6":{"Highway":"I 190","No.":"190"}, "7":{"Highway":"88","No.":"99"}, "8":{"Highway":"I 290","No.":"290"}, "9":{"Highway":"I 90","No.":"90"}}, "grid":[ " ! ## ", " ! ### ", " !! ## ", " !! ## ", " ! ## ", " ! ## ", " !! ## ", " !! ## ", "$ !! # ", "$$$$! ## ", " !! ### ", " ! ### ", " %! ## ", " %!! ## ", " %%! # ", " !! ## ", " !! ## ", " !! &&&&# ", " !! &&& ## ", " !! & # ", " !&& ## ", " &&&! ## ", " &&&& ! ## ", " &&&& !! ## ", "' &&& ##!### ", "' &&& #((!! ", " && #( !! ", " && ( !!! ", ")))& *********! ", ") &***** ## ! ", "***** ## ! ", "***&& ##!!! "]}, "UTFGRID_THEME_DEMO_CITIES":{ "keys":["1","2"], "data":{ "1":{"City":"Lowell","Population":"103439"}, "2":{"City":"Boston","Population":"574283"}}, "grid":[ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " !! ", " ", " ", " ", " ", " ", " ", " ## ", " ", " ", " "]}, "resolution":"8","rows":"32","columns":"32"}
前述のレスポンスは、テーマUTFGRID_THEME_DEMO_STATES
、UTFGRID_THEME_DEMO_HIGHWAYS
、およびUTFGRID_THEME_DEMO_CITIES
のプロパティを格納しているUTFGridオブジェクトを示しています。(テーマUTFGRID_THEME_DEMO_COUNTIES
では<hidden_info>
要素が定義されていないため、そのテーマに関するものはレスポンスにリストされません)。
外部マップ・ソース・アダプタは、マップ・タイル・サーバーと外部マップ・サービス・プロバイダの間のインタフェースです。外部マップ・サービス・プロバイダからマップ画像タイルをフェッチする必要がある場合、マップ・タイル・サーバーはタイルのズーム・レベル、サイズおよび位置に関する情報を指定して、外部マップ・ソース・アダプタをコールします。外部マップ・ソース・アダプタはその後、プロバイダに固有のリクエストを作成した後、そのリクエストを外部マップ・サービス・プロバイダに送信し、得られたイメージ・タイルをマップ・タイル・サーバーに返します。
外部マップ・ソース・アダプタは、1つのJavaクラスであり、Javaの抽象クラスoracle.mapviewer.share.mapcache.MapSourceAdapter
(定義は次のとおり)を拡張する必要があります。
public abstract class MapSourceAdapter { public abstract String getMapTileRequest(TileDefinition tile); public byte[] getTileImageBytes(TileDefinition tile) ; public Properties getProperties() ; }
このクラスを拡張するアダプタでは、次のメソッドを実装する必要があります。
public String getMapTileRequest(TileDefinition tile)
このメソッドでは、マップ・サービス・プロバイダに送信してマップ画像タイルをフェッチできるHTTPリクエスト文字列を作成するロジックを実装します。たとえば、マップ・タイルのURLがhttp://myhost/mymapserver?par1=v1&par2=v2&par3=v3
の場合、このメソッドから返されるHTTPリクエスト文字列はpar1_v1&par2=v2&par3=v3
になります。
マップ・タイル・サーバーは、特定のマップ・タイルが見つからない場合、getTileImageBytes
メソッドをコールして該当するタイル画像のバイナリ・データをフェッチします。このメソッドは、getMapTileRequest
メソッドをコールし、マップ・タイル・リクエストを作成して該当するタイルをフェッチします。getMapTileRequest
メソッドが受け取る唯一のパラメータであるTileDefinition
オブジェクトでは、リクエストされたタイルのズーム・レベル、枠ボックス、画像サイズおよび画像形式を指定します。このメソッドでは、HTTPリクエスト文字列を返します。
また、マップ・ソース・アダプタは、クラスMapSourceAdapter
に実装されているすべてのメソッドを継承します。それらの中で、他のメソッドに比べて重要なメソッドは次のとおりです。
public byte[] getTileImageBytes(TileDefinition tile)
このメソッドは、外部マップ・サービス・プロバイダから実際のバイナリ・マップ・タイル画像データをフェッチします。このメソッドは、実装済です。これは、抽象メソッドgetMapTileRequest
をコールしてマップ・タイル・リクエストを作成し、そのリクエストを外部マップ・サービス・プロバイダに送信します。HTTPリクエストの送信によってマップ・タイルをフェッチできない場合は、このメソッドをオーバーライドし、マップ・ソースから画像タイルをフェッチするための適切なロジックを実装できます。このメソッドが受け取る唯一のパラメータであるTileDefinition
オブジェクトでは、リクエストされたタイルのズーム・レベル、枠ボックス、画像サイズおよび画像形式を指定します。このメソッドは、マップ・タイル層の構成設定で指定されている画像形式でエンコードされたバイナリ・タイル画像データを返します。
public Properties getProperties()
このメソッドでは、3.3.2.2項で説明したマップ・タイル層の構成設定内で定義されている、プロバイダに固有のパラメータを返します。
MapSourceAdapter
クラスおよびTileDefinition
クラスは、mvclient.jar
($MAPVIEWER_HOME
/web/WEB/lib
ディレクトリ内)にパッケージされています。
外部マップ・ソース・アダプタの例を、例3-30に示します。
例3-30 外部マップ・ソース・アダプタ
/** * This is a sample map source adapter that can be used to fetch map * tiles from a MapViewer instance. */ package mcsadapter ; import java.awt.Dimension; import java.net.URL; import java.util.Properties; import oracle.lbs.mapclient.MapViewer; import oracle.lbs.mapcommon.MapResponse; import oracle.mapviewer.share.mapcache.*; /** * The map source adapter must extend class * oracle.lbs.mapcache.cache.MapSourceAdapter. */ public class MVAdapter extends MapSourceAdapter { /** * Gets the map tile request string that is to be sent to the map * service provider URL. * @param tile tile definition * @return request string */ public String getMapTileRequest(TileDefinition tile) { // Get map source specified parameters Properties props = this.getProperties() ; String dataSource = props.getProperty("data_source") ; String baseMap = props.getProperty("base_map") ; // Use oracle.lbs.mapclient.MapViewer to construct the request string MapViewer mv = new MapViewer(this.getMapServiceURL()) ; mv.setDataSourceName(dataSource); mv.setBaseMapName(baseMap); mv.setDeviceSize(new Dimension(tile.getImageWidth(), tile.getImageHeight())); mv.setCenterAndSize(tile.getBoundingBox().getCenterX(), tile.getBoundingBox().getCenterY(), tile.getBoundingBox().getHeight()); int format = MapResponse.FORMAT_PNG_STREAM ; String req = null ; switch(tile.getImageFormat()) { case TileDefinition.FORMAT_GIF: mv.setImageFormat(MapResponse.FORMAT_GIF_URL); req = mv.getMapRequest().toXMLString().replaceFirst( "format=\"GIF_URL\"", "format=\"GIF_STREAM\"") ; break ; case TileDefinition.FORMAT_PNG: mv.setImageFormat(MapResponse.FORMAT_PNG_URL); req = mv.getMapRequest().toXMLString().replaceFirst( "format=\"PNG_URL\"", "format=\"PNG_STREAM\"") ; break ; case TileDefinition.FORMAT_JPEG: mv.setImageFormat(MapResponse.FORMAT_JPEG_URL); req = mv.getMapRequest().toXMLString().replaceFirst( "format=\"JPEG_URL\"", "format=\"JPEG_STREAM\""); break ; } byte[] reqStr = null ; try { reqStr = req.getBytes("UTF8") ; } catch(Exception e) {} // Return the request string. return "xml_request="+ new String(reqStr); } }
MapSourceAdapter.getTileImageBytes
メソッドの実装を、例3-31に示します。
例3-31 MapSourceAdapter.getTileImageBytesの実装
/** * Fetches the map image tile from the external map service provider by * sending the HTTP map tile request to the map service provider, and * return the binary tile image data. You can rewrite this method so that * the adapter can fetch the tile from an external map service provider * that does not accept HTTP requests at all. * @param tile the tile definition * @return the binary tile image data. * @throws Exception */ public byte[] getTileImageBytes(TileDefinition tile) throws Exception { // construct request string String request = getMapTileRequest(tile) ; if(request == null) { throw new Exception("Null map tile request string in map source adapter!") ; } // set proxy settings Proxy proxy = null ; /* If the proxyHost is "NONE", the request is sent directly to the * external server. If the proxyHost is a valid host, that host will * be used as the proxy server. If the proxyHost is empty of omitted, * the global proxy setting in mapViewerConfig.xml will be in effect. */ boolean noProxy = "NONE".equalsIgnoreCase(getProxyHost()) ; if(getProxyHost()!=null && !noProxy) { SocketAddress addr = new InetSocketAddress(proxyHost, proxyPort); proxy = new Proxy(Proxy.Type.HTTP, addr); } // send the request and get the tile image binary PrintWriter wr = null ; BufferedInputStream bis = null; try { String urlStr = mapServiceURL ; if("GET".equalsIgnoreCase(httpMethod)) urlStr = mapServiceURL + "?" + request ; log.finest("http "+httpMethod+": "+urlStr); URL url = new URL(urlStr); // Open a URL connection based on current proxy setting URLConnection conn = proxy!=null? url.openConnection(proxy): (noProxy? url.openConnection(Proxy.NO_PROXY): url.openConnection()) ; conn.setConnectTimeout(timeOut); if("GET".equalsIgnoreCase(getHTTPMethod())) conn.connect(); else { conn.setDoOutput(true); wr = new PrintWriter(conn.getOutputStream()); wr.print(request); wr.flush(); wr.close(); wr = null ; } bis = new BufferedInputStream(conn.getInputStream()); byte[] result = toBytes(bis) ; bis.close(); bis = null ; return result; } catch(Exception ioe) { throw new Exception("Failed to fetch external map tile.", ioe); } finally { try { if(bis != null) { bis.close(); bis = null; } if(wr != null) { wr.close(); wr = null; } } catch(IOException ioee) { throw ioee; } } }