この章では、JavaBeanベースのMapViewer APIについて説明します。このAPIでは、単一のJavaBean、oracle.lbs.mapclient.MapViewer
によってMapViewerのすべての機能が公開されます。このBeanは、マップ・リクエストを発行するユーザーに代わって、中間層で動作する実際のMapViewerサービスとのすべての通信を処理する軽量クライアントです。
Beanと実際のMapViewerサービスとのすべての通信は、リクエスト/レスポンス・モデルに従って行われます。リクエストは、常にXML文書の形でサービスに送信されます。リクエストのタイプおよび性質に応じて、Beanが受け取るレスポンスはXML文書またはバイナリ・データのいずれかになります。ただし、MapViewerリクエストの構成および送信の他、レスポンスからの情報の抽出には、XML文書を操作するよりもMapViewer Beanを使用する方が簡単です。
Beanは、マップ・データの処理およびレンダリングの大部分をMapViewerサービスに委任します。Beanの役割は、ユーザー・リクエストを定型化して有効なMapViewer XMLリクエストを作成し、それらを処理するためにMapViewerサービスへ送信することです。
この章の主な項目は、次のとおりです。
MapViewer Beanは、JavaServer Pages (JSP)およびサーブレットなどのサーバー側オブジェクト、またはJavaアプレットやスタンドアロンJavaアプリケーションなどのクライアント側オブジェクトのいずれかで、作成および使用できます。このBeanは、MapViewerサービスへのアクティブなHTTP接続、および現行のマップ・リクエスト・オブジェクトとマップ・レスポンス・オブジェクトを保守する軽量クラスです。多くの場合、MapViewer Beanを1つのみ作成して後続のすべてのタスクに使用しますが、複数のBeanを作成して同時に使用することもできます。たとえば、Webページを作成し、ここで小さな概要マップに世界全体を表示し、大きなマップ画像に、概要マップ上で選択された地域の詳細マップを表示する必要があるとします。この場合は、2つのMapViewer Beanを作成して1つを小さな概要マップ専用に、もう1つを大きな詳細マップ専用にすると簡単です。
図4-1に、MapViewer Beanについて考えられる使用例を示します。
図4-1に示した次のような使用例では、MapViewer Beanは、HTTPプロトコルを介してMapViewerサービスとの通信が可能です。
Javaアプリケーション
Javaアプレット
MapViewerサービスが格納されたJava EE (Java Platform, Enterprise Edition)コンテナとは異なる、Java EEコンテナ内部のサーブレット内での使用
MapViewerサービスが格納されたJava EEコンテナ内部のJavaServer Pages (JSP)コードでの使用
どの使用モデルでも同じJavaBeanクラスが使用され、そのメソッドの大部分が適用されます。ただし、メソッドによっては、JSP HTMLベース・コンテキストでのみ機能または有効であるものや、対話型のスタンドアロンJavaアプリケーションまたはアプレット・コンテキスト(シック・クライアント)でのみ機能または有効であるものがあります。たとえば、Beanの次のメソッドについて考えてみます。
java.awt.Image getGeneratedMapImage
String getGeneratedMapImageURL
どちらのメソッドも、MapViewerサービスから受信したレスポンスから生成済マップ画像情報を抽出します。ただし、1つ目のメソッドはjava.awt.BufferedImage
クラスである実際のバイナリ画像データを返し、2つ目のメソッドはMapViewerサービスが動作するホストに格納された生成済マップ画像へのHTTP URL文字列を返します。アプリケーションがJavaServer Pageである場合は、2つ目のメソッドを使用する必要があります。これは、1つ目のメソッドを使用した場合、JSPページではBufferedImage
の処理方法が不明なためです。ただし、マップを表示するためのJavaパネルまたはウィンドウがあるスタンドアロンのJavaアプリケーションをプログラミングしている場合は、実際の画像を取得してパネルまたはウィンドウ内にレンダリングし、さらにローカルに作成済でマップ上にレンダリングするその他の地物を加えるために、1つ目のメソッドを使用できます。
シック・クライアント・コンテキストでのみ適用可能なメソッドのセットは、こうしたクライアントの最高のパフォーマンスを得られるように設計されています。詳細は4.3.10項を参照してください。
MapViewer JavaBeanを使用するには、MapViewerのmvclient.jar
ライブラリが、CLASSPATH定義に示されたディレクトリに格納されている必要があります。Oracle Fusion Middlewareにmapviewer.ear
ファイルをデプロイすると、mvclient.jar
ファイルは$MAPVIEWER
/web/WEB-INF/lib
ディレクトリに格納されます。
MapViewer JavaBeanを使用する前には、次のようなJavadoc生成のAPIドキュメントをよく読んで、JSPデモを試行しておくようにします。
MapViewerのBean APIのJavadocドキュメントは、次の書式のURLで入手できます。
http://host:port/mapviewer/mapclient
この書式では、host
とport
はOracle Fusion Middlewareが受信リクエストをリスニングする場所を示します。
デモはMapViewerに付属して提供され、Beanの使用方法を紹介しています。このJSPデモを試行できるようにするには、MapViewerのデモ・データセット(Oracle Technology Networkでダウンロード可能)をデータベースにインポートし、すべての必要なスクリプトを実行して設定を完了しておきます。JSPデモのURLの書式は次のとおりです。
http://host:port/mapviewer/demo/mapinit.jsp
この書式では、host
とport
はOracle Fusion Middlewareが受信リクエストをリスニングする場所を示します。このJSPページでMapViewerサービスのURLを確認した後、実際のデモ・ページであるmap.jsp
に進みます。
MapViewer Beanを使用するには、Beanを作成する必要があります(4.3.1項を参照)。作成すると、次のような種類の操作を実行するメソッドを起動できるようになります。
現行mapリクエストのパラメータの設定(4.3.2項を参照)
現行mapリクエストへのテーマまたは地物の追加(4.3.3項を参照)
mapリクエストへの動的に定義されたスタイルの追加(4.3.4項を参照)
現行mapリクエストにおけるテーマの操作(4.3.5項を参照)
MapViewerサービスへのリクエストの送信(4.3.6項を参照)
現行mapレスポンスからの情報の抽出(4.3.7項を参照)
データソースに関する情報の取得(4.3.8項を参照)
現行のマップ・ウィンドウでの非空間属性の問合せ(4.3.9項を参照)
シック・クライアントに対する最適なメソッドの使用(4.3.10項を参照)
各種操作のメソッドに関する項では、Beanの動作内容について概要を説明します。各メソッドのパラメータおよび戻り型などの詳細は、Javadoc生成のAPIドキュメント(4.2項を参照)を参照してください。
MapViewer Beanを使用する際の最初の手順は、Beanを作成することです。次に例を示します。
import oracle.lbs.mapclient.MapViewer; MapViewer mv = new MapViewer("http://my_corp.com:8888/mapviewer/omserver");
このコンストラクタに対する唯一のパラメータは、実際のMapViewerサービスに対するURLです。setServiceURL
を使用して別のURLに変更しないかぎり、このURLにあるMapViewerサービスが、このBeanから後続のすべてのリクエストを受信します。作成されたMapViewer Beanには、空の現行マップ・リクエストが含まれています。この現行リクエストには、マップ画像の幅および高さや、マップのバックグラウンド・カラーなど、数個のパラメータが指定され、デフォルト値で初期化されています。これらのデフォルト値については、第3章のXML API要素および属性の説明を参照してください。
第3章で説明したように、マップ・リクエストには、生成されたマップ画像の最終的な外観に影響する多くのパラメータを使用できます。MapViewer JavaBeanを使用した場合、こうしたパラメータは、名前がsetで始まるメソッド・グループを使用して設定できます。これらのパラメータの多くには、getで始まる対応するメソッドがあります。たとえば、setAntiAliasing
はアンチエイリアシングをオンまたはオフに設定し、getAntiAliasing
は現行のアンチエイリアシング設定を返します。
現行mapリクエストのパラメータを設定するメソッドには、次のようなものがあります。
setAntiAliasing(boolean aa)
は、アンチエイリアシング技術を使用してマップをレンダリングする必要があるかどうかを指定します。
setBackgroundColor(java.awt.Color bg)
は、生成されるマップのバックグラウンド・カラーを設定します。
setBackgroundImageURL(java.lang.String bgImgUrl)
は、マップにレンダリングされるバックグラウンド・イメージのURLを設定します。
setBaseMapName(java.lang.String name)
は、明示的に追加されたテーマの前にレンダリングされるベース・マップの名前を設定します。
setBoundingThemes(String[] themeNames, double borderMargin, boolean preserveAspectRatio)
は、現行マップ・リクエストの枠テーマを設定します。このメソッドをコールすると、中心点およびボックスの以前の設定はすべて消去されます。
setBox(double xmin, double ymin, double xmax, double ymax)
は、データ座標領域内にマップ問合せウィンドウ・ボックスを設定します。このメソッドをコールすると、中心点およびサイズの以前の設定はすべて失われます。
setCenter(double cx, double cy)
は、このマップ・リクエストの中心点を設定します。ユーザー・データ領域に座標が格納されている必要があります。
setCenterAndSize(double cx, double cy, double size)
は、生成されるマップの中心およびサイズを設定します。すべてのデータがユーザー・データ領域に格納されている必要があります。
setDataSourceName(java.lang.String name)
は、マップのデータをロードする際に使用されるデータソースの名前を設定します。
setDefaultStyleForCenter(java.lang.String defRenderStyleName, java.lang.String defLabelStyleName, java.lang.String defLabel, double[] defRadii)
は、マップの中心(点)のデフォルト・スタイリングおよびラベル付けの情報を設定します。このメソッド以降に生成される各マップには中心点がレンダリングされます。オプションで、指定された半径の円でラベル付けすることもできます。
setDeviceSize(java.awt.Dimension dsz)
は、生成されるマップのイメージ・ディメンションを設定します。
setFullExtent()
は、次のマップ・リクエストで中心およびサイズ制限の指定をしないようにMapViewerサーバーに指示します。これにより、現行マップの中心およびサイズの設定は事実上解除されます。その結果、マップは自動的にすべての地物が表示されるように中央表示されます。
setImageFormat(int f)
は、マップの生成時にMapViewerで使用される画像形式を設定します。JSPページの場合は常に、FORMAT_PNG_URL
またはFORMAT_GIF_URL
に設定する必要があります。
setImageScaling(boolean is)
は、現在の問合せウィンドウに合わせて、イメージ・テーマ内の画像のスケールを自動的に変更するかどうかを指定します。デフォルトはTRUE
です。FALSE
を指定すると、MapViewerではスケールを変更せずに画像がレンダリングされますが、他の(ベクター)テーマが画像と適切に重なるように、元の問合せウィンドウが多少変更されることがあります。マップの中心が変更されることはありません。
setMapLegend(java.lang.String legendSpec)
は、現行マップで表示されるマップ凡例(XML形式)を設定します。凡例は、<legend>
要素(3.1.2.11項を参照)の形式で、legendSpec
パラメータで指定する必要があります。
setMapLegend(java.lang.String fill, java.lang.String fillopacity, java.lang.String stroke, java.lang.String profile, java.lang.String position, java.lang.String fontFamily, java.lang.String[][][] legenddata)
は、現行マップで表示されるマップ・リクエスト凡例を設定します。legenddata
属性には凡例項目が含まれます。その構成はString [x][y][z] legenddata
になります。ここで、x
は凡例列の数、y
は列項目の数、z
は凡例属性(0 =凡例テキスト、1 =スタイル名、2 =タイトルかどうか、3 =タブ、4 =セパレータかどうか)です。
setMapLegend(java.lang.String fill, java.lang.String fillopacity, java.lang.String stroke, java.lang.String profile, java.lang.String position, java.lang.String[][][] legenddata)
は、前述のメソッドと似ていますが、fontFamily
属性がありません。
setMapRequestSRID(int d)
は、マップ・リクエストの出力SRIDを設定します。MDSYS.CS_SRS表のSRIDの値と一致する必要があります。マップ・リクエストSRIDと異なるSRID値が指定されたテーマは、テーマのSRIDがnullでも0(ゼロ)でもない場合、出力SRIDに自動的に変換されます。マップ・リクエストSRIDが定義されていない場合(0(ゼロ)の場合)、テーマが異なるSRID値を持っていると、MapViewerはテーマのSRIDをリファレンスとして使用しますが、変換は行いません。
setMapResultFileName(String mapFile)
は、サーバー側の結果のマップ画像ファイルの名前を設定します。名前がnullに設定されている場合(デフォルト)、接頭辞omsmap
とカウンタ値に基づいてマップ画像ファイルが生成されます。カスタム・マップ・ファイル名を指定する場合、拡張子(.gif
または.png
)を指定する必要はありません。
setMapTitle(java.lang.String title)
は、生成されるマップのマップ・タイトルを設定します。
setServiceURL(java.lang.String url)
は、MapViewerサービスのURLを設定します。
setShowSVGNavBar(boolean s)
は、組込みSVGナビゲーション・バーを表示するかどうかを指定します。デフォルト値はTRUE
(ナビゲーション・バーを表示する)です。
setSVGOnClick(java.lang.String onClick)
は、SVGマップ用にonClick
関数を設定します。onClick
関数は、SVGマップが埋め込まれたWebページに定義されたJavaScript関数です。onClick
関数は、テーマ地物の選択およびウィンドウ選択の両方が無効の場合に、SVGマップをクリックするとコールされます。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
setSVGShowInfo(boolean info)
は、非表示情報が設定された地物の上にマウスを移動したときに、非表示情報を表示するかどうかを指定します。値がTRUE
(デフォルト)の場合、マウスをそのような地物の上に移動すると非表示情報が表示されます。FALSE
に設定すると、そのような地物の上にマウスを移動しても、非表示情報は表示されません。ただし、この値にかかわらず、SVGマップには非表示情報が常にレンダリングされます。このメソッドは、非表示情報を表示できるかどうかのみを制御します。
setSVGZoomFactor(double zfactor)
は、SVGマップのズーム係数を設定します。ズーム係数は、ズーム・レベルで整数値を1つ上げる(ズームイン操作)ごとに、現行のズーム比に掛ける数値です。ズーム係数値の逆数は、ズーム・レベルで整数値を1つ下げる(ズームアウト操作)ごとに使用されます。たとえば、zfactor
値が2(デフォルト)の場合、ズーム・レベル4からズーム・レベル5にズームインすると、2倍の大きさに拡大されます。たとえば、ズーム・レベル4でマップの1インチが10マイルを表す場合、ズーム・レベル5では5マイルを表します。ズーム比とはSVGマップの相対的なスケールのことで、元のサイズ(ズーム・レベル0)ではズーム比は1です。
setSVGZoomRatio(double s)
は、SVGマップが最初にロードされるときに使用されるズーム係数を設定します。デフォルト値は1で、これが元のマップ・サイズ(ズーム・レベル0)です。ズーム比を大きくするとマップはズームイン表示され、値を小さくするとズームアウト表示されます。
setWebProxy(java.lang.String proxyHost, java.lang.String proxyPort)
は、MapViewerサービスに接続する際に使用されるWebプロキシを設定します。このメソッドは、WebサービスとこのBean間にファイアウォールが存在する場合にのみ必要です。
mapリクエストに含めるベース・マップを指定する他に、テーマ、または任意のポイントや動的に生成されたルートなど個々のポイント地物および線形地物を、現行mapリクエストに追加できます。テーマには、定義がデータベースに格納されている事前定義済テーマや、現行リクエストにテーマを追加するときに実際の問合せ文字列を指定する動的テーマがあります。
動的テーマには、ジオメトリ・データを取得するテーマ(JDBCテーマ)、画像データを取得するテーマ(イメージ・テーマ)、GeoRasterデータを取得するテーマ(GeoRasterテーマ)、ネットワーク・データを取得するテーマ(ネットワーク・テーマ)およびトポロジ・データを取得するテーマ(トポロジ・テーマ)があります。動的テーマおよび地物については、レンダリングする際に使用するスタイルを明示的に指定する必要があります。動的テーマおよび地物を追加できることで、アプリケーション開発のニーズに柔軟に適応できます。
テーマおよび地物を現行マップ・リクエストに追加するためのメソッドには、addで始まる名前が付けられており、これには次のようなメソッドがあります。
addGeoRasterTheme
およびその変種は、現行マップ・リクエストにGeoRasterデータを追加します。問合せ文字列を指定してラスター・データを取得する場合や、必要なGeoRaster情報を指定して特定の画像を取得する場合があります。(GeoRasterテーマの詳細は、2.3.4項を参照してください。)
addImageTheme
およびその変種はイメージ・テーマを追加するもので、マップの一部としてレンダリングされる画像データを取得するための問合せ文字列を指定する必要があります。(イメージ・テーマの詳細は、2.3.3項を参照してください。)
addJDBCTheme
およびその変種はJDBCテーマを追加するもので、ジオメトリ・データを取得するための問合せ文字列を指定する必要があります。(JDBCテーマの詳細は、2.3.2項を参照してください。)
addLinearFeature
およびその変種は、単一線形地物(線文字列)を現行マップ・リクエストに追加します。レンダリング・スタイルを指定する必要があります。ラベルを描画するためのラベル・テキストおよびテキスト・スタイルを指定でき、重なるかどうかにかかわらずラベルを常に表示するかどうかも指定できます。ユーザー・データ領域に座標が格納されている必要があります。追加できる線形地物の数は無制限です。
addLinksWithinCost
は、ネットワーク・テーマを現行マップ・リクエストに追加します。追加するテーマは、ネットワーク・データのコスト内分析の結果となります。コスト内分析は、指定したコスト内のすべてのノードを検索し、各ノードへの最短パスを生成します。
addNetworkLinks
は、ネットワーク・リンクをネットワーク・テーマとして現行マップ・リクエストに追加します。レンダリング・スタイルを指定する必要があります。
addNetworkNodes
は、ネットワーク・ノードをネットワーク・テーマとして現行マップ・リクエストに追加します。レンダリング・スタイルを指定する必要があります。
addNetworkPaths
は、ネットワーク・パスをネットワーク・テーマとして現行マップ・リクエストに追加します。レンダリング・スタイルを指定する必要があります。
addNetworkTheme
およびその変種は、ネットワーク・リンク、ノードおよびパスをネットワーク・テーマとして現行マップ・リクエストに追加します。レンダリング・スタイルを指定する必要があります。(ネットワーク・テーマの詳細は、2.3.5項を参照してください。)
addPointFeature
およびその変種は、単一ポイント地物を現行マップ・リクエストに追加します。このポイントは、すべてのテーマがレンダリングされた後、指定されたレンダリング・スタイルを使用してマップにレンダリングされます。オプションで、ポイント地物の横に描画するためのラベル・テキストを指定でき、重なるかどうかにかかわらずラベルを常に表示するかどうかも指定できます。さらに、半径の配列(単位は常にメートル)を指定することもできます。この場合、そのポイントを中心として一連の円が描画されます。ユーザー・データ領域に、座標x
およびy
が格納されている必要があります。拡張スタイルで使用するために、ポイント地物に属性値を割り当てられます。向きのあるポイント地物の場合は、方向パラメータを指定できます。追加できるポイント地物の数は無制限です。
addShortestPath
およびその変種は、ネットワーク・テーマを現行マップ・リクエストに追加します。追加されるテーマは、ネットワーク・データの最短パス分析の結果となります。最短パス・アルゴリズムに必要なパラメータを指定する必要があります。
addThemesFromBaseMap(java.lang.String basemap)
は、指定されたベース・マップ内のすべての事前定義済テーマを現行マップ・リクエストに追加します。このメソッドは、現行マップ・リクエストのテーマを操作できるという点で、setBaseMapName
(4.3.5項を参照)よりも便利です。
addTopologyDebugTheme
およびその変種は、トポロジ・データ構造をトポロジ・デバッグモード・テーマとして現行マップ・リクエストに追加します。輪郭、ノードおよび表面のレンダリング・スタイルを指定する必要があります。(デバッグ・モードなどのトポロジ・テーマの詳細は、2.3.6項を参照してください。)
addTopologyTheme
は、トポロジ地物をトポロジ・テーマとして現行マップ・リクエストに追加します。問合せ文字列を指定する必要があります。(トポロジ・テーマの詳細は、2.3.6項を参照してください。)
追加したポイント地物および線形地物をすべて削除するには、それぞれremoveAllPointFeatures
メソッドおよびremoveAllLinearFeatures
メソッドをコールします。
USER_SDO_STYLESビューに格納されたスタイルに加え、動的に定義された(一時的な)スタイルもマップ・リクエストに追加できます。このような動的に定義されたスタイルは、マップ・リクエストに一時情報を提供します。これらは常に、サーバーに送信する前にマップ・リクエストに追加する必要があります。
動的に定義されたスタイルをマップ・リクエストに追加するためのメソッドには、addで始まる名前が付けられています。リリース11gから、単一のメソッドaddStyle
によって、あらゆる種類の動的に定義されたスタイルをマップ・リクエストに追加できるようになりました。このメソッドの定義は、次のとおりです。
public void addStyle(java.lang.String name, StyleModel tempStyle)
先の定義で、StyleModel
はJavaクライアント・パッケージoracle.mapviewer.share.style
で定義されているインタフェースです。このパッケージにもoracle.mapviewer.share.stylex
パッケージにも、MapViewerによってサポートされているスタイルの全タイプの定義を表す具象スタイル・モデル・クラスが含まれています。これらのパッケージの詳細は、Javadocリファレンス・ドキュメントを参照してください。
次の抜粋したコードは、addStyleメソッドとColorStyleModelクラスを使用して動的色スタイルをmapリクエストに追加する方法を示しています。
import oracle.lbs.mapclient.*; import oracle.mapviewer.share.* … ColorStyleModel csm = new ColorStyleModel(); csm.setFillColor(new Color(255, 0, 0, 100)); csm.setStrokeColor(new Color(0, 0, 255, 100)); mapViewer.addStyle("my_color", csm);
addStyle
メソッドを使用するかわりに、次の各メソッドを使用して特定のタイプのスタイルを追加することもできます。
addBucketStyle(java.lang.String name, java.lang.String low, java.lang.String high, int nbuckets, java.lang.String []styleName)
は、等間隔のバケット・スタイルを追加します。範囲値、バケット数および各バケットのスタイル名を指定します。
addCollectionBucketStyle(java.lang.String name, java.lang.String []label, java.lang.String []styleName, java.lang.String [][]value)
は、コレクション・バケット・スタイルを追加します。ラベル、スタイル名および各バケットの値を指定します。
addColorSchemeStyle(java.lang.String name, java.lang.String baseColor, java.lang.String strokeColor, java.lang.String low, java.lang.String high, int nbuckets)
は、等間隔のカラー・スキーム・スタイルを追加します。カラー・パラメータ、範囲値およびバケット数を指定します。
addColorSchemeStyle(java.lang.String name, java.lang.String baseColor, java.lang.String strokeColor, java.lang.String []label, java.lang.String []low, java.lang.String []high)
は、カラー・スキーム・スタイルを追加します。カラー・パラメータおよび範囲値を指定します。
addColorStyle(java.lang.String name, java.lang.String stroke, java.lang.String fill, int strokeOpacity, int fillOpacity)
は、指定されたカラー・パラメータを持つカラー・スタイルを追加します。
addImageAreaStyleFromURL(java.lang.String styleName, java.lang.String imgURL)
は、MapViewerクライアントに領域記号としてGIFまたはJPEG画像を追加します。
addImageAreaStyleFromURL(java.lang.String styleName, java.lang.String imgURL, java.lang.String lineStyle)
は、MapViewerクライアントに領域記号としてGIFまたはJPEG画像を追加します。塗りつぶされた領域の境界線を描くためのパラメータも指定できます。
addImageMarkerStyleFromURL(java.lang.String styleName, java.lang.String imgURL, java.lang.String strokeColor, float strokeWidth, int strokeOpacity)
は、MapViewerクライアントにマーカー記号としてGIF画像を追加します。
addImageMarkerStyleFromURL(java.lang.String styleName, java.lang.String imgURL)
は、MapViewerクライアントにマーカー記号としてGIF画像を追加します。マップ上の地物に適用されるときの画像の幅および高さを指定するパラメータや、マーカーの内側または上部に表示されるテキスト・ラベルのフォント・プロパティも指定できます。
addImageMarkerStyleFromURL(java.lang.String styleName, java.lang.String imgURL)
は、MapViewerクライアントにマーカー記号としてGIF画像を追加します。
addImageMarkerStyleFromURL(java.lang.String styleName, java.lang.String imgURL, int desiredWidth, int desiredHeight, java.lang.String fontName, int fontSize, java.lang.String fontStyle, java.lang.String fontWeight, java.lang.String fontColor)
は、MapViewerクライアントにマーカー記号としてGIF画像を追加します。マップ上の地物に適用されるときの画像の幅および高さを指定するパラメータや、マーカーの内側または上部に表示されるテキスト・ラベルのフォント・プロパティも指定できます。
addLineStyle(java.lang.String name, java.lang.String fill, java.lang.String strokeWidth, boolean hasBase, java.lang.String baseFill, java.lang.String baseStroke, java.lang.String baseDash, boolean hasParallel, java.lang.String fillParallel, java.lang.String strokeParallel, boolean hasHashMark, java.lang.String fillHash, java.lang.String dashHash)
は、MapViewerクライアントに線スタイルを追加します。
addLineStyle(java.lang.String name, java.lang.String fill, java.lang.String strokeWidth, boolean hasBase, java.lang.String baseFill, java.lang.String baseStroke, java.lang.String baseDash, boolean hasParallel, java.lang.String fillParallel, java.lang.String strokeParallel, boolean hasHashMark, java.lang.String fillHash, java.lang.String dashHash, java.lang.String measureMarker, double measurePosition, int measureSize)
は、MapViewerクライアントに線スタイルを追加します。
addMarkerStyle(java.lang.String name, int mktype, java.lang.String strokeColor, java.lang.String fillColor, java.lang.String markerWidth, java.lang.String markerHeight, java.lang.String coords, java.lang.String radius)
は、特定のパラメータを持つベクター・マーカー・スタイルを追加します。利用可能なベクター・マーカー・スタイルのタイプは、MARKER_POLYGON
、MARKER_POLYLINE
、MARKER_CIRCLE
およびMARKER_RECT
です。
addTextStyle(java.lang.String name, java.lang.String style, java.lang.String family, java.lang.String size, java.lang.String weight, java.lang.String fill)
は、指定されたパラメータを持つテキスト・スタイルを追加します。
addVariableMarkerStyle(java.lang.String name, java.lang.String []label, java.lang.String baseMarker, int startSize,int increment, java.lang.String []low, java.lang.String []high)
は、可変マーカー・スタイルを追加します。ベース・マーカーのパラメータと各バケットのラベルおよび値を指定します。
deleteStyle(java.lang.String name)
メソッドをコールして、動的に定義されたスタイルを現行マップ・リクエストから削除したり、removeAllDynamicStyles
メソッドをコールして、すべての動的に定義されたスタイルを現行マップ・リクエストから削除したりできます。
addで始まるメソッドを使用してテーマを追加した後、テーマ名のリスト表示などの処理の実行、現行リクエストにおけるレンダリング順序でのテーマの順序変更、およびテーマの無効化や無効化されたテーマの有効化といった操作が可能です。ただし、(setBaseMapName
メソッドを使用して)ベース・マップを設定したときに暗黙的に含まれたテーマは操作できません。これは、MapViewerサービスがリクエストを処理するまで、ベース・マップ内のテーマのリストは実際に含められないためです。
現行mapリクエストのテーマを操作するメソッドには、次のようなものがあります。
deleteTheme(java.lang.String name)
は、明示的に追加されたテーマを現行マップ・リクエストから削除します。
enableThemes(java.lang.String[] themes)
は、名前が指定リストに含まれるすべてのテーマを有効化します。
getActiveTheme(double currentScale)
は、アクティブなテーマ、つまり、現行の表示マップ上の最上部のテーマの名前を取得します。
getThemeEnabled(java.land.String themeName)
は、指定されたテーマが現在有効であるかどうかを判断します。
getThemePosition(java.lang.String name)
は、明示的に追加されたテーマのレンダリング順序内の位置を返します。
getThemeVisibleInSVG(java.lang.String name)
は、指定されたテーマが現在SVGマップに表示されているかどうかを判断します。(テーマが表示可能でない場合は、非表示になっています。)
hasThemes
は、現行マップ・リクエストに、明示的に追加されたテーマが含まれるかどうかをチェックします。たとえば、現行リクエストでベース・マップ名のみを設定しており、いずれかのadd*Themeメソッドを使用して他のテーマを追加していない場合、このメソッドはFALSE
を返します。
moveThemeDown(int index)
は、レンダリングされるテーマのリストでテーマを1つ下に移動し、レンダリングの順序を後にします。
moveThemeUp(int index)
は、レンダリングされるテーマのリストでテーマを1つ上に移動し、レンダリングの順序を先にします。
setGeoRasterThemePolygonMask(java.lang.String name,double []coords)
は、GeoRasterテーマで適用されるポリゴン・マスクを設定します。ポリゴン・マスクの外側のGeoRaster領域は透明です。座標は、x1、y1、x2、y2、...のように定義します。データ座標領域にマスク座標が格納されている必要があります。
setLabelAlwaysOn(boolean labelAlwaysOn, java.lang.String name)
は、テーマの表示において2つ以上のラベルが重なる場合でも、MapViewerによってテーマ内のすべての地物がラベル付けされるかどうかを制御します。(MapViewerは常にラベルが重ならないようにします。)labelAlwaysOn
がTRUE
の場合、MapViewerでは、2つ以上のラベルが重なる場合でもすべての地物のラベルが表示されます。labelAlwaysOn
がFALSE
の場合、ラベルが重なることが避けられないときは、MapViewerによって1つ以上のラベルの表示が無効化されるため、重なることはありません。
setNetworkThemeLabels(java.lang.String name, java.lang.String linkLabelStyle, java.lang.String linkLabelColumn, java.lang.String nodeLabelStyle, java.lang.String nodeLabelColumn, java.lang.String pathLabelStyle, java.lang.String pathLabelColumn)
は、リンク、ノードおよびパスのネットワーク・テーマ・ラベル・パラメータを設定します。属性の列名は、リンク、ノードおよびパス表の既存の属性である必要があります。
setThemeAlpha(java.lang.String themeName, float alpha)
は、イメージ・テーマの透明度の値を設定します。
setThemeEnabled(boolean v, java.lang.String themeName)
は、現行マップ・リクエストで指定のテーマを有効または無効に設定します。
setThemeFastUnpickle(java.lang.String name, boolean noUnpickler)
は、データベースからフェッチされたSDO_GEOMETRYオブジェクトをMapViewerからアクセス可能なJavaオブジェクトに変換するために、MapViewerの高速な非Pickle化アルゴリズム(TRUE
、デフォルト)または汎用JDBC変換アルゴリズム(FALSE
)のどちらを使用するかを指定します。MapViewerの高速な非Pickle化アルゴリズムではパフォーマンスが向上しますが、場合によっては座標の精度が失われ(約0.00000005)、各座標ですべて正確な数値を保持する必要のあるアプリケーションに重大な影響を与える可能性があります。汎用JDBC変換アルゴリズムは、MapViewerの高速な非Pickle化処理より時間がかかりますが、精度が失われることはありません。
setThemeOnClickInSVG (java.lang.String theme, java.lang.String onClickFunction)
は、SVGマップ用にテーマのonClick
関数を設定します。onClick
関数は、SVGマップが埋め込まれたWebページに定義されたJavaScript関数です。onClick
関数は、テーマ地物の選択およびウィンドウ選択の両方が無効の場合に、SVGマップをクリックするとコールされます。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
setThemeScale(java.lang.String name, double minScale, double maxScale)
は、テーマを表示するための最小および最大スケール値を設定します。
setThemeSelectableInSVG (java.lang.String theme, boolean sel)
は、SVGマップ内でテーマを選択可能(TRUE
)または選択不可能(FALSE
)に設定します。テーマを選択可能に設定すると、SVGマップでテーマの任意の地物をクリックして選択できます。地物を選択すると、その色が変わり、ID(デフォルトではROWID)が記録されます。SVGマップで定義されたJavaScript関数getSelectedIdList()
をコールすると、選択したすべての地物のID値のリストを取得できます。SVGマップでのJavaScript関数の使用の詳細は、付録Bを参照してください。
setThemeUnitAndResolution(java.lang.String themeName, java.lang.String unit, double resolution)
は、イメージ・テーマの単位および解像度の値を設定します。
setThemeVisible(java.lang.String name, boolean vis)
は、SVGマップでテーマを表示(TRUE)または非表示(FALSE)に設定します。非表示に設定した場合でもテーマはレンダリングされますが、表示はされません。
一般にアプリケーション開発者は、特定のユーザー入力(現在表示されているマップでのマウス・クリックなど)の結果として、またはマップ・リクエストの一部の外観(新規バックグラウンド・カラーの設定など)を変更した後に、新規マップ・リクエストを発行します。実際には、MapViewer Bean (1つまたは複数)から中間層のMapViewerサービスに発行される急ぎのリクエストが多すぎないかぎり、必要なときにいつでもマップ・リクエストを発行できます。MapViewerサービスでは、リクエストの到着順序に従ってリクエストが処理されます。1つ目のリクエストからのレスポンスを受信する前に2つ目のリクエストを送信した場合、MapViewerでは、1つ目のリクエストの処理が続行され、完了後に2つ目のリクエストの処理が開始されます。
新規バックグラウンド・カラーへの変更やテーマのレンダリング順序を下げるなど、現行マップ・リクエストに変更を加えた場合も、マップ・リクエストを送信し、MapViewerサービスが実際にリクエストを受信して処理するまで、マップ表示では有効になりません。
MapViewerサービスにマップ・リクエストを送信するためのメソッドには、次のようなものがあります。
run
は、MapViewerサービスに現行マップ・リクエストを送信し、MapViewerサービスによって返されたマップ・レスポンスを取得します。
pan(int x, int y)
は、指定されたデバイス・ポイントにパンします。各座標は、画面またはディスプレイの単位(この場合はピクセル)で示されます。
zoomIn(double factor)
は、他のマップ・リクエスト・パラメータを変更せずにマップ上でズームインします。
zoomIn(int x, int y, double factor)
は、指定されたデバイス・ポイント上でズームインします。
zoomIn(int x1, int y1, int x2, int y2)
は、指定されたデバイス矩形上でズームインします。
zoomOut(double factor)
は、他のマップ・リクエスト・パラメータを変更せずに現行マップ上でズームアウトします。
zoomOut(int x, int y, double factor)
は、現行マップをズームアウトし、中心を再度決定します。
これらの各メソッドは、現行マップ・リクエストのすべてのプロパティに基づいて単一のXMLマップ・リクエスト・ドキュメントを組み立ててから、MapViewerサービスに送信します。MapViewer BeanがMapViewerサービスからレスポンスを受信した後、Beanは必要な後処理を実行し、レスポンスを使用できる状態にします。
これらのメソッドを使用するかわりに、Beanを使用せずにXMLリクエスト文字列を定型化した後、sendXMLRequest(java.lang.String req)
メソッドを使用してMapViewerサービスにリクエストを送信できます。ただし、このメソッドを使用する場合は、getXMLResponse
メソッドを使用してレスポンスを受信およびアンパックし、レスポンス文字列を自分で解析および解釈する必要があります。メソッドは、HTTP接続をオープンし、接続を介して文書を送受信するためにBeanの機能を使用しているのみであるため、Beanの状態は変化しません。
この項で説明しているメソッドはすべて、リクエストやレスポンスの送信中またはMapViewerサービスでの処理中に回復不能なエラーが発生した場合、例外をスローします。こうした例外には、リクエストを再試行したり、問題を直接ユーザーに報告するなど、適切な方法で対応する必要があります。
生成されたマップ画像または画像のURLなどの情報を、現行マップ・レスポンスから抽出できます。マップ・レスポンスから情報を抽出するためのメソッドには、次のようなものがあります。
getGeneratedMapImage
は、MapViewerサービスからのレスポンスに含まれる実際のマップ画像データを返します。その画像形式は、setImageFormat
メソッドを使用して、FORMAT_RAW_COMPRESSED
に設定する必要があります。getGeneratedMapImage
メソッドは、主にシック・クライアントで使用されますが、JavaServer Pageまたはサーブレットでも使用できます(MapViewerではサポートされていない形式で画像を保存する場合など)。
getGeneratedMapImageURL
は、アプリケーション・サーバーの、現在生成されているマップ画像に対するURLを返します。setImageFormat
メソッドを使用して、画像形式をFORMAT_PNG_URL
またはFORMAT_GIF_URL
に設定しておく必要があります。
多くの場合、現行マップ画像に表示されている空間地物に関連付けられた非空間属性を問い合せる必要があります。たとえば、特定の郡または郵便番号に属するすべての顧客所在地のマップを描画するためにマップ・リクエストを発行したとします。論理上の次の手順は、結果のマップ画像に表示された各顧客に関する詳細を調べることです。JSPまたはHTML環境では、MapViewerサービスから画像のみを取得するため、ユーザーからリクエストされた非空間情報をフェッチするには、サービスに対して別のラウンドトリップが必要です。この項では、この操作に役立つ一連のメソッドについて説明します。(ただし、4.3.10項に示すように、スタンドアロンのJavaアプリケーションまたはアプレットの環境でBeanを使用する場合は、単一リクエストで特定のテーマの非空間属性値および結果のマップ画像をどちらも取得できます。)
通常は、表示されたマップ上の地物をユーザーがクリックし、その地物に関する詳細(非空間属性)を要求します。このアクションは基本的に、必要な非空間属性がSELECT構文のリストに含まれ、空間フィルタをWHERE句とした問合せを使用して実装できます。空間フィルタはOracle Spatial and Graph SQL演算子であり、表列(カスタマ表のSDO_GEOMETRY型の列)内のジオメトリが特定のターゲット・ジオメトリ(この場合、ユーザーがマウスをクリックしたポイント)と空間的に相互作用しているかどうかをチェックします。問合せのWHERE句内の空間フィルタにより、ユーザーがクリックしたジオメトリに関連付けられた非空間属性のみが選択され、返されます。
フィルタリングを実行するには、Oracle Spatial and Graph演算子をコールする必要があります。ただし、MapViewerのBeanベースAPIを使用して情報を取得し、問合せのWHERE句に追加する空間フィルタ文字列を事前に組み立てられます。identify
メソッドは、タスクをさらに簡略化します。
現行マップ・ウィンドウで非空間属性を問い合せるメソッドには、次のようなものがあります。
doQuery
およびその変種は指定されたSQL問合せを実行し、結果セットを表す文字列の配列を返します。これらのメソッドは、BeanからデータベースへのJDBC接続を手動でオープンせずに独自の問合せを発行する場合に便利です。
doQueryInMapWindow
およびその変種は、doQuery
およびその変種を拡張したものです。これらのメソッドでは、現行マップ・ウィンドウを使用し、ユーザー指定の問合せに対して空間フィルタ処理が自動的に行われます。
getSpatialFilter(java.lang.String spatialColumn, int srid, boolean pre9i)
は、現行マップ・ウィンドウのコンテキストで独自の問合せを作成する際にWHERE句の条件として使用できる空間フィルタ文字列を返します。マップ・ウィンドウ全体に表示されているすべてのジオメトリについて、空間フィルタはTRUE
と評価します。このメソッドを使用して、表示されているテーマのすべての空間地物に関する情報を取得できます。
getSpatialFilter(java.lang.String spatialColumn, int srid, double xl, double yl, double xh, double yh, boolean pre9i)
は、特定のウィンドウで問合せを作成する際に問合せ条件として使用できる空間フィルタ文字列を返します。指定された(xl,yl, xh,yh)
データ・ウィンドウと相互作用するすべてのジオメトリについて、このフィルタはTRUE
と評価します。ウィンドウは、デバイスまたは画面の座標領域ではなく、ユーザーのデータ領域にあります。したがって、getSpatialFilter
メソッドを使用する前に、まずgetUserPoint
メソッドをコールし、ユーザーのマウスクリック・ポイントをユーザーのデータ領域内のポイントに変換する必要があります。
getUserPoint(int x, int y)
は、マウス・クリックに対応するユーザーのデータ領域ポイントを返します。
getUserPoint(int x, int y, java.lang.String dataSource, int outSRID)
は、指定した座標系(SRID値)を使用して、マウス・クリックに対応するユーザーのデータ領域ポイントを返します。
getUserPoint(int x, int y, java.lang.String dataSource, java.lang.String themeName)
は、指定されたテーマに関連付けられた座標系(SRID値)を使用して、マウス・クリックに対応するユーザーのデータ領域ポイントを返します。
getWhereClauseForAnyInteract(java.lang.String spatialColumn, int srid, double x, double y)
は、ユーザーのデータ領域内の指定ポイントと相互作用するジオメトリを返します。このメソッドは、getSpatialFilter
メソッドで指定されるものより正確な空間フィルタリング・メソッドを使用するWHERE句文字列を提供します。
getWhereClauseForAnyInteract(java.lang.String spatialColumn, int srid, double xl, double yl, double xh, double yh)
は、指定されたユーザー領域ウィンドウと相互作用するジオメトリの検索に使用できるWHERE句を返します。これはgetSpatialFilter
メソッドに似ていますが、より正確なバージョンのOracle Spatial and Graphフィルタリング・メソッドを使用します。
identify
およびその変種は、非空間属性を識別するための便利な方法を提供します。このメソッドは、非空間属性の問合せの作成方法について柔軟性および制御が必要ない場合に使用することをお薦めします。doQuery
メソッドと同様に、すべてのidentify
メソッドは、問合せの結果セットが含まれるdouble String
配列を返します。
JavaServer Pageにおいて、HTMLファイルでMapViewer Beanを使用する場合、表示されている地物の非空間属性を取得するには、MapViewerサービスに対する2つ目のラウンドトリップが必要です。また、JavaServer Pageを利用したHTMLファイルでは、あるマップ・リクエストから次のマップ・リクエストまでにほとんどのテーマが変更されない場合(マップの中心をズームインしたときなど)でも、MapViewerサービスでページが処理されるたびにすべてのテーマが再処理される必要があるため、各テーマのデータがデータベースから再度取得されます。(これは主に、MapViewerサービスのステートレスな性質と、リクエスト/レスポンス・モデルに基づく必要のあるユーザーの対話を処理するには、JSPコンテキストで提供されているメカニズムが不十分であることが原因です。)
ただし、J2SE(Java 2 Platform Standard Edition)アプリケーションおよびアプレットなどのシック・クライアント環境で作業している場合、Beanを使用する際に処理および帯域幅のオーバーヘッドを削減できます。この主な理由は、コンテンツ(マップを含む)の表示方法をより詳細に制御できるような環境では、ユーザーの対話へより的確に応答でき、クライアント側の状態をメンテナンスするためにより多くのリソースを割り当てることができるためです。
シック・クライアント・コンテキストでのみ使用できる主要な最適化として、ライブ地物があります。基本的に、ライブ地物はMapViewerサービスで生成される空間地物ですが、シック・クライアントに存在します。各ライブ地物には、ジオメトリ・データを表す実際の形状と、ユーザーが関心を持つ可能性のある一連の非空間属性が含まれます。ライブ地物を取得するには、シック・クライアントにおいて、親テーマがクリッカブルに設定される必要があります。クリッカブル・テーマを含むマップ・リクエストがMapViewerサービスに送信された場合、MapViewerでは、このテーマの地物を結果のマップにレンダリングしません。そのかわり、マップの一部として描画されていた一連の地物が、ライブ地物オブジェクトの配列として、リクエスト側のクライアントに返されます。マップの残りの部分はレンダリングされ、単一画像としてクライアントに送信されます。クライアントがライブ地物およびベース画像の両方を受信した後、この項で後述するいずれかのメソッドを使用して、付随するマップ画像の上にライブ地物をレンダリングする必要があります。
ライブ地物を使用するメリットの1つは、マップ・リクエストを送信するたびに、クリッカブル・テーマについてシック・クライアントがリクエストを発行する必要がないことです。たとえば、現行マップに対してズームインするリクエストの場合、クライアントは各ライブ地物に対して、ズームインしたマップ画像を表示するかどうかを決定できます。もう1つのより重要なメリットは、マップに表示されるすべての地物の非空間属性が、ユーザーがすぐに使用できる状態であることです。たとえば、ユーザーがマップ上の一定範囲の地物の上でマウスを動かすと、シック・クライアントは対応する非空間属性をすぐに取得し、マウスの軌跡をたどるポップアップ・ウィンドウにこれらの属性を表示できます。この種のアクションでは、MapViewerサービスに対するラウンドトリップは不要なので、より素早くユーザーにフィードバックが返されます。
シック・クライアントに最適なメソッドには、次のようなものがあります。
drawLiveFeatures(java.awt.Graphics2D g2, java.awt.Color stroke, java.awt.Color fill, double pointRadius, double strokeWidth)
は、MapViewerからこのクライアントに返されたすべてのライブ地物を描画します。
getLiveFeatureAttrs(int x, int y, int tol)
は、ユーザーがクリックした地物の非空間属性を取得します。
highlightFeatures
およびその変種は、ユーザー指定の矩形と交差しているすべてのライブ地物をハイライトします。これらのメソッドでは、ハイライトした地物のスタイルも指定できます。
isClickable(java.lang.String themeName)
は、指定したテーマがクリッカブルかどうか(つまり、ユーザーがテーマをクリックしてその属性を取得できるかどうか)をチェックします。
setClickable(boolean v, java.lang.String themeName)
は、テーマをクリッカブルに設定します(これにより、テーマの地物はライブ地物としてクライアントで使用可能になり、ユーザーがクリックしてその属性を取得できるようになります)。
一連の地物を取得し、これらをシック・クライアントでライブにしておくには、最初にsetClickable
をコールし、地物をライブにするテーマを設定する必要があります。次に、現行マップ・リクエストを発行した後、BeanがMapViewerサービスからのレスポンスを処理します。このレスポンスには(成功した場合)、ベース・マップの画像およびLiveFeature
インスタンスの配列の両方が含まれます。その後、getGeneratedMapImage
をコールしてベース画像を取得および描画し、drawLiveFeatures
を使用して、ベース・マップの上に一連のライブ地物をレンダリングできます。ユーザーがマップ上の特定の位置でマウスをクリックしたり動かしたりした場合、highlightFeatures
メソッドを使用して、マップ上の選択された地物をハイライトできます。また、getLiveFeatureAttrs
メソッドを使用して、ハイライトされた地物に関連付けられている非空間属性を取得できます。LiveFeature
インスタンス自体には直接アクセスできません。
この項で説明したメソッドをJSPページのコンテキストでコールした場合の動作は、定義されていません。