使用不可機能: MapViewer PL/SQL API: MapViewer PL/SQL APIライブラリは使用不可になり、今後のドキュメントのリリースには含まれません。かわりに、(A)サポートされているMapViewer APIのいずれか、(B)MapViewer JavaScript APIを持つOracle Application Express(APEX)のどちらかを使用することを推奨します。 |
この章では、MapViewerに対するPL/SQL Application Program Interface(API)について解説します。このAPIを構成しているPL/SQLパッケージSDO_MVCLIENTは、Oracleデータベースの内部からMapViewerサービスにアクセスするOracle Databaseユーザーを対象としたものです。このパッケージは、MapViewerのほとんどの機能を公開しており、中間層で動作する実際のMapViewerサーバーとの通信を、マップ・リクエストを発行するユーザーにかわってすべて処理します。
SDO_MVCLIENTパッケージは現在、デフォルトではインストールされません。このパッケージは、MapViewerで提供されるsdomvclh.sql
およびsdomvclb.sql
という2つのSQLスクリプトを実行してインストールする必要があります。
インストールを実行するには、$MAPVIEWER_HOME
ディレクトリの下にあるsql
ディレクトリに移動してSQL*Plusを起動し、DBAロール(SYSTEMなど)を所持するユーザーとして接続した後、次のコマンドを入力します。
@sdomvclh @sdomvclb
この2つのスクリプトを実行したら、SQL*Plusを終了して$MAPVIEWER_HOME
/web/WEB-INF/lib
ディレクトリに移動し、シェル・コマンドloadjava
を使用してmvclient.jar
ファイルをMDSYSスキーマにロードします。例を次に示します(パスワード・マネージャを利用したSYSTEMアカウントの使用を想定)。
loadjava -force -schema mdsys -grant PUBLIC -user system mvclient.jar
Password: password
これで、データベース・ユーザーがSDO_MVCLIENT PL/SQLパッケージを使用できるようになります(使用方法については6.2項を参照)。
SDO_MVCLIENT PL/SQLパッケージは、HTTPプロトコルを介してMapViewerのリモート・サービスと通信します。データベース・セッションごとに、MapViewerクライアントのグローバル・ハンドル、および現行のマップ・リクエスト・オブジェクトとマップ・レスポンス・オブジェクトを維持します。
SDO_MVCLIENTパッケージの使用モデルはほとんど、MapViewer JavaBeanベースAPI(第4章を参照)と同じです。このPL/SQLパッケージでは、MapViewer JavaBeanベースAPI(oracle.lbs.mapclient.MapViewer
)に実装されているほとんどのメソッドを利用でき、JavaBeanベースAPIで使用されるのと同じメソッド名およびパラメータを使用します。特定の関数またはプロシージャの使用方法および参照情報については、関連するJavaBeanベースAPIのメソッドおよびインタフェースに関する解説(第4章)を参照してください。
このPL/SQLパッケージを介してMapViewerのサービスにアクセスする場合の基本的なワークフローは、一部の初期設定を除き、JavaクライアントAPIの場合とほとんど同じです。主要な手順について次の各項で説明します。
ネットワーク・アクセス権の付与(6.2.1項を参照)
MapViewerクライアント・ハンドルの作成(6.2.2項を参照)
マップ・リクエストの準備(6.2.3項を参照)
MapViewerサービスに対するリクエストの送信(6.2.4項を参照)
マップ・リクエストからの情報の抽出(オプション)(6.2.5項を参照)
SDO_MVCLIENTパッケージを使用する各データベース・ユーザーに、ネットワーク・アクセス権を付与します。たとえば、SCOTTというデータベース・ユーザーがこのパッケージを使用する必要がある場合、DBA権限を持つユーザーとして接続しているときに次の一般書式で文を入力します。
call dbms_java.grant_permission('SCOTT', 'SYS:java.net.SocketPermission', 'www.mycorp.com', 'connect, resolve' );
この例のwww.mycorp.com
は、MapViewerサービスが動作しているホストに変更してください。
Oracle Databaseのバージョンによっては、データベース・ユーザーMDSYS(SDO_MVCLIENTパッケージを所有)にネットワーク・アクセス権を付与する必要もあります。その場合は、DBA権限を持つユーザーとして接続しているときに、次の一般書式で文を入力します。
call dbms_java.grant_permission('MDSYS', 'SYS:java.net.SocketPermission', 'www.mycorp.com:8888', 'connect, resolve' );
この例のwww.mycorp.com
は、MapViewerサービスが動作しているホストに変更してください。
dbms_java.grant_permissionに対するコールは、影響を受けるデータベース・ユーザーごとに一度のみの実行でかまいません。この権限は、該当ユーザーにおける以降のすべてのデータベース・セッションで有効なままとなります。
SDO_MVCLIENTパッケージの関数またはプロシージャを使用する場合は、各データベース・セッションを開始する前に、MapViewerクライアント・ハンドルを作成する必要があります。次の例では、MapViewerクライアント・ハンドルを作成します。
connect scott
Enter password: password
call sdo_mvclient.createmapviewerclient(
'http://www.mycorp.com:8888/mapviewer/omserver') ;
この例では、現行セッション内で、MapViewerサービスのURL http://www.mycorp.com:8888/mapviewer/omserver
に対する一意なMapViewerクライアント・ハンドルを作成しています。この例を使用するには、www.mycorp.com
を、MapViewerサービスが動作しているホストに変更してください。
MapViewerクライアント・ハンドルの作成が終わったら、次の問合せを実行してMapViewerが正しく動作しているかどうかをチェックできます。
select sdo_mvclient.getdatasources() datasources from dual;
SQL関数sdo_mvclient.getdatasources()
は、MapViewer PL/SQLパッケージAPIに含まれています。この関数は、実行されると、リモートのMapViewerサーバーに接続し、認識されている全データソースのリストを取得します。インストールに成功し、MapViewerサーバーが動作中であると、先の例の結果として次のような出力が得られます。つまり、MapViewerサーバーで定義されている一連のデータソースの名前が含まれる文字列配列が得られます。
DATASOURCES -------------------------------------------------------------------------------- SDO_1D_STRING_ARRAY('mvdemo', 'wms')
PL/SQLパッケージ内の様々なメソッドをコールして、マップ・リクエストを準備します。このマップ・リクエストは最終的にMapViewerサーバーに送信されて処理されます。作成するマップの基本特性を指定したり、現行マップ・リクエストに一時スタイルや複数のテーマを追加したりできます。
例6-1では、データソースなどのマップ特性を設定し、動的に定義される色スタイルをマップ・リクエストに追加して、テーマを操作しています。
例6-1 マップ・リクエストの準備
call sdo_mvclient.setDataSourceName('mvdemo'); call sdo_mvclient.setImageFormat('PNG_URL'); call sdo_mvclient.setAntiAliasing('true'); call sdo_mvclient.setBaseMapName('qa_map') ; call sdo_mvclient.setBox(-122.3615, 37.4266, -121.1615, 37.6266); call sdo_mvclient.setDevicesize(500,400); call sdo_mvclient.addColorStyle('colorst', 'blue', 'yellow', 100,100); select sdo_mvclient.addJDBCTheme('mvdemo', 'theme1', 'select geom from states where state_abrv = ''CA''', 'geom', '8307', 'C.RED', null, null, 'FALSE') from dual ;
リモートのMapViewerサーバーに対して処理する現行マップ・リクエストを効率よく送信する例を次に示します。これはリクエストがサーバーで処理された後に返されます。
select sdo_mvclient.run() from dual;
また、sdo_mvclient.zoomIn()
やsdo_mvclient.zoomOut()
などのメソッドを使用すると、ズーム処理されたマップを取得できます。
生成されたマップ画像のURL文字列を抽出する例を次に示します。
select sdo_mvclient.getgeneratedMapImageURL() from dual;
マップ画像のURLを取得すると、データベース表に対する画像のフェッチや格納、その他の情報を持つマップのHTMLページへの表示など、様々な処理を実行できます。