この章では、HTMLファイルでJavaServer Pages(JSP)タグを使用し、OracleAS MapViewerにリクエストを発行する方法について説明します。JSPタグは、XMLのような構文によって、mapリクエストの設定、ズームおよびパン、ならびにユーザーがクリックした地物の非空間属性の識別など、一連の重要な(ただし完全ではない)OracleAS MapViewer機能を提供します。
|
注意: OracleAS MapViewer JSPタグ・ライブラリは、Oracle9i Application Serverリリース2(9.0.2)またはスタンドアロンのOC4Jリリース9.0.2では機能しません。必要最低限となるバージョンは、Oracle9i Application Serverリリース2(9.0.3)またはスタンドアロンのOC4Jリリース9.0.3です。 |
次のいずれかの方法を使用して、位置ベースのアプリケーションを開発できます。
XML APIの使用(第3章を参照)
JavaBeanベースAPIの使用(第4章を参照)
XMLタグまたはHTMLタグ(あるいはその両方)が含まれ、Oracle提供のカスタムJSPタグ(この章で説明)が含まれるJSPファイルの使用
多くの場合、JSPファイルの作成は、XML APIまたはJavaBeanベースAPIを使用するよりも容易かつ便利ですが、後者の2つの方法は柔軟性が高く、プログラム・ロジックをより強力に制御できます。ただし、5.3項の例5-1で示すgetMapTitleメソッドへのコールの場合のように、JavaServer Page内にJava APIメソッドへのコールを組み込むことができます。
同一セッション有効範囲内のすべてのOracleAS MapViewer JSPタグは、単一のOracleAS MapViewer Beanへのアクセスを共有します。
この章の主な項目は、次のとおりです。
OracleAS MapViewer JSPタグを使用するには、タグを使用したWebアプリケーションが、OracleAS MapViewerが動作する同じOC4Jインスタンスにデプロイされるかどうかに応じて、1つまたは2つの手順を実行する必要があります。
Webアプリケーションが、OracleAS MapViewerが動作する同じOC4Jインスタンスにデプロイされる場合、この手順をスキップして手順2に進みます。
Webアプリケーションが独立したOC4Jインスタンスにデプロイされる場合は、mvclient.jarファイル($MAPVIEWER/web/WEB-INF/libディレクトリ内)およびmvtaglib.tldファイル($MAPVIEWER/web/WEB-INFディレクトリ内)を、そのOC4Jインスタンスのアプリケーション・デプロイ・ディレクトリにコピーする必要があります。続いて、次の例で示すように、アプリケーションのweb.xmlファイルで<taglib>要素を定義する必要があります。
<taglib>
<taglib-uri>
http://xmlns.oracle.com/spatial/mvtaglib
</taglib-uri>
<taglib-location>
/WEB-INF/mvtaglib.tld
</taglib-location>
</taglib>
JSPページの上部および他のOracleAS MapViewerタグの前にtaglibディレクティブを使用することで、(カスタム・タグを使用したJSPページで必要であるように)タグ・ライブラリをインポートします。次に例を示します。
<%@ taglib uri="http://xmlns.oracle.com/spatial/mvtaglib"
prefix="mv" %>
taglibディレクティブには、次の2つのパラメータがあります。
uriは、OracleAS MapViewerタグ・ライブラリを識別する一意の名前であり、この値は、OracleAS MapViewerのweb.xml初期化ファイルで定義されているhttp://xmlns.oracle.com/spatial/mvtaglibである必要があります。
prefixは、OracleAS MapViewerタグ・ライブラリに属するページ上のタグの接頭辞を識別します。JSPページ内で一意であるかぎり任意の接頭辞を使用できますが、OracleAS MapViewerで推奨される接頭辞はmvであり、このガイドの例で使用されています。
次の例では、setParamタグで使用されるmv接頭辞を示しています。
<mv:setParam title="Hello World!" bgcolor="#ffffff" width="500" height="375" antialiasing="true"/>
タグによって、OracleAS MapViewerの数種類の操作を実行できます。
OracleAS MapViewer Beanを作成し、現行セッション内に置くには、initタグを使用します。initタグは、他のOracleAS MapViewer JSPタグの前に位置する必要があります。
マップ表示およびオプションでベース・マップに関するパラメータを設定するには、setParamタグを使用します。
テーマおよび凡例を追加するには、addPredefinedThemeタグ、addJDBCThemeタグ、importBaseMapタグおよびmakeLegendタグを使用します。
mapリクエストを処理のために発行するには、runタグを使用します。
この項では、OracleAS MapViewerとの通信に使用できるOracle提供のJSPタグについて説明します。表5-1では、各タグをリストし、タグで指定される情報について簡潔に説明しています。
| タグ名 | 説明 |
|---|---|
|
|
OracleAS MapViewer Beanを作成して現行セッション内に置きます。他のOracleAS MapViewer JSPタグの前に位置する必要があります。 |
|
|
現行mapリクエストに対して1つ以上のパラメータを指定します。 |
|
|
事前定義済テーマを現行mapリクエストに追加します。 |
|
|
動的に定義されたテーマをmapリクエストに追加します。 |
|
|
指定されたベース・マップに含まれる事前定義済テーマを、現行mapリクエストに追加します。 |
|
|
生成されたマップの上に描画する凡例(マップ挿入図)を作成します。 |
|
|
現行mapリクエストの指定パラメータに関連付けられた値を取得します。 |
|
|
OracleAS MapViewerサービスによって生成された、現在使用可能なmap画像のHTTP URLを取得します。 |
|
|
マップ表示の指定ポイントまたは矩形と相互作用する空間地物に関連付けられた非空間属性(列)値を取得し、オプションでそのポイントまたは矩形を識別するマーカー・スタイルを使用します。 |
|
|
現行mapリクエストを、処理のためOracleAS MapViewerサービスに発行します。処理は、ズームインとズームアウト、マップの中心の再設定またはこれらの操作の組合せが可能です。 |
別途記載されている場合を除き、JSP式を使用して、実行時にタグ属性値を設定できます。使用する書式は次のとおりです。
<mv:tag attribute="<%= jspExpression %>" >
次の各項(タグ名のアルファベット順)では、各タグで使用できるすべてのパラメータに関する参照情報(パラメータ名、説明およびパラメータが必須かどうか)を提供します。パラメータが必須である場合、タグに含める必要があります。パラメータが必須ではなく省略した場合は、デフォルト値が使用されます。
JSPタグの参照項目では簡単な例を示しており、5.3項ではより包括的な例を示しています。
addJDBCThemeタグは、動的に定義されたテーマをmapリクエストに追加します。(3.2.9項で説明している<jdbc_query>要素と同じ処理を実行します。)
表5-2では、addJDBCThemeタグのパラメータをリストしています。
表5-2 addJDBCThemeタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
動的に定義されたテーマの名前。関連付けられたOracleAS MapViewer Beanに追加済のすべてのテーマ間で、一意である必要があります。 |
はい |
|
|
テーマが表示されるようにするには、この値まで表示をズームインする必要があります(2.4.1項を参照)。 |
いいえ |
|
|
テーマが表示されないようにするには、この値を超えるまで表示をズームインする必要があります(2.4.1項を参照)。 |
いいえ |
|
|
マップ表示のジオメトリ・オブジェクトが含まれるSDO_GEOMETRY型の列。 |
はい |
|
|
Coordinate system (SDO_SRID value) of the data to be rendered.指定されていない場合、NULLの座標系とみなされます。 |
いいえ |
|
|
データベースへの接続情報が含まれるデータソース・インスタンスの名前。 |
はい脚注1 |
|
|
データベースに接続するためのホスト名。 |
はい脚注1 |
|
|
データベースに接続するためのポート名。 |
はい脚注1 |
|
|
データベースに接続するためのSID。 |
はい脚注1 |
|
|
データベースに接続するためのユーザー名。 |
はい脚注1 |
|
|
データベースに接続するためのパスワード。 |
はい脚注1 |
|
|
データベースへの接続に使用するOracle JDBCドライバ( |
いいえ |
|
|
|
いいえ |
|
|
このテーマについて取得された空間データのレンダリングに使用されるスタイルの名前。ポイント地物のデフォルトは45度回転した赤の十字形で、線および曲線のデフォルトは1ピクセル幅の黒い線、ポリゴンのデフォルトは内側が半透明のダークグレーである黒い枠線です。 |
いいえ |
|
|
このテーマの空間地物にラベル・テキストを描画する際に使用される、テキスト・スタイルの名前。 |
いいえ |
|
|
各地物(行)のラベル・テキストが含まれる、指定された問合せのSELECTリスト内の列。 |
いいえ |
脚注 1 datasourceか、jdbc_host、jdbc_port、jdbc_sid、jdbc_userおよびjdbc_passwordの組合せを指定する必要があります。
次の例では、bigCitiesという新規動的テーマを作成します。このテーマは、mvdemoデータソースを使用し、空間データが含まれる列としてLOCATION列を指定して実行されます。WHERE句の大なり(>)記号がここでは有効である点に注意してください。
<mv:addJDBCTheme name="bigCities" datasource="mvdemo"
spatial_column="location">
SELECT location, name FROM cities WHERE pop90 > 450000
</mv:addJDBCTheme>
addPredefinedThemeタグは、事前定義済テーマを現行mapリクエストに追加します。(3.2.15項で説明している<theme>要素と同じ処理を実行します。)事前定義済テーマは、関連付けられたOracleAS MapViewer Beanで保守されているテーマ・リストの最後に追加されます。
表5-3では、addPredefinedThemeタグのパラメータをリストしています。
表5-3 addPredefinedThemeタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
現行mapリクエストに追加される事前定義済テーマの名前。このテーマは、関連するOracleAS MapViewer Beanで使用されるデータソースのUSER_SDO_THEMESビューに存在する必要があります。 |
はい |
|
|
テーマのロード元のデータソース名。このパラメータを指定しない場合、mapリクエストのデフォルト・データソースが使用されます。 |
いいえ |
|
|
テーマが表示されるようにするには、この値まで表示をズームインする必要があります(2.4.1項を参照)。 |
いいえ |
|
|
テーマが表示されないようにするには、この値を超えるまで表示をズームインする必要があります(2.4.1項を参照)。 |
いいえ |
次の例では、THEME_DEMO_CITIESというテーマを現行mapリクエストに追加しています。
<mv:addPredefinedTheme name="THEME_DEMO_CITIES"/>
getMapURLタグは、OracleAS MapViewerサービスによって生成された、現在使用可能なmap画像のHTTP URL(Uniform Resource Locator)を取得します。このmap画像のURLは、関連するOracleAS MapViewer Beanで保持され、runタグの使用後まで変更されません。
getMapURLタグに、パラメータはありません。
次の例では、画像のソース(SRCキーワード値)の指定でgetMapURLタグを使用し、現在使用可能なmap画像を表示します。
<IMG SRC="<mv:getMapURL/>" ALIGN="top">
getParamタグは、現行mapリクエストの指定パラメータに関連付けられた値を取得します。
表5-4では、getParamタグのパラメータをリストしています。
表5-4 getParamタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
値を取得するパラメータの名前。setParamタグの有効なパラメータ名のいずれかである必要があります。パラメータ名は大/小文字が区別されます。(この属性にはリテラル値を使用する必要があります。JSP式の値は使用できません。) |
はい |
次の例では、現行mapリクエストのtitleパラメータの値を表示します。
<P> The current map title is: <mv:getParam name="title"/> </P>
identifyタグは、マップ表示の指定ポイントまたは矩形と相互作用する空間地物に関連付けられた非空間属性(列)値を取得し、オプションでそのポイントまたは矩形を識別するマーカー・スタイルを使用します。たとえば、ユーザーがマップをクリックし、クリック時のマウス・ポインタのXおよびY座標値を取得した場合、そのポイントと相互作用する空間ジオメトリに関連付けられた非空間列の値を取得できます。たとえば、ユーザーがシカゴのあるポイントをクリックした場合、アプリケーションにより、都市名、州の略記およびシカゴの人口が表示され、さらにマップ上のクリック箇所の近くに都市マーカーが表示される場合があります。
属性は、文字列配列のString[][]配列で戻されます。この配列は、スクリプト変数としてこのタグによって公開されます。
フェッチする非空間列のリストは、タグ本体の中にカンマ区切りリストの形で指定される必要があります。このリストは、OracleAS MapViewer Beanによって問合せのSELECTリストの作成に使用されます。
オプションで、スタイル属性の使用およびマーカー・スタイルの指定により識別される各地物に、ハイライト・マーカーを関連付けることができます。ハイライト・マーカーが含まれる新規マップを表示するには、getMapURLタグを使用します。
表5-5では、identifyタグのパラメータをリストしています。
表5-5 identifyタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
戻された非空間属性値の公開に使用されるスクリプト変数の名前。1つ目の配列には列名が含まれます。(この属性にはリテラル値を使用する必要があります。JSP式の値は使用できません。) |
はい |
|
|
非空間情報の取得元であるOracleAS MapViewerデータソースの名前。 |
いいえ |
|
|
|
はい |
|
|
指定ポイントまたは矩形との空間相互作用がチェックされるジオメトリ・オブジェクトが含まれるSDO_GEOMETRY型の列。(この属性にはリテラル値を使用する必要があります。JSP式の値は使用できません。) |
はい |
|
|
|
いいえ |
|
|
ポイントのX縦座標値、または、 |
はい |
|
|
ポイントのY縦座標値、または、 |
はい |
|
|
矩形の右上角のX縦座標値。 |
いいえ |
|
|
矩形の右上角のY縦座標値。 |
いいえ |
|
|
指定ポイントまたは矩形と相互作用する地物の上にマーカーを描画する際に使用されるマーカー・スタイルの名前。ハイライト・マーカーが含まれる新規マップを表示するには、getMapURLタグを使用します。 |
いいえ |
次の例では、見出し行、および指定ポイント(ユーザーがクリックした都市など)と空間的に相互作用する各都市につき1行を含むHTML表を作成します。各行には、非空間データ、つまり都市名、人口および州の略記が格納されます。関連する都市(1つまたは複数)に関する非空間情報を格納する文字列配列のString[][]配列は、スクリプト変数attrsによって公開されます。タグの後のスクリプトレットは配列を通してループし、HTML表(この場合は、1つの都市に関する情報を格納)を出力します。
<mv:identify id="attrs" style="M.CYAN PIN"
table="cities" spatial_column="location"
x="100" y="200">
City, Pop90 Population, State_abrv State
</mv:identify>
<%
if(attrs!=null && attrs.length>0)
{
out.print("<CENTER> <TABLE border=\"1\">\n");
for(int i=0; i<attrs.length; i++)
{
if(i==0) out.print("<TR BGCOLOR=\"#FFFF00\">");
else out.print("<TR>\n");
String[] row = attrs[i];
for(int k=0; k<row.length; k++)
out.print("<TD>"+row[k]+"</TD>");
out.print("</TR>\n");
}
out.print("</TABLE></CENTER>");
}
%>
importBaseMapタグは、指定されたベース・マップに含まれる事前定義済テーマを、現行mapリクエストに追加します。(このタグには、basemap属性とともにsetParamタグを使用した場合と同じ効果があります。)
表5-6では、importBaseMapタグのパラメータをリストしています。
表5-6 importBaseMapタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
現行mapリクエストのテーマ・リストの最後に事前定義済テーマが追加されるベース・マップの名前。このベース・マップは、関連するOracleAS MapViewer Beanで使用されるデータソースのUSER_SDO_MAPSビューに存在する必要があります。 |
はい |
次の例では、現行mapリクエストのテーマ・リストの最後に、demo_mapというベースマップ内の事前定義済テーマを追加します。
<mv:importBaseMap name="demo_map"/>
initタグはOracleAS MapViewer Beanを作成し、現行セッション内に配置します。このBeanは同一セッションにおいて、他のすべてのOracleAS MapViewer JSPタグによって共有されます。initタグは、他のOracleAS MapViewer JSPタグの前に位置する必要があります。
表5-7では、initタグのパラメータをリストしています。
表5-7 initタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
OracleAS MapViewerサービスのUniform Resource Locator(URL)。URLの書式は、 |
はい |
|
|
マップのリクエストおよびマッピング・データの取得時に使用されるOracleAS MapViewerデータソースの名前。データソースを作成していない場合は、 |
はい |
|
|
このタグで作成されるOracleAS MapViewer Beanの参照に使用できる名前。(この属性にはリテラル値を使用する必要があります。JSP式の値は使用できません。) |
はい |
次の例では、id値がmvHandleであるデータソースmvdemoを作成します。
<mv:init url="http://mycompany.com:8888/mapviewer/omserver"
datasource="mvdemo" id="mvHandle"/>
makeLegendタグは、ユーザー指定のXML凡例指定を受け入れ、スタンドアロンのmap凡例画像を作成します。凡例画像はOracleAS MapViewerサービスにより生成され、その画像のURLが関連するOracleAS MapViewer Beanに戻されます。このタグにより、URLがスクリプト変数として公開されます。
タグの本体には、<legend>要素が含まれる必要があります。<legend>要素およびその属性の詳細は、3.2.11項を参照してください。
表5-8では、makeLegendタグのパラメータをリストしています。
表5-8 makeLegendタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
生成された凡例画像のURLの参照に使用できるスクリプト変数の名前。(この属性にはリテラル値を使用する必要があります。JSP式の値は使用できません。) |
はい |
|
|
凡例リクエストで指定されたスタイルに関する情報の取得元であるOracleAS MapViewerデータソースの名前。 |
いいえ |
|
|
サーバー上で作成される凡例画像の形式。指定する場合は、 |
いいえ |
次の例では、idがmyLegendである単一列凡例を作成し、凡例画像を表示します。
<mv:makeLegend id="myLegend">
<legend bgstyle="fill:#ffffff;stroke:#ff0000" profile="MEDIUM">
<column>
<entry text="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 density:"/>
<entry style="V.COUNTY_POP_DENSITY" tab="1"/>
</column>
</legend>
</mv:makeLegend>
<P> Here is the map legend: <IMG SRC="<%=myLegend%>"> </P>
runタグは、現行mapリクエストを、処理のためOracleAS MapViewerサービスに発行します。処理は、ズームインとズームアウト、マップの中心の再設定またはこれらの操作の組合せが可能です。
runタグは、JSPページに一切出力しません。runタグの結果としてOracleAS MapViewerにより生成されたmap画像を表示するには、getMapURLタグを使用する必要があります。
表5-9では、runタグのパラメータをリストしています。
表5-9 runタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
|
必要なマップ・ナビゲーション・アクションを示す、
アクションを指定しない場合、mapリクエストは処理のため発行されますが、ズームや中心の再設定は行われません。 |
いいえ |
|
|
マップの中心の再設定では、ポイントのX縦座標値であり、 |
いいえ |
|
|
マップの中心の再設定では、ポイントのY縦座標値であり、 |
いいえ |
|
|
結果の画像をトリミングするための矩形領域の右上角のX縦座標値。 |
いいえ |
|
|
結果の画像をトリミングするための矩形領域の右上角のY縦座標値。 |
いいえ |
|
|
ズーム係数: 現行マップ・サイズの乗算( |
いいえ |
次の例では、マップ表示のズームイン(デフォルトのズーム係数2を使用)、およびデバイス領域の座標(100、250)におけるマップ表示の中心再設定をリクエストします。
<mv:run action="zoomin" x="100" y="250"/>
setParamタグは、現行mapリクエストに対して1つ以上のパラメータを指定します。1つのsetParamタグによって必要なパラメータをすべて一度に設定したり、複数のsetParamタグによって様々なパラメータを異なるタイミングで設定できます。大部分のパラメータは、名前および機能が<map_request>ルート要素の属性と同じです(3.2.1.1項を参照)。パラメータ名は大/小文字が区別されます。
表5-10では、setParamタグのパラメータをリストしています。
表5-10 setParamタグのパラメータ
| パラメータ名 | 説明 | 必須 |
|---|---|---|
|
この属性の値が |
いいえ |
|
|
OracleAS MapViewerによってレンダリングされる事前定義済テーマが含まれるベース・マップ。ベース・マップの定義は、ユーザーのUSER_SDO_MAPSビューに格納されます(2.8.1項を参照)。独自のテーマおよびジオメトリ地物を表示するバックグラウンド・マップが常に必要な場合、このパラメータを使用します。 |
いいえ |
|
|
結果のmap画像のバックグラウンド・カラー。デフォルトは水色です(RGB値はA6CAF0)。この値は16進数で指定する必要があります。 |
いいえ |
|
|
結果のmap画像のバックグラウンド・イメージ(GIFまたはJPEG形式のみ)。画像はmapリクエスト処理中の実行時に取得され、その他のマップ地物より前にレンダリングされますが、 |
いいえ |
|
|
データ座標領域内のマップ中心のX縦座標。 |
いいえ |
|
|
データ座標領域内のマップ中心のY縦座標。 |
いいえ |
|
|
結果のmap画像の高さ(デバイス単位)。 |
いいえ |
|
|
この属性の値が |
いいえ |
|
|
|
データ座標領域内のマップの垂直範囲。 |
いいえ |
|
結果のmap画像の上部に表示されるマップ・タイトル。 |
いいえ |
|
|
結果のmap画像の幅(デバイス単位)。 |
いいえ |
次の例では、2つのsetParamタグを使用しています。1つ目のsetParamタグは、マップのバックグラウンド・カラー、幅、高さおよびタイトルを設定します。2つ目のsetParamタグは、マップの中心点および垂直範囲を設定します。
<mv:setParam bgcolor="#ff0000" width="800" height="600"
title="My Map!"/>
<mv:setParam centerX="-122.35" centerY="37.85" size="1.5"/>
この項では、OracleAS MapViewerのいくつかの操作を実行するためのJSPコードの使用例を示します。
例5-1では、OracleAS MapViewer Beanの初期化、mapリクエスト・パラメータの設定、リクエストの発行および結果のmap画像の表示を行います。さらに、関連するOracleAS MapViewer Beanを取得し、これをスクリプト変数(myHandle)に挿入します。このため、文の中でスクリプト変数が直接アクセスされます。
Displaying map: <B> <%=myHandle.getMapTitle()%> </B>
例5-1 JSPタグを使用したOracleAS MapViewerの操作
<%@ page contentType="text/html" %>
<%@ page session="true" %>
<%@ page import="oracle.lbs.mapclient.MapViewer" %>
<%@ taglib uri="http://xmlns.oracle.com/spatial/mvtaglib"
prefix="mv" %>
<HTML>
<BODY>
Initializing client OracleAS MapViewer bean. Save the bean in the session
using key "mvHandle"....<P>
<mv:init url="http://my_corp.com:8888/mapviewer/omserver"
datasource="mvdemo" id="mvHandle"/>
Setting OracleAS MapViewer parameters...<P>
<mv:setParam title="Hello World!" bgcolor="#ffffff" width="500" height="375" antialiasing="true"/>
Adding themes from a base map...<P>
<mv:importBaseMap name="density_map"/>
Setting initial map center and size...<P>
<mv:setParam centerX="-122.0" centerY="37.8" size="1.5"/>
Issuing a map request... <P>
<mv:run/>
<%
// Place the OracleAS MapViewer bean in a Java variable.
MapViewer myHandle = (MapViewer) session.getAttribute("mvHandle");
%>
Displaying map: <B> <%=myHandle.getMapTitle()%> </B>
<IMG SRC="<mv:getMapURL/>" ALIGN="top"/>
</BODY>
</HTML>