Oracle® Fusion Middleware

Oracle MapViewerユーザーズ・ガイド

12cリリース2 (12.2)

E79361-01(原本部品番号:E60152-02)

2016年6月

様々な空間データを表示するマップのレンダリング・ツールである、Oracle MapViewerの使用方法について説明します。

Oracle Fusion Middleware Oracle MapViewerユーザーズ・ガイド, 12cリリース2 (12.2)

E79361-01

Copyright © 2001, 2016, Oracle and/or its affiliates. All rights reserved.

原本著者: Chuck Murray

原本協力者: Joao Paiva、L.J. Qian、Jayant Sharma、Honglei Zhu

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

例一覧

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 謝辞

- 表記規則

新機能と変更された機能

- MapViewerの中核

- Oracle Maps HTML Javascript API (V2)

1 MapViewerの概要

- 1.1 MapViewerの概要

- 1.1.1 MapViewerの基本的なアクション・フロー

- 1.1.2 MapViewerのアーキテクチャ

- 1.2 MapViewerを使用する前に

- 1.3 MapViewerのソフトウェア要件

- 1.4 WebLogic Server 12cのMapViewerのインストールおよびデプロイ

- 1.4.1 Universal InstallerによるMapViewerのデプロイ

- 1.4.1.1 WebLogic Serverのインストール

- 1.4.1.2 リポジトリ作成ユーティリティによる必要なJRFコンポーネントの作成

- 1.4.1.3 Universal InstallerによるMapViewerのインストール

- 1.4.1.4 WebLogic Serverの構成

- 1.4.1.5 WebLogic Serverの起動およびMapViewerの構成

- 1.4.2 展開されたMapViewer EARフォルダのWebLogic Serverへの手動デプロイ

- 1.4.2.1 MapViewerを手動でデプロイするための前提条件

- 1.4.2.2 MapViewer EARファイルのフォルダへの解凍

- 1.4.2.3 展開されたEARファイルからのMapViewerのデプロイ

- 1.4.3 展開されていないMapViewer EARファイルのWebLogic Serverへの手動デプロイ

- 1.4.3.1 展開されていないEARファイルからMapViewerをインストールするための準備

- 1.4.3.2 展開されていないEARファイルからのMapViewerのインストール

- 1.4.4 MapViewerのデプロイ後

- 1.4.4.1 デプロイが正常に実行されたかどうかの確認

- 1.4.4.2 SQLスクリプトの実行

- 1.4.4.3 MapViewer配列タイプの作成(必要な場合)

- 1.5 MapViewerのアップグレード

- 1.5.1 古いWebLogic Serverの停止

- 1.5.2 WebLogic Server 12cでのMapViewerのデプロイ

- 1.5.3 アップグレード・アシスタント・ウィザードの実行

- 1.6 MapViewerの管理

- 1.6.1 MapViewer管理ページへのログイン

- 1.6.2 MapViewerの構成

- 1.6.2.1 ログ情報の指定

- 1.6.2.2 マップ・ファイル格納情報およびライフ・サイクル情報の指定

- 1.6.2.3 管理(非マップ)リクエストの制限

- 1.6.2.4 Webプロキシの指定

- 1.6.2.5 グローバル・マップ構成オプションの指定

- 1.6.2.6 空間データ・キャッシュのカスタマイズ

- 1.6.2.7 セキュリティ構成の指定

- 1.6.2.8 カスタム・イメージ・レンダラの登録

- 1.6.2.9 カスタム空間プロバイダの登録

- 1.6.2.10 カスタムな非空間データ・プロバイダの登録

- 1.6.2.11 SRSマッピングのカスタマイズ

- 1.6.2.12 WMS GetCapabilitiesレスポンスのカスタマイズ

- 1.6.2.13 WMTS GetCapabilitiesレスポンスのカスタマイズ

- 1.6.2.14 Oracle Maps用マップ・タイル・サーバーの構成

- 1.6.2.15 永続マップ・データソースの定義

- 1.6.2.16 HTML5 API用のマップ・データ・サーバーの構成および保護

- 1.6.3 MapViewer管理タスクの実行

- 1.7 Oracle Real Application ClustersとMapViewer

- 1.7.1 MapViewerサーバーのOracle RACコンテナ・データソースの作成

- 1.7.1.1 Oracle RACコンテナ・データソースの作成

- 1.7.1.2 コンテナ・データソースによるMapViewerデータソースの作成

- 1.7.2 Oracle RACサービス名によるMapViewerデータソースの作成

- 1.7.3 MapViewerの再起動

- 1.8 高可用性とMapViewer

- 1.8.1 中間層クラスタでのMapViewerのデプロイ

- 1.9 セキュアなマップ・レンダリング

- 1.9.1 セキュアなマップ・レンダリングが機能する仕組み

- 1.9.2 Cookieからのユーザー名の取得

- 1.9.3 ユーザー認証: オプションとデモ

- 1.9.4 MapViewerでのシングル・サインオン(SSO)の使用

- 1.9.4.1 Oracle Access Managerのインストール

- 1.9.4.2 MapViewerの構成

- 1.9.4.3 Oracle Access Managerの構成

- 1.9.4.4 MapViewerのOracle Access Managerログアウト・パラメータの構成

- 1.9.4.5 Oracle HTTP Serverの構成

- 1.10 MapViewerのデモとチュートリアル

2 MapViewerの概念

- 2.1 MapViewerの概要

- 2.2 スタイル

- 2.2.1 スタイルのサイズ変更(スケーラブルなスタイル)

- 2.2.2 バケットのラベル・スタイルの指定

- 2.2.3 テキスト・ラベルおよびマーカーの方向設定

- 2.2.3.1 テキスト・スタイルの方位の制御

- 2.2.3.2 マーカーの方位の制御

- 2.2.4 テキスト・スタイルのスティッキー化

- 2.2.5 任意のスタイルを持つサンプル画像の取得

- 2.3 テーマ

- 2.3.1 事前定義済テーマ

- 2.3.1.1 事前定義済空間ジオメトリ・テーマのスタイリング・ルール

- 2.3.1.2 スタイリング・ルールに対するMapViewerでのSQL問合せの作成方法

- 2.3.1.3 バインディング・パラメータを含むスタイリング・ルール

- 2.3.1.4 1つのスタイリング・ルールへの複数のレンダリング・スタイルの適用

- 2.3.1.5 スケール範囲が指定された複数のレンダリング・スタイルの使用方法

- 2.3.1.6 事前定義済テーマのキャッシュ

- 2.3.1.7 地物ラベルと国際化

- 2.3.2 JDBCテーマ

- 2.3.2.1 2つの列に基づくポイントJDBCテーマの定義

- 2.3.2.2 複雑なJDBCテーマのデータベースへの格納

- 2.3.3 イメージ・テーマ

- 2.3.3.1 事前定義済イメージ・テーマの作成

- 2.3.4 GeoRasterテーマ

- 2.3.4.1 事前定義済GeoRasterテーマの作成

- 2.3.4.2 GeoRasterテーマでのビットマップ・マスクの使用

- 2.3.4.3 GeoRasterテーマの再投影

- 2.3.4.4 仮想モザイク・テーマ

- 2.3.5 ネットワーク・テーマ

- 2.3.5.1 事前定義済ネットワーク・テーマの作成

- 2.3.5.2 ネットワーク分析でのMapViewerの使用

- 2.3.6 トポロジ・テーマ

- 2.3.6.1 事前定義済トポロジ・テーマの作成

- 2.3.7 WFSテーマ

- 2.3.7.1 事前定義済WFSテーマの作成

- 2.3.8 WMTSテーマ

- 2.3.8.1 tile_resizing_option属性の動作

- 2.3.8.2 snap_to_tile_scaleおよびtile_resizing_option属性の使用に関するガイドライン

- 2.3.8.3 事前定義済WMTSテーマの作成

- 2.3.9 カスタム・ジオメトリ・テーマ

- 2.3.10 注釈テキスト・テーマ

- 2.3.11 線形参照システム(LRS)テーマ

- 2.3.12 テーマ・マッピング

- 2.3.12.1 外部属性データを使用したテーマ・マッピング

- 2.3.13 テーマの外観に影響を与える属性

- 2.4 マップ

- 2.4.1 マップのサイズおよびスケール

- 2.4.2 map凡例

- 2.5 データソース

- 2.5.1 カタログ・データ・ソース

- 2.5.1.1 Oracleデータベースからの必要なメタデータのエクスポート

- 2.5.1.2 必要な空間表のエクスポート

- 2.5.1.3 カタログ・データ・ソースを追加するためのMapViewer構成ファイルの編集

- 2.5.1.4 MapViewerサーバーの再起動

- 2.6 マップの生成方法

- 2.7 スキーマ間のマップ・リクエスト

- 2.8 MapViewerでのWorkspace Managerのサポート

- 2.9 MapViewerのメタデータ・ビュー

- 2.9.1 xxx_SDO_STYLESビュー

- 2.9.2 xxx_SDO_THEMESビュー

- 2.9.3 xxx_SDO_MAPSビュー

- 2.9.4 xxx_SDO_CACHED_MAPSビュー

- 2.10 Oracle Maps

- 2.10.1 Oracle Mapsの概要

- 2.10.2 Oracle Mapsアプリケーションのアーキテクチャ

3 MapViewerサーバー

- 3.1 MapViewerマップ・サーバー

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- 3.1.1.14 WFSマップ・リクエスト

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

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

- 3.1.2 マップ・リクエストのDTD

- 3.1.2.1 map_request要素

- 3.1.2.2 bounding_themes要素

- 3.1.2.3 box要素

- 3.1.2.4 center要素

- 3.1.2.5 geoFeature要素

- 3.1.2.6 jdbc_georaster_query要素

- 3.1.2.7 jdbc_image_query要素

- 3.1.2.8 jdbc_network_query要素

- 3.1.2.9 jdbc_query要素

- 3.1.2.10 jdbc_topology_query要素

- 3.1.2.11 legend要素

- 3.1.2.12 map_tile_theme要素

- 3.1.2.13 north_arrow要素

- 3.1.2.14 operation要素

- 3.1.2.15 operations要素

- 3.1.2.16 parameter要素

- 3.1.2.17 scale_bar要素

- 3.1.2.18 style要素

- 3.1.2.19 styles要素

- 3.1.2.20 theme要素

- 3.1.2.21 themes要素

- 3.1.2.22 theme_modifiers要素

- 3.1.3 情報リクエストのDTD

- 3.1.4 マップ・レスポンスのDTD

- 3.1.5 MapViewer例外DTD

- 3.1.6 ジオメトリDTD (OGC)

- 3.2 MapViewerマップ・データ・サーバー

- 3.2.1 ドメインとマップ・データ・サーバーURLのパターン

- 3.2.2 マップ・データ・サーバー・リクエストのパラメータ

- 3.2.2.1 事前定義済ジオメトリ・テーマからのデータの取得

- 3.2.2.2 JDBCテーマからのデータの取得

- 3.2.2.3 JDBCテーマからの注釈テキストの取得

- 3.2.2.4 トポロジ・データの取得

- 3.2.3 マップ・データ・サーバーから返されたデータの解釈

- 3.2.4 マップ・データ・サーバー・エラーの処理

- 3.3 マップ・タイル・サーバー

- 3.3.1 マップ・タイル・サーバーの概念

- 3.3.1.1 マップ・タイル層とマップ・タイル・ソース

- 3.3.1.2 マップ画像タイルのストレージ

- 3.3.1.3 マップ・タイルの座標系

- 3.3.1.4 タイル・メッシュ・コード

- 3.3.1.5 マップ・タイル・リクエスト

- 3.3.1.6 タイル処理ルール

- 3.3.1.7 タイルの背景色と範囲外の色

- 3.3.2 マップ・タイル・サーバーの構成

- 3.3.2.1 マップ・タイル・サーバーのグローバル構成

- 3.3.2.2 マップ・タイル層の構成

- 3.3.2.3 マップ・タイルのストレージ・スキーム: 内部メッシュ・コードまたはXYZ

- 3.3.2.4 外部Webマップ・ソースによるマップ・タイル層の作成

- 3.3.3 マップ・キャッシュの自動更新

- 3.3.3.1 mapViewerConfig.xml構成ファイルへの<dirty_tile_auto_update>要素の追加

- 3.3.3.2 タイル層定義への<auto_update>要素の追加

- 3.3.3.3 ダーティなMBR表、実表のログ表およびトリガーの作成

- 3.3.3.4 MapViewerサーバーの起動およびマップ・キャッシュの自動更新機能のテスト

- 3.3.4 マップ・タイルのUTFGrid: 地物に関するテキスト情報を含める

- 3.3.4.1 タイル層のUTFGridオプションの有効化

- 3.3.4.2 キーのエンコードとグリッド・セルの値のデコード

- 3.3.4.3 UTFGridテスト・ケースの作成

- 3.3.5 外部マップ・ソース・アダプタ

4 MapViewerのJavaBeanベースAPI

- 4.1 MapViewerのJavaBeanベースAPIの使用モデル

- 4.2 MapViewerのJavaBeanベースAPIを使用する前に

- 4.3 MapViewer Beanの使用方法

- 4.3.1 MapViewer Beanの作成

- 4.3.2 現行mapリクエストのパラメータの設定

- 4.3.3 現行mapリクエストへのテーマまたは地物の追加

- 4.3.4 mapリクエストへの動的に定義されたスタイルの追加

- 4.3.5 現行mapリクエストにおけるテーマの操作

- 4.3.6 MapViewerサービスへのリクエストの送信

- 4.3.7 現行mapレスポンスからの情報の抽出

- 4.3.8 データソースに関する情報の取得

- 4.3.9 現行マップ・ウィンドウでの非空間属性の問合せ

- 4.3.10 シック・クライアントに対する最適なメソッドの使用

5 MapViewer XMLリクエスト: 管理およびその他

- 5.1 データソースの管理

- 5.1.1 データソースの追加(管理)

- 5.1.2 データソースの削除(管理)

- 5.1.3 データソースの再定義

- 5.1.4 全データソースのリスト(管理または汎用)

- 5.1.5 データソースの有無のチェック(汎用)

- 5.2 タイル層の管理

- 5.2.1 クライアント側構成の取得

- 5.2.2 キャッシュ・ステータスの取得

- 5.2.3 キャッシュのクリア、プリフェッチまたはリフレッシュ

- 5.2.4 タイル・キャッシュのエクスポート

- 5.2.5 既存のキャッシュ管理タスクの停止、再開または削除

- 5.2.6 管理リクエストのステータスの取得

- 5.2.7 キャッシュ・インスタンスの作成または再定義

- 5.2.8 キャッシュ・インスタンスの削除

- 5.2.9 タイル層キャッシュ・サーバーの再起動

- 5.2.10 タイル層のオフライン化とオンライン化

- 5.3 全マップのリスト(汎用)

- 5.4 テーマのリスト(汎用)

- 5.5 スタイルのリスト(汎用)

- 5.6 事前定義済テーマで使用されるスタイルのリスト(汎用)

- 5.7 スタイル定義の取得(汎用)

- 5.8 メモリー内キャッシュの管理

- 5.8.1 データソースのメタデータ・キャッシュの消去(管理)

- 5.8.2 テーマに関する空間データ・キャッシュの消去(管理)

- 5.9 MapViewer構成ファイルの編集(管理)

- 5.10 MapViewerサーバーの再起動(管理)

6 Oracle Maps

- 6.1 対象地物(FOI)サーバー

- 6.1.1 テーマベースFOI層

- 6.1.1.1 事前定義済テーマベースFOI層

- 6.1.1.2 テンプレート付き事前定義済テーマ

- 6.1.1.3 動的JDBC問合せのテーマベースFOI層

- 6.1.2 ユーザー定義のFOIリクエスト

- 6.2 Oracle Maps JavaScript API

- 6.2.1 JavaScript API V1

- 6.2.2 JavaScript API V2

- 6.2.3 V1 APIとV2 APIの類似点と相違点

- 6.3 Oracle Mapsアプリケーションの開発

- 6.3.1 V1 APIの使用

- 6.3.1.1 1つまたは複数のマップ・タイル層の作成

- 6.3.1.2 FOIメタデータの定義

- 6.3.1.3 V1 APIを使用したクライアント・アプリケーションの作成

- 6.3.2 V2 APIの使用

- 6.3.2.1 V2 APIを使用したクライアント・アプリケーションの作成

- 6.4 Google MapsとBing Mapsの使用

- 6.4.1 クライアント側でのGoogle MapsおよびBing Mapsマップ・タイル層の定義

- 6.4.2 サーバー側での組込みマップ・タイル層の定義

- 6.5 Spherical Mercator座標系へのデータ変換

- 6.5.1 データ変換をスキップするトランスフォーメーション・ルールの作成

- 6.6 外部タイル層の動的な表示

7 Oracle Map Builderツール

- 7.1 Oracle Map Builderの実行

- 7.1.1 GDALおよびTeradataでテーマを作成するためのJavaライブラリ

- 7.2 Oracle Map Builderのユーザー・インタフェース

- 7.3 Map BuilderのWebバージョン

8 Oracle MapViewer Editor

- 8.1 MapViewer Editorの概要および使用方法

- 8.1.1 MapViewer Editorについて

- 8.1.2 MapViewer Editorのメイン・ウィンドウ

- 8.1.3 編集セッション

- 8.1.3.1 編集モード

- 8.1.3.2 セキュリティとマルチユーザー編集に関する考慮事項

- 8.1.4 スタート・ガイド: 一般的なワークフロー

- 8.1.4.1 USER_SDO_EDIT_SESSIONSビューのインストール

- 8.1.4.2 MapViewerデータソースの編集可能化

- 8.1.4.3 マップ・データ・サーバーのデータ・ストリーミングの許可

- 8.1.4.4 MapViewer Editorの起動とログイン

- 8.1.4.5 データソースの選択と新しいセッションの作成

- 8.1.4.6 セッションへのデータ層の追加

- 8.1.4.7 データ層プロパティの変更

- 8.1.4.8 マップ内の移動と編集モードの有効化

- 8.1.4.9 編集する地物の選択

- 8.1.4.10 セッションの編集内容の保存とマージ

- 8.1.5 既知の問題

- 8.2 MapViewer Editorのリファレンス

- 8.2.1 セッションと層のプリファレンス

- 8.2.1.1 <session-name>のプロパティ

- 8.2.1.2 コントロール層のプロパティ

- 8.2.1.3 データ層のプロパティ

- 8.2.2 編集セッション領域

- 8.2.2.1 セッション層とデータ層の操作用ツールバー

- 8.2.2.2 データ・レイヤー

- 8.2.2.3 描画プロパティ

- 8.2.2.4 ラベル付けプロパティ

- 8.2.3 マップ・キャンバス領域

- 8.2.3.1 ナビゲーション・パネル

- 8.2.3.2 マップ・スケール・バー

- 8.2.4 ツール領域

- 8.2.4.1 地物ツール

- 8.2.4.2 描画ツール

- 8.2.4.3 頂点ツール

- 8.2.4.4 グループ化ツール

- 8.2.4.5 ジオメトリ・ツール

- 8.2.4.6 変換ツール

A スタイル、テーマ、ベース・マップおよびマップ・タイル層のためのXML形式

- A.1 色スタイル

- A.2 マーカー・スタイル

- A.2.1 ベクター・マーカー・スタイル

- A.2.2 画像マーカー・スタイル

- A.2.3 TrueTypeフォントベースのマーカー・スタイル

- A.2.4 線上でのマーカー・スタイルの使用

- A.3 線スタイル

- A.4 領域スタイル

- A.5 テキスト・スタイル

- A.6 拡張スタイル

- A.6.1 バケット・スタイル

- A.6.1.1 離散値を含むコレクションベース・バケット

- A.6.1.2 個々の範囲ベース・バケット

- A.6.1.3 均等範囲バケット

- A.6.2 カラー・スキーム・スタイル

- A.6.3 可変マーカー・スタイル

- A.6.4 ドット密度マーカー・スタイル

- A.6.5 棒グラフ・マーカー・スタイル

- A.6.6 コレクション・スタイル

- A.6.7 可変円グラフ・スタイル

- A.6.8 ヒート・マップのスタイル

- A.7 テーマ: スタイリング・ルール

- A.8 ベース・マップ

- A.9 マップ・タイル層

B SVGマップのJavaScript関数

- B.1 ナビゲーション・コントロール関数

- B.2 表示コントロール関数

- B.3 マウスクリック・イベント・コントロール関数

- B.3.1 事前定義済マウスクリック・コントロール関数

- B.3.2 ユーザー定義のマウス・イベント・コントロール関数

- B.3.2.1 マップレベル関数

- B.3.2.2 テーマレベル関数

- B.3.2.3 選択イベント・コントロール関数

- B.4 その他のコントロール関数

C カスタム・イメージ・レンダラの作成および登録

D カスタム空間データ・プロバイダの作成および登録

- D.1 空間プロバイダ・クラスの実装

- D.2 MapViewerへの空間プロバイダの登録

- D.3 外部空間データのレンダリング

E MapViewerでのOGC WMSのサポート

- E.1 MapViewer用のWMSインタフェースの設定

- E.1.1 必要なファイル

- E.1.2 wmsという名前のデータソース

- E.1.3 SDO SRIDからEPSG SRIDへのマッピング・ファイル

- E.2 WMS仕様および対応するMapViewerの概念

- E.2.1 サポートされるGetMapリクエストのパラメータ

- E.2.1.1 BASEMAPパラメータ(MapViewerのみ)

- E.2.1.2 BBOXパラメータ

- E.2.1.3 BGCOLORパラメータ

- E.2.1.4 DATASOURCEパラメータ(MapViewerのみ)

- E.2.1.5 DYNAMIC_STYLESパラメータ(MapViewerのみ)

- E.2.1.6 EXCEPTIONSパラメータ

- E.2.1.7 FORMATパラメータ

- E.2.1.8 HEIGHTパラメータ

- E.2.1.9 LAYERSパラメータ

- E.2.1.10 LEGEND_REQUESTパラメータ(MapViewerのみ)

- E.2.1.11 MVTHEMESパラメータ(MapViewerのみ)

- E.2.1.12 REQUESTパラメータ

- E.2.1.13 SERVICEパラメータ

- E.2.1.14 SRS (1.1.1)パラメータまたはCRS (1.3.0)パラメータ

- E.2.1.15 STYLESパラメータ

- E.2.1.16 TRANSPARENTパラメータ

- E.2.1.17 VERSIONパラメータ

- E.2.1.18 WIDTHパラメータ

- E.2.2 サポートされるGetCapabilitiesリクエストおよびレスポンス機能

- E.2.3 サポートされるGetFeatureInfoリクエストおよびレスポンス機能

- E.2.3.1 GetFeatureInfoリクエストのGetMapパラメータ・サブセット

- E.2.3.2 EXCEPTIONSパラメータ

- E.2.3.3 FEATURE_COUNTパラメータ

- E.2.3.4 INFO_FORMATパラメータ

- E.2.3.5 QUERY_LAYERSパラメータ

- E.2.3.6 QUERY_TYPEパラメータ(MapViewerのみ)

- E.2.3.7 RADIUSパラメータ(MapViewerのみ)

- E.2.3.8 UNITパラメータ(MapViewerのみ)

- E.2.3.9 XパラメータおよびYパラメータ、またはIパラメータおよびJパラメータ

- E.2.3.10 GetFeatureInfoリクエストに対して検索される属性の指定

- E.3 WMSマップ・テーマの追加

- E.3.1 WMSマップ・テーマを追加するためのXML API

- E.3.2 事前定義済WMSマップ・テーマ定義

- E.3.3 WMSマップ・テーマによる認証

- E.3.4 WMSマップ・テーマを追加するためのJavaBeanベースAPI

- E.3.5 GetCapabilitiesレスポンスのカスタマイズ:追加オプション

- E.3.5.1 カスタムWMS Capabilitiesパラメータ(<custom_parameters>要素)

- E.3.5.2 カスタムWMS Capabilitiesサービス属性(<service_attributes>要素)

- E.3.5.3 カスタムWMS層属性(<layer_attributes>要素)

- E.3.5.4 カスタムWMS地物情報(<get_feature_info>要素)

F MapViewerでのOGC WMTSのサポート

- F.1 MapViewerのWMTSサービス

- F.2 WMTS操作

- F.2.1 GetCapabilities操作のサポート

- F.2.2 GetTile操作のサポート

- F.2.2.1 WMTS層およびマップ・キャッシュ・タイル層のマップ・タイル

- F.2.3 GetFeatureInfo操作のサポート

- F.2.3.1 OGC GetFeatureInfoリクエスト

- F.2.3.2 ポイント(x,y)でのMapViewer GetFeatureInfoリクエスト

- F.2.3.3 枠ボックス内のMapViewer GetFeatureInfoリクエスト

- F.3 MapViewerのWMTSサービスの準備

- F.3.1 事前定義済ジオメトリ・テーマの準備

- F.3.2 ベース・マップの準備

- F.3.3 タイル層の準備

- F.3.4 wmtsConfig.xmlポリシー・ファイルでのタイル層の公開

- F.3.5 MapViewer WMTSサービスの検証

索引

例の一覧

- 1-1 MapViewer構成ファイルの例

- 1-2 管理リクエストの制限

- 1-3 mds.xmlファイルの構成

- 1-4 セキュアなマップ・レンダリング用のPL/SQLパッケージ

- 1-5 セキュアなマップ・レンダリング用のビュー

- 1-6 セキュアなマップ・レンダリング用のデータソース定義

- 1-7 Cookie名を指定するデータソース定義

- 2-1 スケーラブルなマーカー・スタイル

- 2-2 スケーラブルな線スタイル

- 2-3 各バケットにテキスト・ラベル・スタイルを指定した拡張スタイル

- 2-4 方位ポイントのラベル付け

- 2-5 sticky属性を持つテキスト・スタイル

- 2-6 Airportテーマに対するスタイリング・ルールのXML定義

- 2-7 <rendering>要素を使用したスタイリング・ルール

- 2-8 積上げスタイルを持つテーマのスタイリング・ルール

- 2-9 マップ・リクエストのJDBCテーマ

- 2-10 列に基づくJDBCテーマ

- 2-11 列に基づくJDBCテーマ(問合せウィンドウ指定)

- 2-12 事前定義済テーマの複雑な問合せ

- 2-13 事前定義済イメージ・テーマの作成

- 2-14 SQL文を含むGeoRasterテーマ

- 2-15 ラスターIDおよびラスター・データ表を指定するGeoRasterテーマ

- 2-16 事前定義済GeoRasterテーマの作成

- 2-17 GeoRasterテーマで使用するGeoRasterデータの準備

- 2-18 事前定義済GeoRasterテーマのビットマップ・マスク

- 2-19 事前定義済GeoRasterテーマにおける再投影モード

- 2-20 ネットワーク・テーマ

- 2-21 事前定義済ネットワーク・テーマの作成

- 2-22 最短パス分析用のネットワーク・テーマ

- 2-23 コスト内分析用のネットワーク・テーマ

- 2-24 トポロジ・テーマ

- 2-25 デバッグ・モードを使用するトポロジ・テーマ

- 2-26 事前定義済トポロジ・テーマの作成

- 2-27 動的WFSテーマを含むWFSリクエスト

- 2-28 事前定義済WFSテーマの作成

- 2-29 事前定義済WFSテーマを含むマップ・リクエスト

- 2-30 動的WMTSテーマを含むリクエスト

- 2-31 事前定義済WMTSテーマの作成

- 2-32 事前定義済WMTSテーマを含むマップ・リクエスト

- 2-33 動的カスタム・ジオメトリ・テーマの定義

- 2-34 事前定義済カスタム・ジオメトリ・テーマの格納

- 2-35 事前定義済注釈テキスト・テーマのスタイリング・ルール

- 2-36 動的注釈テキスト・テーマの定義

- 2-37 デフォルト注釈列を含む動的注釈テキスト・テーマ

- 2-38 注釈テキスト・データを生成するためのスクリプト

- 2-39 LRSテーマの作成

- 2-40 事前定義済LRSテーマを含むマップ・リクエスト

- 2-41 Earthquakesテーマに対するスタイリング・ルールのXML定義

- 2-42 Earthquakesテーマの拡張スタイル定義

- 2-43 目盛付きカラー・スキームを使用した人口密度のマッピング

- 2-44 目盛付きカラー・スキームを使用した平均世帯収入のマッピング

- 2-45 各収入範囲の色を使用した平均世帯収入のマッピング

- 2-46 Gasoline Stationsテーマの拡張スタイル定義

- 2-47 Gasoline Stationsのテーマ定義のスタイリング・ルール

- 2-48 非空間(外部)データ・プロバイダの実装

- 2-49 ベース・マップのXML定義

- 2-50 マップ・リクエストに含まれる凡例

- 2-51 自動凡例に関するマップ・リクエスト

- 2-52 テーマが指定された自動凡例

- 2-53 スキーマ間のアクセス: ジオメトリ表

- 2-54 スキーマ間のアクセス: GeoRaster表

- 2-55 スキーマ間のアクセス: トポロジ地物表

- 2-56 スキーマ間のアクセス: ネットワーク表

- 2-57 マップ・リクエストのWorkspace Manager関連の属性

- 2-58 管理リクエスト内の<list_workspace_name>要素

- 2-59 管理リクエスト内の<list_workspace_session>要素

- 2-60 MDSYSスキーマ所有のスタイルの検索

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- 3-19 MapViewerと対話するPL/SQLプログラム

- 3-20 北向き矢印

- 3-21 GeoRasterテーマを使用した正規化オペレーション

- 3-22 GeoRasterテーマにおける正規化オペレーションのスタイリング・ルール

- 3-23 スケール・バー

- 3-24 MapViewer情報リクエスト

- 3-25 マップ・レスポンス

- 3-26 タイルを保存せずにストリーミングする

- 3-27 ベース・マップに基づいた内部マップ・タイル層のXML定義

- 3-28 テーマに基づいた内部マップ・タイル層のXML定義

- 3-29 外部マップ・タイル層のXML定義

- 3-30 外部マップ・ソース・アダプタ

- 3-31 MapSourceAdapter.getTileImageBytesの実装

- 5-1 詳細な接続情報の指定によるデータソースの追加

- 5-2 コンテナ・データソースの指定によるデータソースの追加

- 5-3 データソースの削除

- 6-1 FOI層用事前定義済テーマのXMLスタイリング・ルール

- 6-2 テンプレート付き事前定義済テーマのXMLスタイリング・ルール

- 6-3 動的JDBC問合せのテーマ

- 6-4 csdefinition.sqlスクリプトに定義されたトランスフォーメーション・ルール

- C-1 ECW画像形式に対応したカスタム・イメージ・レンダラ

- D-1 空間プロバイダ・クラスの実装

- D-2 外部空間データをレンダリングするマップ・リクエスト

- E-1 GetMapリクエスト

- E-2 GetCapabilitiesレスポンス(抜粋)

- E-3 GetFeatureInfoリクエスト

- E-4 GetFeatureInfoレスポンス

- E-5 WMSマップ・テーマの追加(XML API)

- E-6 事前定義されたWMSテーマの作成

- E-7 指定した認証を持つWMSテーマ

- E-8 カスタムWMS層属性

- E-9 カスタム属性を含むGetCapabilitiesレスポンス

- F-1 WMTSポリシー・ファイル(wmtConfig.xml)

- F-2 データソースのタイル層定義

- F-3 KVPエンコーディングのGetCapabilitiesリクエストからのレスポンス

- F-4 RESTエンコーディングのGetCapabilitiesリクエストからのレスポンス

- F-5 タイル層TEST_TLのベース・マップ定義

- F-6 タイル層TEST_TLのテーマの名前およびスタイリング・ルール

- F-7 OGC GetFeatureInfoリクエストからのレスポンス

- F-8 枠ボックス内のMapViewer GetFeatureInfoリクエストからのレスポンス

- F-9 スケール・セットGlobalCRS84Scaleのタイル定義

- F-10 スケール・セットGlobalCRS84Pixelのタイル定義

- F-11 スケール・セットGoogleCRS84Quadのタイル定義

- F-12 スケール・セットGoogleMapsCompatibleのタイル定義

- F-13 タイル層の公開

図一覧

- 1-1 MapViewerの基本的なアクション・フロー

- 1-2 MapViewerのアーキテクチャ

- 1-3 MapViewer「ようこそ」ページ

- 1-4 MapViewer管理ページ

- 1-5 サーバー・インスタンスの選択

- 1-6 JDBCデータソースの表示

- 1-7 GridLinkデータソースの作成

- 1-8 サーバー・インスタンスの選択

- 1-9 JDBCデータソースの表示

- 1-10 マルチ・データ・ソースの作成

- 1-11 新しい認証プロバイダの作成

- 2-1 異なるバケットに応じた様々なラベル・スタイル

- 2-2 方位ポイントのラベルのマップ表示

- 2-3 方位マーカー

- 2-4 指定したマーカー・スタイルのサンプル画像

- 2-5 指定した線スタイルのサンプル画像

- 2-6 テーマへのリソース・バンドルの指定

- 2-7 イメージ・テーマおよびボストンの道路を示すその他のテーマ

- 2-8 snap_to_tile_scale属性

- 2-9 tile_resizing_optionのunbiased値

- 2-10 tile_resizing_optionのexpand_biased値

- 2-11 tile_resizing_optionのcontract_biased値

- 2-12 テーマ・マッピング: 拡張スタイルとテーマの関係

- 2-13 凡例付きのマップ

- 2-14 Oracle Mapsアプリケーションのアーキテクチャ

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

- 3-2 枠テーマ

- 3-3 方位ベクトル

- 3-4 2つの同心円を示す<geoFeature>要素を含むマップ

- 3-5 列が2つのmap凡例

- 3-6 マップ・タイル・サーバーのワークフロー

- 3-7 経度/緯度座標系を使用したタイル処理

- 3-8 タイルのメッシュ・コード

- 3-9 内部メッシュ・コード・スキームとXYZマップ・タイルのストレージ・スキーム

- 4-1 MapViewer Beanの使用例

- 7-1 Oracle Map Builderのメイン・ウィンドウ

- 8-1 MapViewer Editorのメイン・ウィンドウ

- 8-2 編集セッションを開く

- 8-3 データソースの選択

- 8-4 空間データの追加

- 8-5 選択された地物

- 8-6 競合の解決

- 8-7 ナビゲーション・パネル

- 8-8 スケール・バー

- A-1 高速道路の盾記号マーカー

- A-2 白いバックグラウンドを持つテキスト・スタイル

- A-3 ピザ・レストランの分布を示すヒート・マップ

- D-1 カスタム・ジオメトリ・テーマおよび外部空間データを使用したマップ画像

- E-1 Map Builderを使用したWMSテーマでの認証の指定

- F-1 GetTileリクエストに対するレスポンスの画像タイル

- F-2 ポイント(x,y)でのMapViewer GetFeatureInfoリクエストからのレスポンス

- F-3 MapViewer GetFeatureInfoリクエストの枠ボックス

表一覧

- 1-1 MapViewerアプリケーション・ドメインの保護されたURIおよび公開URIの設定

- 2-1 スタイル・タイプおよび適用可能なジオメトリ・タイプ

- 2-2 Gasoline Stationsテーマで使用される表

- 2-3 xxx_SDO_STYLESビュー

- 2-4 xxx_SDO_THEMESビュー

- 2-5 xxx_SDO_MAPSビュー

- 2-6 xxx_SDO_CACHED_MAPSビュー

- 3-1 GeoRasterテーマ・オペレーションのイメージ処理オプション

- 6-1 V1とV2のAPIクラス間の対応関係

はじめに

『Oracle Fusion Middleware Oracle MapViewerのためのユーザーズ・ガイド』では、様々な空間データを表示するマップのレンダリング・ツールである、Oracle MapViewer (MapViewer)のインストールおよび使用方法を説明します。

対象読者

このドキュメントは、主にマップの描画が必要なアプリケーションを開発するプログラマを対象としています。Oracleデータベースの概念およびDTDを含むXML関連の主要概念を理解している必要があります。さらに、Oracle SpatialまたはOracle Locatorの概念を熟知しているか、少なくともOracle Spatial and Graph開発者ガイドにアクセスできる必要があります。

このドキュメントでは、Webサイトまたはクライアント・アプリケーションのエンド・ユーザーは対象にしていません。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracleサポートへのアクセス

サポートを購入したオラクル社のお客様は、My Oracle Supportを介して電子的なサポートにアクセスできます。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、Oracle Databaseのドキュメント・セットに含まれる次のドキュメントを参照してください。

- Oracle Spatial and Graph開発者ガイド

- Oracle Spatial and Graph GeoRaster開発者ガイド

- Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド

- Oracle Database概要

- Oracle Database SQL言語リファレンス

Oracle Fusion Middlewareのドキュメント・セットに含まれる次のドキュメントも参照してください。

- Oracle Fusion Middleware高可用性ガイド

謝辞

この製品には、Cynthia Brewerが開発したカラー仕様およびデザインが含まれています(http://colorbrewer.org/)。

OpenStreetMap (OSM) のタイルの使用は、各著作者の著作権(© OpenStreetMapへの協力者)および利用規約に従うものとします。詳細は、http://www.openstreetmap.org/copyrightおよびhttp://wiki.openstreetmap.org/wiki/Tile_usage_policyを参照してください。

MVDEMOデータセットは、Natural Earthからのものです(http://www.naturalearthdata.com)。利用規約は、http://www.naturalearthdata.com/about/terms-of-use/を参照してください。

表記規則

このドキュメントでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

新機能と変更された機能

この項では、以前のMapViewerリリース以降の主な新機能と変更された機能について説明します。この項では、新機能を「MapViewerの中核」と「Oracle Maps HTML Javascript API (V2)」の小区分に分類しています。

MapViewerの中核

この項では、Map Builderツールなど、MapViewer全般に関連する機能について説明します。

リリース11gからリリース12.2.1.1へのMapViewerのアップグレード

MapViewerリリース11gの既存インストールがあり、そのMapViewer構成をOracle Fusion Middlewareリリース12.2.1.1で使用する場合は、1.5項「MapViewerのアップグレード」を参照してください。

マップ・タイルのUTFGrid

タイル層のUTFGridが有効になっていると、UTFGridという名前のデータセットは画像タイルの「コンパニオン」になります。コンパニオンは、画像タイル内の地物プロパティに関するテキスト情報を含んでいます。このテキスト情報は、Webアプリケーションのツールチップや情報ウィンドウとして、最新のOracle Maps HTML5 APIで表示できます。

詳細は、2.3.11項「線形参照システム(LRS)テーマ」を参照してください。

GeoRaster仮想モザイクのサポート

MapViewerサーバーにサポートが追加され、Oracle Spatial and GraphのGeoRasterデータベースに含まれる仮想モザイク機能に基づいた事前定義済テーマを作成できるようになりました。

Map BuilderでのSpatial and GraphデータのgeoJsonへのエクスポート

Map Builderでは、Spatial and Graphデータベースに保存されたベクター・データをgeoJsonファイルにエクスポートするオプションが使用できるようになりました。エクスポートには、非定型問合せ、または事前定義済テーマを使用します。

再記述されたWeb管理コンソール

MapViewerには、軽量のWeb管理コンソールが付属するようになりました。このコンソールは、純粋なHTMLとJavaScriptで記述されています。これにより、事実上すべてのJavaEEコンテナにMapViewerサーバーを簡単にデプロイできます。

Oracle Maps HTML Javascript API (V2)

この項では、Oracle Maps HTML5 Javascript API (V2)の機能について説明します。詳細は、第6章を参照してください。

動的なタイル層

新しいOracle Maps HTML5 JavaScript APIを使用すると、非定型問合せや、有効なMapViewer XMLマップ・リクエストに基づいて、簡単に動的なタイル層を作成できます。このようなタイルはクライアント側専用であり、データベースにメタデータを作成する必要はありません。

高度な編集機能

Oracle Maps JavaScript APIのレッドライン・ツールは、共有境界線の編集など、さらに強力な機能を提供するように強化されています。

SVGファイルベースのマーカー

OM.style.Markerクラスは、あらゆるSVGファイルをsrc属性として受け入れるようになりました。これまでは、画像ベースのマーカーについては、PNG画像とGIF画像のみがsrcとして使用可能でした。

サーバー側スタイル・サポートの強化

別のドメインで実行しているMapViewerからスタイルをロードできるようになりました。

toXMLStringメソッド

スタイル・クラスには、サーバー側スタイル定義への変換を簡単にするためのtoXMLStringメソッドが含まれるようになりました。外部マップ・サーバー・サポートの例(3.3.5項「外部マップ・ソース・アダプタ」を参照)では、このtoXMLStringメソッドを使用しています。

1 MapViewerの概要

Oracle Fusion Middleware MapViewer (MapViewer)は、Oracle Spatial and GraphまたはOracle Locator (Locatorとも呼びます)によって管理される空間データを使用してマップをレンダリングするための、プログラム可能なツールです。MapViewerには、空間データの問合せおよび地図レンダリングの複雑さを意識させず、より上級のユーザーに対してはカスタマイズ可能なオプションを提供するツールが備わっています。これらのツールは、プラットフォームに依存しない方法でデプロイでき、マップ・レンダリング・アプリケーションと統合するように設計されています。

この章の主な項目は、次のとおりです。

- 1.1項「MapViewerの概要」

- 1.2項「MapViewerを使用する前に」

- 1.3項「MapViewerのソフトウェア要件」

- 1.4項「WebLogic Server 12cのMapViewerのインストールおよびデプロイ」

- 1.5項「MapViewerのアップグレード」

- 1.6項「MapViewerの管理」

- 1.7項「Oracle Real Application ClustersとMapViewer」

- 1.8項「高可用性とMapViewer」(上級ユーザー向け)

- 1.9項「セキュアなマップ・レンダリング」

- 1.10項「MapViewerのデモとチュートリアル」

注意:
MapViewerリリース11gの既存インストールがあり、そのMapViewer構成を最新のOracle Fusion Middlewareリリースで使用する場合は、1.5項「MapViewerのアップグレード」を参照してください。

1.1 MapViewerの概要

MapViewerは、Oracle Fusion Middlewareの一部として出荷されます。その主要な提供物は、Oracle Fusion Middlewareの場合と同様に、Java EE (Java Platform, Enterprise Edition)コンテナにデプロイできるJava EEアプリケーションです。MapViewerには、次の主要なコンポーネントが含まれています。

- SDOVISという名前のコア・レンダリング・エンジン(Javaライブラリ)。地図レンダリングを実行します。レンダリング機能をWebアプリケーションに公開するためのサーブレットが提供されています。

- MapViewer機能に対するプログラマブルなアクセスを許可する一連のApplication Program Interface (API)。これらのAPIには、XML、JavaおよびAJAXベースのJavaScript APIが含まれています。

- グラフィカル・マップ・ビルダー・ツール。マップ記号の作成、空間データ・レンダリング・ルールの定義、およびMapViewerオブジェクトの作成と編集が行えます。

- Oracle Maps。インタラクティブな地理空間Webアプリケーションの開発を容易にするマップ・キャッシュ・サーバーおよびFOI (対象地物)サーバーが含まれます。

コア・レンダリング・エンジンは、Java Database Connectivity (JDBC)によってOracleデータベースに接続します。また、データベースからマップ・メタデータ(Map Builderツールによって作成されたマップ定義、スタイル指定ルール、記号など)を読み取り、レンダリング操作の際にそのメタデータを適用して空間データを取得します。

XML APIは、アプリケーションの開発者に対し、マップ・リクエストをMapViewerに発行してマップ・レスポンスを受け取るための多様なインタフェースを提供します。JavaBeanベースのAPIを使用すると、MapViewerのレンダリング機能にアクセスできます。JavaScript APIを使用すると、MapViewerのOracle Maps機能を使用する、インタラクティブ性の高いWebアプリケーションを作成できます。

Map Builderツールを使用すると、空間データベース内のマップ、テーマおよび記号メタデータの作成と管理のプロセスを簡略化することができます。このツールについては、第7章を参照してください。

MapViewerのコア機能の上に構築されたOracle Mapsでは、マップ画像タイルをキャッシングするマップ・タイル・サーバーと、データベースからライブ・データを取り出してストリーミングしインタラクティブな地物としてマップ上に表示する対象地物(FOI)サーバーを使用します。AjaxベースのJavaScript APIとOracle Mapsを併用すると、高度なマッピング・ソリューションが得られます。Oracle Mapsでは、高度なカスタマイズ機能および問合せ機能もサポートしています。

MapViewerの主要な利点は、Oracle Spatial and Graph、Oracle LocatorおよびOracle Fusion Middlewareとの統合にあります。MapViewerでは、Oracle Spatial and Graphに格納されている2次元ベクター・ジオメトリ、GeoRasterのデータ、およびOracle Spatial and Graphのトポロジおよびネットワーク・データ・モデル内のデータをサポートしています。Oracle MapViewerは、Open Geospatial Consortium (OGC)に準拠したWeb Map Service (WMS)およびWeb Map Tile Service (WMTS) サーバーでもあります。

1.1.1 MapViewerの基本的なアクション・フロー

MapViewerの基本的なアクション・フローには、クライアントによってマップまたはMapViewer管理アクションのどちらがリクエストされた場合にも、2つの手順から構成されるリクエスト/レスポンス・モデルがあります。

mapリクエストの場合:

1. クライアントによってマップがリクエストされ、マップ名、データソース、中心位置、マップ・サイズおよびオプションでマップ最上部に表示するその他のデータが渡されます。

2. サーバーにより、map画像(または画像のURL)、マップの最小外接矩形(MBR)およびリクエストのステータスが戻されます。

MapViewer管理リクエストの場合:

1. クライアントによってMapViewer管理アクションがリクエストされ、特定タイプのリクエストおよび適切な入力値が渡されます。

2. サーバーにより、リクエストのステータスおよびリクエストされた情報が戻されます。

図1-1では、MapViewerの基本的なアクション・フローを示しています。

図1-1 MapViewerの基本的なアクション・フロー

1.1.2 MapViewerのアーキテクチャ

図1-2では、MapViewerのアーキテクチャを示しています。

図1-2 MapViewerのアーキテクチャ

図1-2では次のことが示されています。

- MapViewerは、Oracle Fusion Middleware中間層の一部です。

- MapViewerにはレンダリング・エンジンが含まれます。

- MapViewerは、HTTPプロトコルを使用して、クライアントのWebブラウザまたはアプリケーションと通信できます。

- MapViewerは、データベースへのJDBCコールによって、空間データ・アクセス(Oracle Spatial and GraphまたはOracle Locatorのデータの読取りおよび書込み)を実行します。

- データベースには、マッピング・メタデータの他に、Oracle Spatial and GraphまたはOracle Locatorが含まれます。

1.2 MapViewerを使用する前に

MapViewerの使用を開始するには、次の手順を実行します。

1. MapViewerのインストールおよびデプロイの前後いずれかで、第2章に目を通し、重要な用語および概念を確実に理解しておきます。

2. 前提条件となるソフトウェア(1.3項を参照)を所有していることを確認します。

3. MapViewerをインストール(必要な場合)およびデプロイします(1.4項を参照)。

4. MapViewerを使用して、基本タスクをいくつか実行します。たとえば、Oracle Mapsアプリケーション(第6章を参照)を作成します。

5. オプションとしてMap Builderツール(第7章を参照)を使用し、スタイル、テーマおよびマップと、それぞれのオプションについて理解しておきます。また、空間データをプレビューすることもできます。

1.3 MapViewerのソフトウェア要件

MapViewerを使用するには、以下のソフトウェアが必要です。

- Oracle MapViewerでサポートされるJava EEサーバー(http://www.oracle.com/technetwork/middleware/mapviewer/j2ee-server-support-097757.htmlを参照)

- Oracle Spatial and GraphオプションまたはOracle Locator (リリース10g以上)を備えたOracle Database

- JDBC Oracle Call Interface (OCI)機能を使用する必要がある場合は、Oracle Client (リリース10g以上)。ただし一般に、MapViewerと併用するにはJDBCシン・ドライバをお薦めします。その場合、Oracle Clientは不要です。

- Java SDK 1.6以上

また、MapViewerではJ2SE SDKでHeadless AWTメカニズムがサポートされています。これによって、MapViewerは、X11 DISPLAY変数を設定することなく、LinuxシステムまたはUNIXシステム上で動作できます。LinuxシステムまたはUNIXシステムでAWT Headlessモードを有効にするには、コマンドラインに次のように指定してMapViewerを起動します。

-Djava.awt.headless=true

1.4 WebLogic Server 12cのMapViewerのインストールおよびデプロイ

WebLogic Server 12c中間層で実行するMapViewerをインストールおよびデプロイするには、次のいずれかの方法を使用できます。

- WebLogic Server Universal Installerを使用します。1.4.1項の説明を参照してください。

- 展開されたMapViewer EARフォルダを手動でデプロイします。1.4.2項の説明を参照してください。

- 展開されていないMapViewer EARファイルを手動でデプロイします。1.4.3項の説明を参照してください。

MapViewerではADFコンポーネントを使用するため、必要なコンポーネントを全体インストールの一部としてインストールする必要があります。MapViewerはJava EE Webアプリケーションであり、インストール後にコンテナのHTTPポートで着信マップ・リクエストをリスニングします。

1.4.1 Universal InstallerによるMapViewerのデプロイ

この項では、Universal Installerを使用してWebLogic Server 12cにMapViewerをデプロイする方法を説明します。WebLogic Server 12cがインストールされていない場合は、最初にインストールしてからMapViewerをインストールする必要があります。この項の内容は次のとおりです。

- WebLogic Serverのインストール(必要な場合)

- リポジトリ作成ユーティリティによる必要なJRFコンポーネントの作成(必要な場合)

- Universal InstallerによるMapViewerのインストール

- WebLogic Serverの構成

- WebLogic Serverの起動およびMapViewerの構成

1.4.1.1 WebLogic Serverのインストール

WebLogic Serverをインストールする必要がある場合は、次の手順を実行します。

1. Java環境が正しく設定されていることを確認します。JDK8以降である必要があります。次に例を示します。

java -version

結果は次のように表示される必要があります

java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

2. http://www.oracle.com/technetwork/developer-tools/adf/downloads/に移動します。

3. ライセンス契約を読み、同意してください。

4. 「Application Development Runtime」で、必要なバージョンを選択します。例: 12.2.1.1.0

5. インストール・ガイドと、必要条件および推奨されるインストール・プロセスの、情報とリンクに注意してください。詳細は、各ガイドを参照してください。

6. 「ファイルのダウンロード」をクリックして、選択した場所(一時フォルダなど)にファイルを保存します。

7. ダウンロード・ページに記載されている説明に従って、インストールを実行します。通常、これらには、ダウンロードされた.zipファイルの解凍と.jarファイルを抽出、インストールを実行するためのコマンドの実行が含まれています。次に例を示します。

java -jar fmw_12.2.1.1.0_infrastructure.jar

詳細は、使用しているオペレーティング・システム用のWebLogic Serverのインストレーション・マニュアルを参照してください。

1.4.1.2 リポジトリ作成ユーティリティによる必要なJRFコンポーネントの作成

リポジトリ作成ユーティリティ(RCU)は、WebLogic Serverの構成に必要なJava Runtime Framework (JRF)コンポーネントをデータベースにロードします。これらのJRFコンポーネントがロード済でない場合は、この項の手順を実行してください。

このRCUプログラムは、$Oracle_Home/oracle_common/binフォルダにあります(例: /scratch/Oracle/Middleware/Oracle_Home/oracle_common/bin)。(Oracle_Homeフォルダは、1.4.1.1項「WebLogic Serverのインストール」で指定しています。)RCUプログラムが保存されているフォルダに移動し、次の手順を実行します。

1. RCUプログラムを起動します。例:

./rcu

2. 「ようこそ」ページが表示されたら、「次へ」をクリックします。

3. 「リポジトリの作成」ページで、デフォルト(「システム・ロードおよび製品ロード」)を受け入れます。
このデータベース接続を作成するデータベース・ユーザーにはDBA権限が必要です。

「次へ」をクリックします。

4. 「データベースの詳細」ページで、フィールドの情報を入力します。
この接続のデータベース・ユーザーにはSYSDBAロールが必要です。

「次へ」をクリックします。(前提条件チェックの進行状況がポップアップ・ウィンドウに表示されます。)

5. 「コンポーネントの選択」ページでは、次の手順に従います。

- このセッションで作成されたすべてのスキーマに対する一意の接頭辞は、既存の接頭辞を選択するか、任意の接頭辞を新規に作成します。

- リポジトリ・コンポーネントでは、メタデータ・サービス、監査サービス、監査サービスへの追加、監査サービス・ビューアおよびOracle Platform Security Servicesが選択されていることを確認します。

- Common Infrastructure Services行(この行は編集不可)のスキーマ所有者の名前(DEV_STB)を書き留めておきます。WebLogic Serverの構成時にこの名前を入力する必要があります(1.4.1.4項「WebLogic Serverの構成」)。

「次へ」をクリックします。

6. 「スキーマ・パスワード」ページで、データベースに作成されるスキーマのパスワードを設定します。すべてのスキーマに同じパスワードを使用することも、異なるパスワードを使用することもできます。これらのパスワードは、WebLogic Serverの構成時にコンポーネントの取得で必要になります。
「次へ」をクリックします。

7. 「表領域のマップ」ページでデフォルトを受け入れ、「次へ」をクリックします。

8. 「サマリー」ページでは、情報を確認して「作成」をクリックします。

9. 「完了サマリー」ページでは、情報を確認します。Component Infrastructure Servicesスキーマの所有者(DEV_STB)および指定したパスワードを入力する必要があります。
完了したら、ウィンドウを閉じてリポジトリ作成ユーティリティ(RCU)を終了します。

1.4.1.3 Universal InstallerによるMapViewerのインストール

WebLogic Serverのインストールが完了したら、Universal Installerを使用してMapViewerをインストールできます。

Oracle Technology Networkからmapviewer_generic.jarファイルをダウンロードし、/scratch/tmpなどの任意のフォルダに保存し、次の手順を実行します。

1. mapviewer_generic.jarファイルを保存したフォルダに移動します。次に例を示します。

cd /scratch/tmp

2. Java環境が正しく設定されていることを確認します。JDK8以降である必要があります。次に例を示します。

java -version

結果は次のように表示される必要があります

java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

3. インストール・プログラムを起動します。例:

java -jar mapviewer_generic.jar

MapViewer 12cインストールの「ようこそ」ページが表示されます。

「次へ」をクリックします。

4. 「インストール場所」ページで、1.4.1.1項「WebLogic Serverのインストール」で指定したOracle_Homeのインストール場所を指定します。例:

/scratch/Oracle/Middleware/Oracle_Home

「次へ」をクリックします。

5. 「前提条件チェック」ページでは、オペレーティング・システムとJavaバージョンの確認が行われます。終了したら、「次へ」をクリックします。

6. 「インストール・サマリー」ページに、このインストールのサマリー・レポートが表示されます。確認した後、「インストール」をクリックします。
「インストールの進行状況」ページに、インストールのステップと進行状況が表示されます。

7. 「インストール完了」ページでは、MapViewerの作成のドメイン・オプションを確認します。

- このオプションが有効な(選択されている)場合、「終了」をクリックするとWebLogic Serverの構成プログラムに移動してMapViewerのデプロイが開始されます。

- このオプションを無効に(選択解除)した場合、「終了」をクリックした時にWebLogic Serverの構成プログラムに自動的に移動することはありません。ただし、後でこのプログラムを手動で起動する必要があります。

1.4.1.4 WebLogic Serverの構成

WebLogic Serverを構成するには、次の手順を実行します。

1. 1.4.1.3項「Universal InstallerによるMapViewerのインストール」の最後の手順でMapViewerの作成ドメイン・オプションを選択しなかった場合は、$Oracle_Home/wlserver/common/binに移動して構成ウィザード(config.shファイル)を起動します。次に例を示します。

cd /scratch/Oracle/Middleware/Oracle_Home/oracle_common/common/bin
./config.sh

2. 「構成タイプ」ページでは、MapViewerの新しいドメインを作成する必要があるため、Create new domainオプションを選択します。
ドメインの場所を指定するか、デフォルトの場所を受け入れます(デフォルトの場所は/scratch/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domainに類似しています)。「次」をクリックします。

3. 「テンプレート」ページで、「製品テンプレートを使用してドメインを作成」を選択します。

- 「製品テンプレートを使用してドメインを作成」を選択します。

- Template Categories: All Categories

- Available Templates: 次の項目が選択されていることを確認します。

Oracle MapViewer-12.2.1.1.0 [oracle_common]
Oracle JRF 12.2.1.1.0 [oracle_common]
WebLogic Coherence Cluster Extension-12.2.1.1.0 [wlserver]

「次へ」をクリックします。

4. 「管理者アカウント」ページでは、アカウントの名前を入力するかデフォルトの名前を受け入れ、パスワードを入力および確認し、「次へ」をクリックします。(名前とパスワードは、管理者アカウントへのログイン時に必要になります。)

5. ドメイン・モードとJDKページでは、適切なドメイン・モード(開発環境または本番)およびJDKの場所を選択し、「次へ」をクリックします。

6. 「データベース構成タイプ」ページで、必要な情報を指定します。スキーマ所有者およびスキーマ・パスワードには、1.4.1.2項「リポジトリ作成ユーティリティによる必要なJRFコンポーネントの作成」からの値を指定します(このユーティリティを実行した場合)。たとえば、スキーマ名はDEV_STBなどです。
情報を入力した後、「RCU構成の取得」をクリックしてリポジトリ作成ユーティリティによってデータベースにロードされたスキーマ・データを取得します。この操作が完了したら、「次へ」をクリックします。

7. JDBCコンポーネント・スキーマ・ページで一覧表のすべてのスキーマ(LocalSvcTbl Schema、OPSS Audit Schema、OPSS Audit Viewer SchemaおよびOPSS Schema)を選択して、「次」をクリックします。

8. 「拡張構成」ページで、「管理サーバー」を選択して「次へ」をクリックします。(オプションで、「次へ」をクリックする前に、後続のウィザード・ページで指定するその他の任意の拡張構成オプションを選択できます。)

9. 「管理サーバー」ページでは、各オプションのデフォルト値を受け入れるか、別の値を指定します。デフォルト値の例:「サーバー名」はAdminServer、「リスニング・アドレス」はAll Local Addresses、「リスニング・ポート」は7001。
「サーバー・グループ」で、オプションJRF-MAN-SVRとMAPVIEWER-MAN-SVRを選択して、MapViewerがAdminServerでデプロイされるようにします。

「次へ」をクリックします。

10. 「構成のサマリー」ページでは、いくつかのビュー(Deployment、Application、Service)を選択して構成の詳細を確認した後、「作成」をクリックしてMapViewerのドメインを作成します。

11. 「構成の進行状況」ページでは、ドメイン作成の進行状況およびステップが表示されます。終了したら「次へ」をクリックします。

12. 構成に成功しましたのページでは、「ドメインの場所」(WebLogic Serverの起動のためにこの場所に移動する必要があります)および管理サーバーのURL(MapViewerサーバーの管理のためにこの場所に移動する必要があります)を書き留めておきます。(これらのリンクを今すぐクリックする必要はありません。)

「拡張構成」ページで追加のオプションを選択した場合は、追加の構成手順があります。特に、Oracle RACデータ・ソースを使用し、Oracle JRF (Java Required Files)で管理対象サーバーにデプロイする場合は、次の点に注意してください。

- JRF (またはEnterprise Manager)をドメインに展開する場合は、MDSおよびOPSSの各スキーマがリポジトリ作成ユーティリティ(RCU)によって作成されることを確認してください。(これらのスキーマはMapViewer自体では使用されませんが、これらはJRFの依存コンポーネントです。)

- Enterprise ManagerまたはJRFテンプレートは、MapViewerのデプロイ先と同じ管理対象サーバーをターゲットにする必要があります。つまり、ADFおよびJRFの各ライブラリおよび関連サービスが、ターゲット管理対象サーバーで使用可能である必要があります。

- RCUスキーマへの接続に使用されるMDSおよびOPSSなどのすべてのJRF関連データ・ソースが同じ管理対象サーバーにデプロイされることを確認してください。マルチ・タイプのデータ・ソースを使用する場合(Oracle RACデータベースの場合によく使用される)、すべてのマルチ・タイプのデータ・ソースとそれらの子の汎用タイプ・データ・ソースが管理対象サーバーにデプロイされることを確認してください。(これらのデータ・ソースはMapViewerでは使用されませんが、サーバーの起動時およびアプリケーションのデプロイのためにJRFで必要になります。MapViewerはADF FacesライブラリのためにJRFに依存し、これらはMapViewer管理コンソールで使用されます。)

1.4.1.5 WebLogic Serverの起動およびMapViewerの構成

WebLogic Serverを起動し、MapViewer管理タスクを実行するには、次の手順を実行します。

1. WebLogic Serverを起動し、ドメインの場所に移動し、startWebLogic.shを実行します。次に例を示します。

cd /scratch/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain
./startWebLogic.sh

WebLogic管理者のユーザー名とパスワードを求められたら、1.4.1.4項「WebLogic Serverの構成」で指定した値を入力します。

2. サーバーが実行されたら、ブラウザ・ウィンドウを開き、管理サーバーのURLを入力します(1.4.1.4項「WebLogic Serverの構成」を参照)。

3. WebLogic Server管理コンソールで、「デプロイメント」の下にあるmapViewerを見つけます。mapViewer名をクリックすると、MapViewerの設定ページが表示されます。

4. MapViewerの設定ページで「テスト」タブをクリックして、mapviewerノードを展開します。デフォルトのMapViewer URLをクリックして、ブラウザでアプリケーションを開きます。

5. MapViewer管理のユーザー名とパスワードを入力します(通常ではWebLogic Server管理の場合と同じです)。

6. MapViewer管理ホームページでは、様々な管理タスクを実行できます。たとえば、マップ・データ・ソースを構成するには、次の手順を実行します。

1. ページの左上の「構成」をクリックします。

2. 表示されたXMLテキスト領域で、コメントアウトされた<map_data_source>要素を見つけます。コメント文字を削除し、定義するデータ・ソースに対して有効となるように要素定義を変更します。

3. 「保存」をクリックし、「再起動」をクリックして、変更を適用します。(MapViewerの再起動中に進行状況バーが表示されます。)

4. MapViewerが再起動された後に、「管理」リンクをクリックすると、データ・ソースが追加されていることを確認できます。

1.4.2 展開されたMapViewer EARフォルダのWebLogic Serverへの手動デプロイ

この項では、展開されたEARフォルダからMapViewerをWebLogic Serverに手動でデプロイする方法を説明します。内容は次のとおりです。

- MapViewerを手動でデプロイするための前提条件

- MapViewer EARファイルのフォルダへの解凍

- 展開されたEARファイルからのMapViewerのデプロイ

1.4.2.1 MapViewerを手動でデプロイするための前提条件

MapViewerを手動でデプロイするには、その前に次の操作が完了している必要があります。

1. WebLogic Server 12cがインストール済である(1.4.1.1項「WebLogic Serverのインストール」を参照)

2. 必要なJava Runtime Framework (JRF)コンポーネントが作成済である(1.4.1.2項「リポジトリ作成ユーティリティによる必要なJRFコンポーネントの作成」を参照)

3. WebLogic Serverが構成済である(1.4.1.4項「WebLogic Serverの構成」を参照)
(MapViewerおよびMapViewerサンプル・テンプレートが表示されず、選択できない場合、それは1.4.1.3項「Universal InstallerによるMapViewerのインストール」の手順をスキップしたからです。)

4. WebLogic Serverが起動済である(1.4.1.5項「WebLogic Serverの起動およびMapViewerの構成」を参照)

1.4.2.2 MapViewer EARファイルのフォルダへの解凍

Oracle Technology NetworkからMapViewerのアーカイブ・ファイルmapviewer.earをダウンロードし、WebLogicを実行しているサーバーのディレクトリに解凍する必要があります。このディレクトリがMapViewerインストールの作業フォルダになり、デフォルトでは、MapViewerはこの場所から構成ファイルを読み取って、生成したマップ画像をサブディレクトリに保存します。これは(一時的ではなく)永続的なものにすることをお薦めします。同一のMapViewerバイナリを複数のホストで稼働する複数のWebLogic Serverにデプロイする場合は、共有ディレクトリにすることができます。

MapViewerディレクトリは、通常mapviewer.warまたはmapviewerという名前(またはMapViewerのデプロイ先のコンテキスト・パスと同じ名前)です。

次の手順では、/scratch/ul/mapviewerという名前のディレクトリをMapViewerの最上位ディレクトリに作成済であることを想定しています。別のディレクトリを作成した場合は、手順をそれに従って読み替えてください。次の手順に従って、このディレクトリにmapviewer.earファイルを解凍します。

1. mapviewer.earを/scratch/ul/mapviewerにコピーします。

2. カレント・ディレクトリが/scratch/ul/mapviewerでない場合は、このディレクトリに移動します。

3. mapviewerrm.earをmapviewer.earという名前に変更します。

4. mapviewer.earという名前のサブディレクトリを作成します。

5. mapviewer1.earをmapviewer.ear(つまり/scratch/ul/mapviewer/mapviewer.ear)に解凍します。

6. mapviewer.earディレクトリに移動します。

7. web.warをweb1.warという名前に変更します。

8. web.warという名前のサブディレクトリを作成します。

9. web1.warをweb.war(つまり/scratch/ul/mapviewer/mapviewer.ear/web.war)に解凍します。

これでmapviewer.earファイルは解凍され、構成済です。デプロイメント・ディレクトリ(mapviewer.earフォルダ)の下に、多数のサブディレクトリがあります。デバッグ、管理、手動構成を行うには、いくつかのサブディレクトリを少し探索し、それらを理解することが必要な場合もあります。このMapViewerデプロイメント例の主要サブディレクトリの一部を次に示します。

/mapviewer.ear
META-INF/
web.war/
console/
css/
fsmc/
css/
images/
jslib
icons/
jet/
jslib/
v2/
META-INF/
scripts/
templates/
WEB-INF/
admin/
catalogs/
classes/
conf/
lib/
tags/
xsd/

/web.war/fsmcディレクトリにはOracle Maps JavaScript V1 APIライブラリが含まれ、/web.war/jslibディレクトリにはOracle Maps JavaScript V2 APIライブラリが含まれています。ディレクトリ/web.war/WEB-INFとそのサブディレクトリには、一連のライブラリと、MapViewerの管理および構成用ファイルが含まれています。

MapViewerのEARファイルは展開済フォルダに解凍されているので、WebLogic Serverへのフォルダのデプロイを開始できます。MapViewerのデプロイメント・ステージに進む前に、WebLogic Serverが適切に構成され、起動して実行中であることを確認する必要があります。

1.4.2.3 展開されたEARファイルからのMapViewerのデプロイ

展開されたMapViewer EARフォルダをWebLogic Serverにデプロイするには、次の手順を実行します。

1. WebLogic Server管理コンソール・ページにログインします。

2. WebLogic Serverが本番モードで構成されている場合は、サーバーをロックします。「チェンジ・センター」→「変更と再起動の表示」に移動し、「ロックして編集」をクリックします。

3. 「ドメイン構造」→「デプロイメント」に移動します。

4. 「デプロイメント」ページで、デプロイメント・リストの上にある「インストール」をクリックします。

5. 「アプリケーション・インストール・アシスタント」の「インストールおよびデプロイの準備をするデプロイメントの選択」で、「パス」に/scratch/ul.mapviewerを指定し、「現在の場所」でmapviewer.ear (展開済EARフォルダ)を選択し、「次へ」をクリックします。

6. 「ターゲット指定スタイルの選択」では、デフォルト(Install this deployment as an application)を受け入れます。「次へをクリックします。

7. 「オプション設定」では、サービス・アクセスシビリティで「I will make this deployment accessible from the following location」を選択し、それ以外はデフォルトを受け入れます。
このオプションにより、解凍されたMapViewerの場所がMapViewerの「作業」ディレクトリになります。また、将来MapViewerをアップグレードする際の作業が容易になり、新しいmapviewer.earファイルをこのディレクトリにアンパックし、WebLogic Serverを再起動するだけで、アップグレードが可能です。「終了」をクリックしてデプロイメントのサマリー・ページに進みます。

「終了」をクリックします。

8. MapViewerデプロイメントの「デプロイメントのサマリー」ページで、「チェンジ・センター」→「変更と再起動の表示」の下の「変更のアクティブ化」をクリックしてデプロイメントをアクティブ化します。

9. 次のようにMapViewerを起動します。

1. 「チェンジ・センター」→「変更と再起動の表示」に移動し、「ロックして編集」をクリックします。

2. 「ドメイン構造」→「デプロイメント」に移動します。

3. 「デプロイメント」リストで、mapviewerを選択します。

4. 「デプロイメント」リストの下の「起動」→「すべてのリクエストを処理」をクリックします。
これでMapViewerは起動されました(「状態」がActive)。

必要に応じて、MapViewer管理コンソールにログインして管理タスクを実行します(たとえば、1.4.1.5項「WebLogic Serverの起動およびMapViewerの構成」を参照してください)。

1.4.3 展開されていないMapViewer EARファイルのWebLogic Serverへの手動デプロイ

この項では、MapViewerアーカイブ・ファイルであるmapviewer.earファイルをWebLogic Server 12cにデプロイするための準備および手動でデプロイする方法を説明します。内容は次のとおりです。

- 展開されていないEARファイルからMapViewerをインストールするための準備

- 展開されていないEARファイルからのMapViewerのインストール

1.4.3.1 展開されていないEARファイルからMapViewerをインストールするための準備

展開されていない(アーカイブ)ファイルからMapViewerをデプロイするには、その前にフォルダを作成し、そのフォルダに構成ファイルをコピーしておく必要があります。フォルダの作成場所に関する要件はありませんが、MapViewerのプライベート・フォルダとして機能するフォルダを指定し、展開されたWEB-INF/confフォルダ下の構成ファイルを、confという名前のサブフォルダにコピーすることをお薦めします。このプライベート・フォルダは、一時デプロイメント・フォルダや、システムのインストール時またはアップグレード時に上書きされる可能性がある場所には配置しないようにする必要があります。構成ファイルは、WEB-INF/confフォルダからこのプライベート・フォルダのconfサブディレクトリにコピーする必要があります。(展開済フォルダの構造およびWEB-INF/confフォルダの内容の詳細は、1.4.2.2項「MapViewer EARファイルのフォルダへの解凍」を参照してください)。

WEB-INF/conf/confにコピーするファイルは、次のとおりです。

afwRules.xml
mapViewerConfig.xml
wmsConfig.xml
wmtsConfig.xml

Java EEサーバーをクラスタとして実行している場合は、MapViewerのプライベート・フォルダを共有ドライブに配置し、デプロイしたすべてのMapViewerバイナリから、そのフォルダを参照および使用できるようにすることを強くお薦めします。このプライベート・フォルダは、パブリック・フォルダとしてアクセスできないようにする必要があります。また、実行中にMapViewerにより、ログ・ファイルやキャッシュされたマップ・タイルなど、プライベート・フォルダ内の複数のフォルダおよびファイルが作成、変更されることにも注意してください。

このようなプライベート・フォルダを作成して編集可能な構成ファイルを格納することは、展開済EARフォルダからMapViewerをデプロイする場合にも適用されますが、実行中にMapViewerが展開済EARフォルダ内にファイルを作成したり、フォルダ内のファイルを変更しないように、フォルダを読取り専用にすることができます。

展開されていないEARファイルからのデプロイ、または読取り専用の展開済EARフォルダからのデプロイ、そのどちらの場合でも、外部mapViewerConfig.xmlファイルの場所を指定することにより、実行時にMapViewerがプライベート・フォルダの場所を突き止め、適切な構成ファイルから構成パラメータをロードできるようにする必要があります。デフォルトのプライベート・フォルダはMapViewer EARアーカイブのWEB-INF/フォルダで、WEB-INF/conf/は構成ファイルが格納されるフォルダです。

この例では、外部フォルダを/scratch/_maps/に設定しています。/scratch/_maps/confというサブフォルダを作成して、EARファイルのWEB-INF/confフォルダからWEB-INF/conf/confにコピーした構成ファイルを格納しています。

MapViewerが外部のmapViewerConfig.xmlファイルを見つけることができるように、このファイルの検索場所を指定する必要があります。これには様々な方法がありますが、どの方法を使用する場合でも、このmapViewerConfig.xmlファイルの絶対パスを指定すると、MapViewerがこのパスに基づいてプライベート・フォルダを導き出します。たとえば、外部フォルダが/scratch/_maps/conf/にあり、mapViewerConfig.xml、afwRules.xml、wmsConfig.xmlおよびwmtsConfig.xmlファイルをそこにコピーしたとします。この場合、起動時にMapViewerは、前述の方法で示した場所を記載順に確認し、最初に検出したmapViewerConfig.xmlファイルを使用します。MapViewerが場所を検出すると(この例では/scratch/_maps/)、そのフォルダをプライベート・フォルダとして使用します。

前述の方法で示した場所をすべて確認しても、外部のmapViewerConfig.xmlファイルを検出できない場合、MapViewerは、EARファイルのWEB-INF/conf/フォルダにあるデフォルトのmapViewerConfig.xmlファイルの検出を試行します。この場合は、結果的にMapViewerが従来のデプロイメント(展開済EARフォルダからのデプロイ)と同様に、デプロイメントから展開済EARフォルダ内にファイルを書き込むことになるため、デプロイメントは読取り専用になりません。

外部のmapViewerConfig.xmlファイルを使用する場合は、MapViewerが生成したマップ・イメージを保存するためのパブリック・フォルダも常に指定する必要があります(「生成したマップ・イメージを保存するパブリック・フォルダの指定」の項を参照)。

外部のmapViewerConfig.xmlファイルの検索場所を指定するには、次のいずれかの方法を使用します。

- 方法1: JVMオプションの使用
この方法では、Java EEサーバーの起動スクリプトに通常追加されるJVMオプションoracle.maps.configを使用して、外部のmapViewerConfig.xmlファイルの場所を指定します。たとえば、WebLogicサーバーの場合、このオプションをドメインのsetDomainEvn.shスクリプトに追加できます(このスクリプトの-Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilderオプションの直後)。

EXTRA_JAVA_PROPERTIES=
"… -Doracle.maps.config=/scratch/_maps/conf/mapViewerConfig.xml … "

変更後、MapViewerのデプロイメントを試行する前に、WebLogic Serverを再起動する必要があります。

- 方法2: 使用 : web.xmlでの<context-param>要素の使用
この方法では、デプロイメントの前に、MapViewer EARアーカイブ・ファイルのWEB-INF/フォルダに含まれているweb.xmlファイルを変更する必要があります。web.xmlファイルの<description>要素の直後に新しい<context-param>要素を追加して、外部構成ファイルの場所を指定します。次に例を示します。

<context-param>
<param-name>oracle.maps.config</param-name>
<param-value>/scratch/_maps/conf/mapViewerConfig.xml</param-value>
</context-param>

- 方法3: クラスパスでのプロパティ・ファイルの使用
この方法では、プロパティ・ファイルを作成し、それをMapViewerクラスパスに配置します。次の手順を実行します。

1. mapViewerConfig.xmlファイルの場所を参照する1つの行が含まれた、config.propertiesという名前のテキスト・ファイルを作成します。次に例を示します。

oracle.maps.config=/scratch/_maps/conf/mapViewerConfig.xml

2. 空のフォルダoracle/とサブフォルダmaps/を作成し、config.propertiesファイルをmaps/サブフォルダに保存します。つまり、次のようなパスになります。

oracle/maps/config.properties

3. このパスとファイルを含むJARアーカイブを作成し、oracleの親フォルダ内からjarコマンドを実行します。(JARファイルには任意の名前を付けることができます。)次に例を示します。

jar cvf maps_config.jar oracle

4. この新しく作成したJARファイルをMapViewerのクラスパスに配置します。たとえば、WebLogic Serverでは、このjarをドメインのlibフォルダに配置できます。次に例を示します。

/scratch/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/lib

1.4.3.1.1 生成したマップ・イメージを保存するパブリック・フォルダの指定

外部のmapViewerConfig.xmlファイルを使用する場合は、MapViewerが生成したマップ・イメージを保存するためのパブリック・フォルダも指定して、ユーザーとMapViewerクライアント・アプリケーションが、Web経由でこれらにアクセスできるようにする必要があります。これを行うには、外部のmapViewerConfig.xmlファイルに含まれる<save_images_at>要素に適切なパス属性を指定します。

<save_images_at>要素がコメント化されていないことを確認してください。(対照的に、従来のデプロイメントでは、<save_images_at>要素をコメント化したままにすることがよくあります。この場合、MapViewerは展開済WARファイルのimagesフォルダを使用して、生成したマップ・イメージを保存します。)

ここでは、MapViewer EARアーカイブまたはフォルダ内の場所を指すパスを指定しないようにする必要があります。

クラスタ内で複数のMapViewerインスタンスを実行している場合、このパブリック・フォルダは共有ドライブに配置する必要があります。

1.4.3.2 展開されていないEARファイルからのMapViewerのインストール

この項では、アーカイブ(展開されていない)EARファイルからMapViewerを手動でデプロイする場合の手順を説明します。

注意:
この項の手順を実行する前に、Oracle Technology Networkからmapviewer.earファイルをダウンロードして/scratch/ul/mapviewerなどのフォルダに保存し、1.4.2.1項「MapViewerを手動でデプロイするための前提条件」に示された前提条件を満たしていることも確認する必要があります。

1. WebLogic Server管理コンソール・ページにログインします。

2. WebLogic Serverが本番モードで構成されている場合は、サーバーをロックします。「チェンジ・センター」→「変更と再起動の表示」に移動し、「ロックして編集」をクリックします。

3. 「ドメイン構造」→「デプロイメント」に移動します。

4. 「デプロイメント」ページで、デプロイメント・リストの上にある「インストール」をクリックします。

5. 「アプリケーション・インストール・アシスタント」の「インストールおよびデプロイの準備をするデプロイメントの選択」で、「パス」に/scratch/ul.mapviewerを指定し、「現在の場所」でmapviewer.ear (展開済EARフォルダ)を選択し、「次へ」をクリックします。

6. 「ターゲット指定スタイルの選択」では、デフォルト(Install this deployment as an application)を受け入れます。「次へをクリックします。

7. 「オプション設定」で、デフォルトを受け入れて「終了」をクリックします。

8. MapViewerデプロイメントの「デプロイメントのサマリー」ページで、「チェンジ・センター」→「変更と再起動の表示」の下の「変更のアクティブ化」をクリックしてデプロイメントをアクティブ化します。

9. 次のようにMapViewerを起動します。

1. 「チェンジ・センター」→「変更と再起動の表示」に移動し、「ロックして編集」をクリックします。

2. 「ドメイン構造」→「デプロイメント」に移動します。

3. 「デプロイメント」リストで、mapviewerを選択します。

4. 「デプロイメント」リストの下の「起動」→「すべてのリクエストを処理」をクリックします。
これでMapViewerは起動されました(「状態」がActive)。

1.4.4 MapViewerのデプロイ後

MapViewerのデプロイ後に、次の1つ以上の操作の実行が必要な場合があります。

- デプロイが正常に実行されたかどうかの確認

- SQLスクリプトの実行

- MapViewer配列タイプの作成(必要な場合)

1.4.4.1 デプロイが正常に実行されたかどうかの確認

MapViewerサーバーが正しく起動したかどうかをテストするには、MapViewerインスタンスをブラウザに表示します。たとえば、MapViewerがwww.example.comというシステムにインストールされており、HTTPポートが7001である場合、次のURLを入力し、単純なget-versionリクエストを指定して、MapViewerサーバーを起動します。

http://www.example.com:8888/mapviewer/omserver?getv=t

MapViewerが正しく動作していると、次のようなバージョン番号を示すレスポンス・テキスト文字列が即時に返送されます。

12.2.1.1.0

サーバーが正しく起動または初期化されていない場合は、レスポンスが返されないか、500 internal server errorというメッセージが表示されます。

レスポンス・メッセージに「MapServerの準備ができていません」、「しばらくしてから再試行してください」などの表現が含まれている場合、MapViewerサーバーは初期化中であり、処理にはもう少し時間がかかることを意味している可能性があります(たとえば、システムが遅いか、構成ファイルで複数の事前定義済データソースが指定されているため、MapViewerが該当するデータベースへの接続を試行している)。この場合、少なくとも数秒待てば、そのリクエストを再び試行できます。

ただし、このレスポンス・メッセージの受信が続く場合は、デプロイに問題がある可能性があります。この場合、ログ・ファイルを調べて根本的な原因を特定する必要があります。

1.4.4.2 SQLスクリプトの実行

ターゲットのOracle Databaseバージョンが12.1以上である場合は、このトピックで説明するスクリプトを実行する必要はありません。

ターゲット・データベースがOracle Database 12.1未満の場合は、少なくとも1つのスクリプトを実行する必要があり、その他のスクリプトの実行が必要になる可能性もあります。実行する各スクリプトは、MapViewerが空間データのレンダリングを実行することになる各ターゲットのOracleデータベース上で実行する必要があります。

MapViewerは、一連のシステム・ビューを使用して、必要なマッピング用メタデータをターゲット・データベースに格納します。ターゲット・データベースとは、Oracle Spatial and GraphまたはOracle Locator (リリース10g以上)がインストールされており、MapViewerがマップをレンダリングする際の元になるデータベースです。MapViewerに必要なシステム・ビューは、次のとおりです。

- USER_SDO_MAPS

- USER_SDO_THEMES

- USER_SDO_STYLES

- USER_SDO_CACHED_MAPS
USER_SDO_CACHED_MAPSビューは、Oracle Maps機能が使用します。これには、マップ・タイル・キャッシュ・インスタンスの定義が格納されます。ターゲット・データベースがOracle Database 12.1未満の場合は、SYSユーザーとして接続されているときに次のスクリプトを実行して、このビューを手動で作成する必要があります。

SQL> @$MV_HOME/WEB-INF/admin/mcsdefinition.sql

- USER_SDO_EDIT_SESSIONS
USER_SDO_EDIT_SESSIONSビューは、マップ・エディタ・アプリケーションの編集セッションを保存するために使用されます。これは、編集できるデータの定義を保存します。使用するデータベースにこの編集ビューがあるかどうかを確認し、ない場合は、SYSユーザーとして接続されている間に次のスクリプトを実行します。

SQL> @$MV_HOME/WEB-INF/admin/sdedefinition.sql

ターゲット・データベースがリリース9.2以上の場合は、USER_SDO_MAPSビュー、USER_SDO_THEMESビューおよびUSER_SDO_STYLESビューが自動的に作成され、移入されます。ただし、ターゲット・データベースのリリース番号が9.2未満の場合、該当するビューはMDSYSユーザーとして接続されているときに次のスクリプトを実行し、手動で作成して移入する必要があります。

SQL> @$MV_HOME/WEB-INF/admin/mapdefinition.sql
SQL> @$MV_HOME/WEB-INF/admin/defaultstyles.sql

1.4.4.3 MapViewer配列タイプの作成(必要な場合)

接続先のそれぞれのデータベース・スキーマについて、MapViewerは、一部の事前定義済みテーマに存在する可能性のある配列タイプバインディング変数をサポートする、以下のSQL配列タイプがあるかどうかをチェックします。

- MV_STRINGLIST

- MV_NUMBERLIST

- MV_DATELIST

これらのタイプが存在しない場合、MapViewerはMapViewerデータソースに関連付けられたデータベース・スキーマにこれらを作成しようとします。ただし、スキーマに関連するユーザーに新規のタイプを作成する十分な権限がない場合、権限のあるユーザーがデータソース・スキーマに接続して以下の文を入力することにより、タイプを作成する必要があります。

CREATE or REPLACE type MV_STRINGLIST as TABLE of VARCHAR2(1000);
CREATE or REPLACE type MV_NUMBERLIST as TABLE of NUMBER;
CREATE or REPLACE type MV_DATELIST as TABLE of DATE;

1.5 MapViewerのアップグレード

MapViewerをアップグレードすると、既存のMapViewerの構成を、Oracle Fusion Middlewareリリース12.2.1.1.0のWebLogic Serverで使用できるようになります。既存のMapViewerインストール(11gまたは12c)と12.2.1.1.0以前のリリースのFusion Middlewareがあり、既存のMapViewer構成を続けて使用する必要がある場合は、この項の説明に従ってください。

アップグレードの主な手順は次のとおりです。

1. 古いWebLogic Serverの停止

2. WebLogic Server 12cでのMapViewerのデプロイ

3. アップグレード・アシスタント・ウィザードの実行

1.5.1 古いWebLogic Serverの停止

WebLogic 12cに新しいMapViewer 12cバージョンをデプロイする場合は、事前に古いWebLogic Server (WebLogic Server 11gなど)を停止しておくことをお薦めします。

管理コンソール・ページまたはコマンド・ライン・ウィンドウのコマンド・ラインを使用してWebLogic Serverを停止できます。

1.5.2 WebLogic Server 12cでのMapViewerのデプロイ

1.4項「WebLogic Server 12cのMapViewerのインストールおよびデプロイ」のガイドラインに従って、新しいMapViewer 12cをWeblogic Server 12cにデプロイします。新しいMapViewerは、1.4項の任意のデプロイメント・オプションでデプロイできます。デプロイメントが完了したら、MapViewerは起動され実行中である必要があります。

1.5.3 アップグレード・アシスタント・ウィザードの実行

古いWebLogic Serverが停止し、新しくデプロイされたMapViewerが起動して実行中になったら、次の手順に従ってアップグレードを実行します。この手順では、新しいWebLogic Server 12cのOracle Homeは、/scratch/Oracle/Middleware12c/Oracle_Homeとしています。

1. $Oracle_Home/oracle_common/upgrade/binに移動し、ua (アップグレード・アシスタント・ウィザード)プログラムを実行します。

./ua

2. アップグレード・アシスタントのようこそページが表示されたら、「次へ」をクリックします。

3. Weblogicコンポーネント・ページで、アップグレード・タイプとしてドメインによって使用されるすべての構成を選択します。
「ドメイン・ディレクトリ」に、12.2.1.1.0ドメイン・ディレクトリを指定します。

「次へ」をクリックします。

4. コンポーネント・リストのページでは、アップグレードするコンポーネントの一覧にOracle MapViewerが含まれていることを確認し、「次へ」をクリックします。

5. 「前提条件」ページで、すべてのボックスを選択します。

6. 「MapViewerのアップグレード」ページで、MapViewer構成ファイルのバージョンを選択します。

- リリース11の場合は、以前のMapViewerデプロイのmapViewerConfig.xmlへのパスを指定します。(通常、これは展開済EAR構成のフォルダにあります。例: $EAR_FOLDER/web.war/WEB-INF/conf。)その後、「次」をクリックします。

- リリース12の場合、ウィザード・ページのデフォルトのパスはアップグレードされる12.2.1.1.0ドメイン構成ファイルへのパスが示されていますが、別のパスも指定できます。「次」をクリックします。

7. 確認のページでは、アップグレード前のコンポーネントの事前チェック・ステータスを参照します(たとえば、コンポーネントのアップグレードに進むことができることを示すsucceeded、またはupgrade not necessary)。「次へ」をクリックします。

8. アップグレード・サマリー・ページでは、アップグレードされる構成の一覧を確認し、「アップグレード」をクリックします。

9. アップグレードの進行状況ページに、アップグレードの進行状況およびアップグレードされたコンポーネントのアップグレード・ステータスが表示されます。

アップグレード・アシスタントを閉じた後に、MapViewerの管理コンソールを使用してMapViewer再起動するか、WebLogic Server管理コンソールに戻ってMapViewerサーバーを再起動することができます。MapViewerの管理コンソールを使用する場合は、「構成」ページに移動して「再起動」をクリックします。WebLogic Server管理コンソールを使用する場合は、デプロイメント表からMapViewerを「停止」し、次に「起動」して、アップグレードを有効にします。

MapViewerの管理コンソールにログインし(1.6項「MapViewerの管理」を参照)、構成およびデータソースを表示すると、古いMapViewerが新しくデプロイされたMapViewerに正常に移行されていることがわかります。

1.6 MapViewerの管理

この項では、MapViewer管理ページの概要と、ユーザーが実行できる管理および構成タスクの一部(新規データソースの追加、Oracle Mapsが使用するマップ・タイル層の管理、ロギング・レベルの設定など)について説明します。内容は次のとおりです。

- MapViewer管理ページへのログイン

- MapViewerの構成

- MapViewer管理タスクの実行

1.6.1 MapViewer管理ページへのログイン

MapViewerが正しく動作していることを確認したら、MapViewer管理ページにログインします。そのためには、まずMapViewer「ようこそ」ページ(通常はhttp://<host>:<port>/mapviewer。<host>および<port>は、インストールの正しい値に置き換えてください)を表示します。MapViewer「ようこそ」ページを、図1-3に示します。

図1-3 MapViewer「ようこそ」ページ

右上の「管理」リンクをクリックします。

図1-4に示す、MapViewer管理ページが表示されます。

図1-4 MapViewer管理ページ

この管理ページを使用して、キャッシュ・データの消去、タイル層の作成、タイル層の管理、サーバーの再起動(「モニタリング」リンクを使用して再起動)などの管理タスクを実行できます。

1.6.2 MapViewerの構成

動作中のMapViewerに関するデフォルト構成設定が適切でない場合、$MAPVIEWER_HOME/WEB-INF/confディレクトリに格納されているMapViewer構成ファイルmapViewerConfig.xmlを編集することで、MapViewerを構成できます。このファイルは、テキスト・エディタまたはMapViewer管理ページで変更できます。

このファイルを変更した後、変更を有効にするにはコンテナを再起動する必要があります。ただし、スタンドアロンのGlassfishインスタンスとともにMapViewerをインストールした場合は、かわりにMapViewer管理ページを使用して、(他のアプリケーションがデプロイされ、動作している可能性のあるJava EEインスタンス全体ではなく) MapViewerサーブレットのみを再起動できます。

MapViewerを、複数のプロセスを持つ(つまり、同一ホスト上に複数の物理JVMを持つ) WebLogic Serverインスタンスにデプロイした場合、またはクラスタ・アイランド内にある(複数のホスト上で複数のWLSインスタンスが実行されている) WebLogic Serverインスタンスにデプロイした場合、MapViewer構成ファイルに対する変更をすべてのMapViewerサーバーで有効にするには、そのWebLogic Serverインスタンス自体を再起動する必要があります。後者(クラスタ化されたWebLogic Serverインスタンス)の場合、クラスタ内にあるホストのWebLogic Serverインスタンスごとに、MapViewerディレクトリ階層内のMapViewer構成ファイルを変更することが必要になる可能性があります。リポジトリベースの中間層クラスタリングの詳細は、『Oracle Fusion Middleware高可用性ガイド』を参照してください。

MapViewer構成ファイルでは、次の情報がXML形式で定義されます。

- ログ情報。コンテナ制御ロギング(推奨)または<logging>要素で定義されます(1.6.2.1項を参照)。

- マップ画像ファイル情報。<save_images_at>要素で定義されます(1.6.2.2項を参照)。

- 管理リクエスト制限。<ip_monitor>要素で定義されます(1.6.2.3項を参照)。

- ファイアウォールを隔てた外部情報にアクセスするためのWebプロキシ情報。<web_proxy>要素で定義されます(1.6.2.4項を参照)。

- グローバル・マップ「ルック・アンド・フィール」構成。<global_map_config>要素で定義されます(1.6.2.5項を参照)。

- 内部空間データ・キャッシュの設定値。<spatial_data_cache>要素で定義されます(1.6.2.6項を参照)。

- カスタム・イメージ・レンダラ登録。<custom_image_renderer>要素で定義されます(付録Cを参照)。

- 永続マップ・データソース。<map_data_source>要素で定義されます(1.6.2.15項を参照)。

- セキュリティ構成。<security_config>要素で定義されます。

- WMSサービス構成。<wms_config>要素で定義されます。

- 外部属性データ・プロバイダ登録。<ns_data_provider>要素で定義されます。

- マップ・タイル・サーバー構成。<map_tile_server>要素で定義されます。

- UTFグリッドのライフサイクル・パラメータ。<utfgrid_life_cycle>要素で定義されます。

- 外部空間データ・プロバイダ登録。<s_data_provider>要素で定義されます。

- マップ・データソース。<map_data_source>要素で定義されます。

- マップ・データ・サーバーのストリーム・パラメータ。<mds_config>要素で定義されます。

- OAMのログアウト・パラメータ。<oam_logout>要素で定義されます。

別途指定されていないかぎり、mapViewerConfig.xmlファイルのすべてのパス名は、ファイルが格納されているディレクトリに対する相対パスです。

例1-1は、mapViewerConfig.xmlファイルの例を示しています。

例1-1 MapViewer構成ファイルの例

<?xml version="1.0" ?>
<!-- This is the configuration file for MapViewer. -->
<!-- Note: All paths are resolved relative to this directory (where
this config file is located), unless specified as an absolute
path name.
-->

<MapperConfig>

<!-- ****************************************************************** -->
<!-- ************************ Logging Settings ************************ -->
<!-- ****************************************************************** -->

<!-- Uncomment the following to modify logging. Possible values are:
log_level = "fatal"|"error"|"warn"|"info"|"debug"|"finest"
default: info) ;
log_thread_name = "true" | "false" ;
log_time = "true" | "false" ;
one or more log_output elements.
-->
<!--
<logging log_level="info" log_thread_name="false"
log_time="true">
<log_output name="System.err" />
<log_output name="../log/mapviewer.log" />
</logging>
-->

<!-- ****************************************************************** -->
<!-- ********************** Map Image Settings ************************ -->
<!-- ****************************************************************** -->

<!-- Uncomment the following only if you want generated images to
be stored in a different directory, or if you want to customize
the life cycle of generated image files.

By default, all maps are generated under
$ORACLE_HOME/lbs/mapviewer/web/images.

Images location-related attributes:
file_prefix: image file prefix, default value is "omsmap"
url:  the URL at which images can be accessed. It must match the 'path'
attribute below. Its default value is "%HOST_URL%/mapviewer/images"
path: the corresponding path in the server where the images are
saved; default value is "%ORACLE_HOME%/lbs/mapviewer/web/images"

Images life cycle-related attributes:
life: the life period of generated images, specified in minutes.
If not specified or if the value is 0, images saved on disk will
never be deleted.
recycle_interval:  this attribute specifies how often the recycling
of generated map images will be performed. The unit is minute.
The default interval (when not specified or if the value is 0)
is 8*60, or 8 hours.

-->
<!--
<save_images_at  file_prefix="omsmap"
url="http://mypc.mycorp.com:8888/mapviewer/images"
path="../web/images"
/>
-->

<!-- ****************************************************************** -->
<!-- ********************* IP Monitoring Settings ********************* -->
<!-- ****************************************************************** -->

<!-- Uncomment the following to enable IP filtering for administrative
requests.
Note:
- Use <ips> and <ip_range> to specify which IPs (and ranges) are allowed.
Wildcard form such as 20.* is also accepted. Use a comma-delimited
list in <ips>.

- Use <ips_exclude> and <ip_range_exclude> for IPs and IP ranges
prohibited from accessing eLocation.

- If an IP falls into both "allowed" and "prohibited" categories, it is
prohibited.

- If you put  "*" in an <ips> element, then all IPs are allowed, except
those specified in <ips_exclude> and <ip_range_exclude>.
On the other hand, if you put "*" in an <ips_exclude> element, no one
will be able to access MapViewer (regardless of whether an IP is in
<ips> or <ip_range>).

- You can have multiple <ips>, <ip_range>, <ips_exclude>, and
<ip_range_exclude> elements under <ip_monitor>.

- If no <ip_monitor> element is present in the XML configuration
file, then no IP filtering will be performed (all allowed).

- The way MapViewer determines if an IP is allowed is:

if(IP filtering is not enabled) then allow;
if(IP is in exclude-list) then not allow;
else if(IP is in allow-list) then allow;
else not allow;
-->

<!--
<ip_monitor>
<ips> 138.1.17.9, 138.1.17.21, 138.3.*, 20.* </ips>
<ip_range> 24.17.1.3 - 24.17.1.20 </ip_range>
<ips_exclude> 138.3.29.* </ips_exclude>
<ip_range_exclude>20.22.34.1 - 20.22.34.255</ip_range_exclude>
</ip_monitor>
-->

<!-- ****************************************************************** -->
<!-- ********************** Web Proxy Setting  ************************ -->
<!-- ****************************************************************** -->
<!-- Uncomment and modify the following to specify the web proxy setting.
This is only needed for passing background image URLs to
MapViewer in map requests or for setting a logo image URL, if
such URLs cannot be accessed without the proxy.
-->

<!--
<web_proxy host="www-proxy.my_corp.com"  port="80" />
-->

<!-- ****************************************************************** -->
<!-- *********************** Security Configuration ******************* -->
<!-- ****************************************************************** -->
<!-- Here you can set various security related configurations of MapViewer.
-->

<security_config>
<disable_direct_info_request> false </disable_direct_info_request>
</security_config>

<!-- ****************************************************************** -->
<!-- *********************** Global Map Configuration ***************** -->
<!-- ****************************************************************** -->
<!-- Uncomment and modify the following to specify systemwide parameters
for generated maps. You can specify your copyright note, map title, and
an image to be used as a custom logo shown on maps. The logo image must
be accessible to this MapViewer and in either GIF or JPEG format.
Notes:
-  To disable a global note or title, specify an empty string ("") for
the text attribute of <note> and <title> element.
- position specifies a relative position on the map where the
logo, note, or title  will be displayed. Possible values are
NORTH, EAST, SOUTH, WEST, NORTH_EAST, SOUTH_EAST,
SOUTH_WEST, NORTH_WEST, and CENTER.
- image_path specifies a file path or a URL (starts with "http://")
for the image.

<rendering> element attributes:
- Local geodetic data adjustment: If allow_local_adjustment="true",
MapViewer automatically performs local data
"flattening" with geodetic data if the data window is less than
3 decimal degrees. Specifically, MapViewer performs a simple
mathematical transformation of the coordinates using a tangential
plane at the current map request center.
If allow_local_adjustment="false" (default), no adjustment is
performed.
- Automatically applies a globular map projection (geodetic data only):
If use_globular_projection="true", MapViewer will
apply a globular projection on the fly to geometries being displayed.
If use_globular_projection="false" (the default), MapViewer does no map
projection to geodetic geometries. This option has no effect on
non-geodetic data.
-->

<!--
<global_map_config>
<note text="Copyright 2009, Oracle Corporation"
font="sans serif"
position="SOUTH_EAST"/>
<title  text="MapViewer Demo"
font="Serif"
position="NORTH" />
<logo image_path="C:\\images\\a.gif"
position="SOUTH_WEST" />

<rendering allow_local_adjustment="false"
use_globular_projection="false" />
</global_map_config>
-->

<!-- ****************************************************************** -->
<!-- ****************** Spatial Data Cache Setting  ******************* -->
<!-- ****************************************************************** -->
<!-- Uncomment and modify the following to customize the spatial data cache
used by MapViewer. The default is 64 MB for in-memory cache.

To disable the cache, set max_cache_size to 0.

max_cache_size:  Maximum size of in-memory spatial cache of MapViewer.
Size must be specified in megabytes (MB).
report_stats:    If you would like to see periodic output of cache
statistics, set this attribute to true. The default
is false.
-->

<!--
<spatial_data_cache   max_cache_size="64"
report_stats="false"
/>
-->

<!-- ****************************************************************** -->
<!-- ******************** Custom Image Renderers ********************** -->
<!-- ****************************************************************** -->
<!-- Uncomment and add as many custom image renderers as needed here,
each in its own  <custom_image_renderer> element. The "image_format"
attribute specifies the format of images that are to be custom
rendered using the class with full name specified in "impl_class".
You are responsible for placing the implementation classes in the
MapViewer's classpath.
-->
<!--
<custom_image_renderer image_format="ECW"
impl_class="com.my_corp.image.ECWRenderer" />
-->

<!-- ****************************************************************** -->
<!-- ****************** Custom WMS Capabilities Info ****************** -->
<!-- ****************************************************************** -->
<!-- Uncomment and modify the following tag if you want MapViewer to
use the following information in its getCapabilities response.
Note: all attributes and elements of <wms_config> are optional.
-->
<!--
<wms_config host="www.my_corp.com" port="80">
<title>
WMS 1.1 interface for Oracle Mapviewer
</title>
<abstract>
This WMS service is provided through MapViewer.
</abstract>
<keyword_list>
<keyword>bird</keyword>
<keyword>roadrunner</keyword>
<keyword>ambush</keyword>
</keyword_list>
<sdo_epsg_mapfile>
../config/epsg_srids.properties
</sdo_epsg_mapfile>
</wms_config>
-->

<!-- ****************************************************************** -->
<!-- **************** Custom Non-Spatial Data Provider **************** -->
<!-- ****************************************************************** -->
<!-- Uncomment and add as many custom non-spatial data provider as
needed here, each in its own <ns_data_provider> element.
You must provide the id and full class name here. Optionally you
can also specify any number of global parameters, which MapViewer
will pass to the data provider implementation during initialization.
The name and value of each parameter is interpreted only by the
implementation.
-->

<!-- this is the default data provider that comes with MapViewer; please
refer to the MapViewer User's Guide for instructions on how to use it.

<ns_data_provider
id="defaultNSDP"
class="oracle.sdovis.NSDataProviderDefault"
/>
-->

<!-- this is a sample NS data provider with prameters:
<ns_data_provider
id="myProvider1" class="com.mycorp.bi.NSDataProviderImpl" >

<parameters>
<parameter name="myparam1" value="value1" />
<parameter name="p2"       value="v2"     />
</parameters>

</ns_data_provider>
-->

<!-- ****************************************************************** -->
<!-- *******************  Map Tile Server Setting  ******************* -->
<!-- ****************************************************************** -->
<!-- Uncomment and modify the following to customize the map tile server.

<tile_storage> specifies the default root directory under which the
cached tile images are to be stored if the cache instance configuration
does not specify the root directory for the cache instance. If the
default root directory is not set or not valid, the default root
direcotry will be set to be $MAPVIEWER_HOME/web/tilecache

default_root_path:  The default root directory under which the cached
tile images are stored.
-->

<!--
<map_tile_server>
<tile_storage default_root_path="/scratch/tilecachetest/"/>
</map_tile_server>
-->

<!-- ****************************************************************** -->
<!-- ******************** Predefined Data Sources  ******************** -->
<!-- ****************************************************************** -->
<!-- Uncomment and modify the following to predefine one or more data
sources.
Note: You must precede the jdbc_password value with a '!'
(exclamation point), so that when MapViewer starts the next
time, it will encrypt and replace the clear text password.
-->

<!--
<map_data_source name="mvdemo"
jdbc_host="elocation.example.com"
jdbc_sid="orcl"
jdbc_port="1521"
jdbc_user="scott"
jdbc_password="!password"
jdbc_mode="thin"
number_of_mappers="3"
/>
-->

</MapperConfig>

MapViewerの構成トピックには、次のサブトピックがあります。

- ロギング情報の指定

- マップ・ファイル格納情報およびライフ・サイクル情報の指定

- 管理(非map)リクエストの制限

- Webプロキシの指定

- グローバル・マップ構成オプションの指定

- 空間データ・キャッシュのカスタマイズ

- セキュリティ構成の指定

- カスタム・イメージ・レンダラの登録

- カスタム空間プロバイダの登録

- カスタムな非空間データ・プロバイダの登録

- SRSマッピングのカスタマイズ

- WMS GetCapabilitiesレスポンスのカスタマイズ

- WMTS GetCapabilitiesレスポンスのカスタマイズ

- Oracle Maps用マップ・タイル・サーバーの構成

- 永続mapデータソースの定義

- HTML5 API用のマップ・データ・サーバーの構成および保護

1.6.2.1 ログ情報の指定

MapViewerには、ランタイム情報およびイベントを記録するための柔軟なロギング・メカニズムが備わっています。ログ出力の粒度、量、形式および出力先を設定できます。ログ・ファイルの最大サイズや、自動的なログ・ファイル・ローテーションも設定できます。

MapViewerのロギングを構成する方法は2つあります。コンテナ制御ロギングと、構成ファイルの<logging>要素を使用する方法です。

コンテナ制御ロギング

mapViewerConfig.xmlファイルの<logging>要素がコメント・アウトされているか、見つからない場合、MapViewerはコンテナ制御ロギングを使用します。特に、次のログ出力を使用します。

- すべてのWebサーバー(マップ、タイル、地物)のメッセージに、oracle.mapviewer.ws

- すべてのユーザー・アクセスに、oracle.mapviewer.access

- すべてのレンダリング(マップ、テーマ、地物)のメッセージに、oracle.mapviewer.sdovis

- すべての管理コンソールのログ・メッセージに、oracle.mapviewer.webconsole

<logging>要素の使用

mapViewerConfig.xmlファイルの<logging>要素が使用中の場合(つまり、<logging>要素がコメント・アウトされていないか、見つかる場合)、MapViewerはコンテナ制御ロギングを使用するかわりに、その情報を使用します。<logging>要素は、次の属性とサブ要素を含むことができます。

- console_log_level属性では、ログに記録される情報のレベルが制御され、このレベルによってログ出力量が左右されます。console_log_level属性には、FATAL、ERROR、WARN、INFO、DEBUGおよびFINESTという値(ログ出力量が最も少ないレベルから最も多いレベルの順)を設定します。FATALレベルでは出力されるログ情報が最も少なくなり(回復不能なイベントのみがログに記録されます)、他のレベルでは前述にリストした順で含まれるログ情報が多くなり、FINESTレベルではほとんどの情報がログに記録されます。本番作業では、WARNまたはより制限の大きいレベル(ERRORまたはFATAL)をお薦めします。ただし、デバッグの場合は制限のより小さいレベルに設定する必要があります。

- file_limit属性は、ログ・ファイルの最大ファイル・サイズを制御します。単位はMb、デフォルト値は50 (つまり、ログ・ファイルの最大サイズのデフォルト値が50Mb)です。

- file_count属性は、作成されるログ・ファイルの数を決定します。ファイルはローテーションされます(つまり、最後のログ・ファイルが最大サイズに達すると、最初のログ・ファイルが再利用されます)。デフォルト値は10です。

- <logger>サブ要素では、特定のログ出力のログ・レベルを指定します。

- <log_output>サブ要素では、ログ情報の出力先が識別されます。デフォルトで、ログ・レコードはシステム・エラー・コンソールに書き込まれます。この設定は、システム出力コンソールまたは1つ以上のファイル、あるいはなんらかの組合せに変更できます。複数の<log_output>サブ要素で複数のデバイスを指定した場合、ログ・レコードは、同じロギング・レベルおよび属性を使用してすべてのデバイスに送信されます。

1.6.2.2 マップ・ファイル格納情報およびライフ・サイクル情報の指定

マップ画像ファイル情報は、<save_images_at>要素で指定します。デフォルトで画像は、$ORACLE_HOME /lbs/mapviewer/web/imagesディレクトリに格納されます。画像の格納用に別のディレクトリを指定する場合を除き、<save_images_at>要素を変更する必要はありません。

マッピング・クライアントは、<map_request>要素のformat属性(3.1.2.1.1項を参照)をGIF_URLまたはPNG_URLに設定することで、MapViewerが実際のマップ画像データではなく画像ファイルのURLを返すようにリクエストできます。この場合、MapViewerでは、リクエストされたマップ画像がファイルとしてMapViewerが動作するホスト・システムに保存され、画像ファイルのURLが含まれるレスポンスがマップ・クライアントに返されます。

<save_images_at>要素の属性として、次のマップ画像ファイル情報を指定できます。

- file_prefix属性では、マップ画像ファイル接頭辞が指定されます。マップ画像ファイル名は、固定のファイル接頭辞の後に、シリアル番号および画像型接尾辞が続きます。たとえば、マップ画像ファイル接頭辞がomsmapである場合、考えられるGIFマップ画像ファイルにはomsmap1.gifがあります。
デフォルト値: file_prefix=omsmap

- url属性では、マップ画像のベースURLが指定されます。このURLは、MapViewerホスト上ですべてのマップ画像ファイルが保存されているディレクトリを指します。マッピング・クライアントに送信されるマップ画像URLは、マップ画像のベースURLにマップ画像ファイル名を加えたものです。たとえば、マップ画像のベースURLがhttp://dev04.example.com:1521/mapviewer/imagesの場合、omsmap1.gifのマップ画像URLはhttp://dev04.example.com:1521/mapviewer/images/omsmap1.gifになります。
デフォルト値: url=$HOST_URL/mapviewer/images

- path属性では、MapViewerホスト・システム上ですべてのマップ画像ファイルが保存されるディレクトリのパスが指定されます。このディレクトリは、HTTPによるアクセスが可能で、マップ画像URLと一致する必要があります。path属性で指定されたディレクトリに保存されたマップ画像ファイルは、url属性で指定されたURLからアクセスできる必要があります。
ただし、MapViewerをWebLogic Serverにデプロイする場合、path属性(../web/images)のデフォルト値は正しくありません。この場合のパス属性は、../../images,です。これは、物理的な"images"ディレクトリがmapviewer.ear/web.war/imagesであるためです。相対パスを使用すると、物理ディレクトリを解決するpath属性の値は../../imagesになります。

- life属性では、生成されたマップ画像が削除されるまでに確実にファイル・システム上にとどまる分数が指定されます。life属性が指定された場合、recycle_interval属性によって、MapViewerが削除対象のファイルの有無をチェックする頻度が制御されます。
デフォルト: MapViewerでは生成済のマップ画像は削除されません。

- recycle_interval属性では、life属性値の分数より長くファイル・システム上に存在する画像ファイルを削除できるかどうかをMapViewerがチェックする間隔が分数で指定されます。
デフォルト値: 480 (8時間)

1.6.2.3 管理(非マップ)リクエストの制限

MapViewerは、マップ・リクエストの他に、すべてのデータソースをリストするリクエストやデータソースを追加および削除するリクエストなどの、管理(非マップ)リクエストを受け入れます。(管理リクエストについては第5章で説明しています。)デフォルトでは、すべてのMapViewerユーザーが管理リクエストの発行を許可されています。

ただし、管理リクエストを発行できるかどうかを制限する場合には、MapViewer構成ファイルを編集し、指定したIPアドレスのユーザーからの管理リクエストのみを許可します。

管理リクエストを特定のIPアドレスのユーザーに制限するには、<ip_monitor>要素をMapViewer構成ファイルに追加します(既存の要素がコメント化されている場合は、非コメント化して変更します)。例1-2は、構成ファイルから抜粋した<ip_monitor>要素の例を示しています。

例1-2 管理リクエストの制限

<MapperConfig>
. . .
<ip_monitor>
<ips> 138.1.17.9, 138.1.17.21, 138.3.*, 20.* </ips>
<ip_range> 24.17.1.3 - 24.17.1.20 </ip_range>
<ips_exclude> 138.3.29.* </ips_exclude>
<ip_range_exclude>20.22.34.1 - 20.22.34.255</ip_range_exclude>
</ip_monitor>
. . .
</MapperConfig>

例1-2では、次のことを示しています。

- 次のIPアドレスは、管理リクエストを発行できるものとして明示的に含まれています(<ips_exclude>要素により除外されている場合を除く): 138.1.17.9、138.1.17.21、138.3.で始まる全アドレス、20.で始まる全アドレス、24.17.1.3から24.17.1.20の範囲内の全アドレス。

- 次のIPアドレスは、管理リクエストの発行から明示的に除外されています: 138.3.29.で始まる全アドレス、20.22.34.1から20.22.34.255の範囲内の全アドレス。

- 明示的に含まれていない他のすべてのIPアドレスは、管理リクエストを発行できません。

<ip_monitor>要素の構文に関する注意:

- 許可するIPアドレス(および範囲)を指定するには、<ips>要素および<ip_range>要素を使用してください。アスタリスクのワイルドカード(20.*など)を使用できます。アドレスにはカンマ区切りリストを使用します。

- 発行する管理リクエストからIPアドレスおよびアドレス範囲を除外するには、<ips_exclude>要素および<ip_range_exclude>要素を使用してください。アドレスが包含および除外カテゴリの両方に入る場合、このアドレスは除外されます。

- <ips>要素の中でアスタリスクのワイルドカードを指定すると、<ips_exclude>要素および<ip_range_exclude>要素内で指定した場合を除き、関連するすべてのIPアドレスが含まれます。

1.6.2.4 Webプロキシの指定

MapViewerサーバーは、URLを介してバックグラウンド・イメージを取得したり、外部WMSサーバーに接続してそのマップ画像をフェッチしたりするために、外部Webサーバーに対してHTTP接続を実行する必要がある場合もあります。そのような場合、MapViewerサーバーとターゲットWebサーバーの間にファイアウォールが存在していると、ファイアウォールによってMapViewerがブロックされないように、MapViewerに対してHTTPプロキシ情報を指定する必要がある場合があります。次の例では、Webプロキシ情報を指定しています。

<web_proxy host="www-proxy.mycorp.com" port="80" />

Webプロキシが認証を要求する場合は、userおよびpassword属性を指定できます。パスワード値が感嘆符(!)記号の後にある場合、パスワード値は最初に構成ファイルをロードしている間に暗号化されます。次に例を示します。

<web_proxy host="www-proxy.mycorp.com" port="80" user="uservalue" password="!pwdvalue" />

1.6.2.5 グローバル・マップ構成オプションの指定

MapViewerで生成される各マップの表示について、次のグローバル・ルックアンドフィール・オプションを指定できます。

- タイトル

- 注釈(著作権の記述または脚注など)

- ロゴ(カスタム・シンボルまたは企業ロゴ)

- ローカル測地データ調整

- 子午線180度に沿ったジオメトリの分割

これらのオプションを指定するには、<global_map_config>要素を使用します。次に例を示します。

<global_map_config>
<note text="Copyright (c) 2009, Example Corporation"
font="sans serif"
position="SOUTH_EAST"/>
<title  text="Map Courtesy of Example Corp."
font="Serif"
position="NORTH"/>
<logo image_path="C:\\images\\a.gif"
position="SOUTH_WEST"/>

<rendering allow_local_adjustment="false"
use_globular_projection="false"/>
</global_map_config>

マップ・タイトルは、<global_map_config>要素の<title>要素を使用して設定します。また、個々のマップ・リクエストで<map_request>要素のtitle属性を指定することで、マップ・タイトルを設定できます。この場合、MapViewer構成ファイル内のグローバル・タイトルのかわりに、マップ・リクエスト内のタイトルが使用されます。<title>要素の属性については、次の点に注意してください。

- text属性ではタイトル文字列が指定されます。

- font属性ではフォントが指定されます。このフォントは、MapViewerが動作するシステム上に存在する必要があります。

- position属性では、マップ上でのマップ・タイトルの描画位置を決定する際に、位置設定のヒントがMapViewerに提供されます。指定できる値は、NORTH、EAST、SOUTH、WEST、NORTH_EAST、SOUTH_EAST、SOUTH_WEST、NORTH_WESTおよびCENTERです。
デフォルト値: NORTH

マップの注釈は、<global_map_config>要素の<note>要素を使用して設定します。<note>要素の属性については、次の点に注意してください。

- text属性では注釈文字列が指定されます。

- font属性ではフォントが指定されます。このフォントは、MapViewerが動作するシステム上に存在する必要があります。

- position属性では、マップ上でのマップの注釈の表示位置を決定する際に、位置設定のヒントがMapViewerに提供されます。指定できる値は、NORTH、EAST、SOUTH、WEST、NORTH_EAST、SOUTH_EAST、SOUTH_WEST、NORTH_WESTおよびCENTERです。
デフォルト値: SOUTH_EAST

マップ・ロゴは、<global_map_config>要素の<logo>要素を使用して設定します。マップ・ロゴ画像は、JPEGまたはGIFのいずれかの形式である必要があります。この画像は、ローカル・ファイル・システムに格納し、MapViewerインスタンスが画像にアクセスできるようにするか、画像のURLを指定してWebから取得できます。マップ・ロゴを指定するには、MapViewer構成ファイルで<map_logo>要素を非コメント化し、必要に応じてこの要素の属性を編集します。

<logo>要素の属性については、次の点に注意してください。

- image_path属性では、有効なファイル・パス名またはhttp://で始まるURLが指定される必要があります。

- position属性では、マップ上でのマップ・ロゴの描画位置を決定する際に、位置設定のヒントがMapViewerに提供されます。指定できる値は、NORTH、EAST、SOUTH、WEST、NORTH_EAST、SOUTH_EAST、SOUTH_WEST、NORTH_WESTおよびCENTERです。
デフォルト値: SOUTH_WEST

ファイアウォールの外側のURLからロゴ画像を取得する場合、MapViewerがロゴ画像を取得するためのWebプロキシの設定が必要となる場合があります。Webプロキシの指定については、第1.6.2.4項を参照してください。

また、マップ凡例を指定する場合は、凡例の位置がマップ・タイトル、注釈またはロゴの位置と同じでないことを確認してください。(マップ凡例については、2.4.2項と3.1.2.11項を参照してください。マップ凡例のデフォルト位置はSOUTH_WESTです。)

マップ・データ・ウィンドウが3度(10進)未満の場合、MapViewerによって測地データが表示される前に、自動的にローカルの非測地座標系に投影されるようにするには、<rendering>要素でallow_local_adjustment="true"と指定します。

MapViewerにより球面投影(つまり、世界の表示に適したマップ投影であり、具体的にはMapViewerの正距方位図法があります)が自動的に適用されるようにするには、<rendering>要素でuse_globular_projection="true"と指定します。このオプションは測地データのみに適用されます。

1.6.2.6 空間データ・キャッシュのカスタマイズ

MapViewerで空間データに使用されるメモリー内キャッシュをカスタマイズするには、<spatial_data_cache>要素を使用します。次に例を示します。

<spatial_data_cache   max_cache_size="64"
report_stats="true"
/>

<spatial_data_cache>要素の属性として、次の情報を指定できます。

- max_cache_size属性では、メモリー内キャッシュの最大MB数が指定されます。
デフォルト値: 64

- report_stats属性は、trueに設定されている場合、MapViewerサーバーに、キャッシュ済のオブジェクト数、キャッシュ・オブジェクト全体のサイズ、内部キャッシュ構造の効率に関するデータなど、キャッシュ統計を定期的(5分ごと)に出力するように指示します。統計はデータソースおよび事前定義済テーマごとに提供されます。これはメモリー内キャッシュの最適な設定を決定する場合に役立ちます。たとえば、メモリー・キャッシュに一部のテーマについてのすべてのジオメトリ・データを確保する場合は、これらのテーマを格納するのに十分なmax_cache_size値を指定する必要があります。
デフォルト値: false

構成ファイルでこの要素がコメント化されている場合でも、空間データ・キャッシュはデフォルトで常に使用可能です。空間データのキャッシュを完全に使用不可にするには、max_cache_size属性の値を0(ゼロ)に指定する必要があります。

注意:
前のリリースでサポートされていたディスクベースの空間キャッシュは、必要な場合(つまり、キャッシュ後にキャッシュ済オブジェクトを頻繁に再取得する必要がない場合)に、データベースから空間オブジェクトを直接フェッチするより効率が悪い場合が多いことがパフォーマンス・テストでわかったため、サポートされなくなりました。

事前定義済テーマのキャッシュの詳細は、2.3.1.6項を参照してください。

1.6.2.7 セキュリティ構成の指定

<security_config>要素を使用すると、リクエスト内の<info_request>要素をMapViewerが拒否するかどうかを指定できます。<info_request>要素は、単純なSQL文を実行して結果行をプレーン・テキストまたはXML形式で返すようMapViewerに要求するクライアントからのリクエストのタイプです。このリクエストは、MapViewerアプリケーションがマップに表示された地物を特定したり、単純な空間検索問合せを実行したりする際によく使用されます。

ただし、MapViewerデータソース情報を公開すると、悪質な攻撃者がこの機能を乱用し、機密情報を取得するおそれがあります。これを防止するには、アクセス権が非常に制限され、機密情報以外の情報しか提供しないデータベース・スキーマにMapViewerを常に接続するよう徹底する必要があります。また、次のように<security_config>要素を指定して、<info_request>リクエストをすべて拒否することもできます。

<security_config>
<disable_direct_info_request> true </disable_direct_info_request>
</security_config>

ただし、この設定は、MapViewerの一部の機能に影響を与えます。たとえば、MapViewer Java APIのidentify()メソッドが機能しなくなるため、アプリケーションでは他の手段を使用して独自のidentify()メソッドを実装する必要があります。

MapViewerの組込みプロキシ・サーブレットが通信できる、リモートURLも定義できます。このようなURLを区切るには、カンマを使用します。URLを* (アスタリスク)ワイルドカード文字で終了すると、1つのパスで始まる複数のURLにできます。次の例では、1つのリモートURLを指定しています。

<security-config>
…
<proxy_enabled_hosts>
foo.com:8080/mapviewer
</proxy_enabled_hosts>
…
</security-config>

自己署名証明書を使用する、外部のWebサイトとのMapViewerのHTTPS (SSL)接続を容易にするために、ここでそれらの証明書を登録する場合があります。HTTPS接続が必要なサーバーのそれぞれに、1つのエントリを使用します。次の例は、1つのエントリの指定の一部を示しています。

<security_config>
…
<certificates>
<entry>
<host_name>fooserver.com</host_name>
<keystore_file>/scratch/fooserver.jks</keystore_file>
<key>123456</key>
</entry>
</certificates>
…
</security_config>

各証明書の<entry>要素のサブ要素は、次のとおりです。

host_name属性は、HTTPS接続が必要なサーバーのIPアドレスまたはドメイン名を指定します。

keystore_file属性は、1つの自己署名証明書を含むファイルを指定します。サーバー・サイトから証明書(通常は.pemファイル)を取得すると、Javaのkeytoolコマンドを使用してキー・ストアを作成できます。次に例を示します。

keytool -import -file fooserver.pem -alias fooserver -keystore fooserver.jks

key属性は、キー・ストア・ファイルの作成時にユーザーが提供したパスワードを指定します。(これは、キー・ストア・ファイル自体の整合性を確実にするために使用されます。)

1.6.2.8 カスタム・イメージ・レンダラの登録

MapViewerでは、データベースのBLOBに格納されている画像を、そのイメージ・テーマ機能を使用して表示できます。BLOBに格納されている画像データが、MapViewerにとって未知のECWのような形式である場合は、そのような画像をMapViewerが表示できるようにカスタム・イメージ・レンダラを登録することができます。カスタム・イメージ・レンダラの作成および登録については、付録Cを参照してください。

カスタム・イメージ・レンダラを指定するには、次の例のように、<custom_image_renderer>要素を使用します。

<custom_image_renderer image_format="ECW"
impl_class="com.my_corp.image.ECWRenderer" />

image_format属性では、カスタム・イメージ・レンダラと関連付ける画像形式名を指定します。

impl_class属性では、カスタム・イメージ・レンダラを実装するクラスの名前を指定します。

1.6.2.9 カスタム空間プロバイダの登録

MapViewerでは、シェープファイルなどの外部(Oracle Spatial and Graph以外の)ネイティブ形式用に登録された空間プロバイダの実装が存在する場合、該当する形式の空間データをレンダリングできます。(カスタム・ジオメトリ・テーマに関連付けられる)外部空間データ・プロバイダの実装については、2.3.9項を参照してください。

外部空間データ・プロバイダを登録するには、次の例のように<s_data_provider>要素を使用します。

<s_data_provider
id="shapefileSDP"
class="oracle.sdovis.ShapefileDataProvider"
>
<parameters>
<parameter name="datadir" value="/temp/data" />
</parameters>
</s_data_provider>

class属性では、外部空間データ・プロバイダを実装するクラスの名前を指定します。

<parameters>要素では、該当するデータ・プロバイダがその初期化プロセスで使用する一連の初期化パラメータを指定します。この例では、シェープファイル・プロバイダのデータ・ディレクトリ・("datadir")パラメータによって、MapViewerがデータを検索するディレクトリが示されています。

1.6.2.10 カスタムな非空間データ・プロバイダの登録

テーマ・マップ層の生成時、MapViewerは外部ソースから生成される(各地域の売上高のような)非空間属性データと、データベースに格納されているベース・ジオメトリ(全地域の境界線)を結合できます。非空間データ・プロバイダの外部属性データを使用したテーマ・マッピングについては、2.3.12.1項を参照してください。

非空間データ・プロバイダを登録するには、次の例のように<ns_data_provider>要素を使用します。

<ns_data_provider id="testProvider"
class="com.mycorp.GetSalesData" >
<parameters>
<parameter name="bi_database" value="stadb32.mycorp.com" />
<parameter name="sid" value="bidata"  />
</parameters>
</ns_data_provider>

id属性では、非空間データ・プロバイダを一意に指定します。このid値は、該当するプロバイダに関連するすべてのマップ・リクエストで使用します。

class属性では、非空間データ・プロバイダを実装するクラスの名前を指定します。

<parameters>要素では、非空間データ・プロバイダがその初期化プロセスで使用する一連の初期化パラメータを指定します。

1.6.2.11 SRSマッピングのカスタマイズ

<srs_mapping>要素を使用して、Oracle Spatial and Graph SDO_SRID値とEPSGコードのマッピングを定義する、SDO SRIDからEPSG SRIDへのマッピング・ファイルを指定できます。E.1.3項で説明するように、指定したマッピング・ファイルの各行には、SDO_SRID値とそれに対応するEPSGコードが含まれている必要があります。<srs_mapping>要素は、WMSテーマおよびWFSテーマで使用できます。

次の例では、<srs_mapping>要素を使用してSDO SRIDからEPSG SRIDへのマッピング・ファイルを指定しています。

<srs_mapping>
<sdo_epsg_mapfile>
../config/epsg_srids.properties
</sdo_epsg_mapfile>
</srs_mapping>

1.6.2.12 WMS GetCapabilitiesレスポンスのカスタマイズ

MapViewerは、Open Geospatial Consortium Web Map Server (WMS) 1.1.1に準拠したサーバーとして使用できます。そのため、WMSクライアントは、GetCapabilitiesリクエストをMapViewerに送信できます。MapViewerはレスポンスで、保持しているテーマのリストおよびリクエスト元のクライアントにとって重要な、データ・プロバイダの名前、キーワードのリストなどの情報を返送します。

注意:
MapViewer 12.nからは、MapViewer構成ファイルの<wms_config>要素の情報よりも多くの情報を格納している個別のWMSファイル(wmsConfig.xml)があります。どのようなカスタムWMS構成パラメータも、この個別のWMS構成ファイルで定義することをお薦めします。このファイルの設定は、MapViewer構成ファイルの<wms_config>要素の設定と競合するものをすべてオーバーライドします。
wmsXonfig.xmlファイルの詳細は、E.3.5項「GetCapabilitiesレスポンスのカスタマイズ:追加オプション」を参照してください。

次の例のように<wms_config>要素を使用すると、GetCapabilitiesレスポンスの一部としてクライアントに返送する説明情報をカスタマイズすることができます。

<wms_config host="www.my_corp.com" port="80"
protocol="http" default_datasource="dsrc1"
public_datasources="dsrc1,dsrc2">
<title>
WMS 1.1 interface for Oracle Application Server 10g MapViewer
</title>
<abstract>
This WMS service is provided through Oracle MapViewer.
</abstract>
<keyword_list>
<keyword>bird</keyword>
<keyword>roadrunner</keyword>
<keyword>ambush</keyword>
</keyword_list>
<sdo_epsg_mapfile>
../config/epsg_srids.properties
</sdo_epsg_mapfile>
</wms_config>

host属性では、該当するMapViewerサーバーに発行される今後のWMSリクエストでクライアントが使用するサービス・リクエストURLのホスト部を指定します。

port属性では、該当するMapViewerサーバーに発行される今後のWMSリクエストでクライアントが使用するサービス・リクエストURLのポート部を指定します。

protocol属性では、該当するMapViewerサーバーに発行される今後のWMSリクエストでクライアントが使用するサービス・リクエストURLのプロトコル部を指定します。

default_datasource属性は、機能レスポンスの取得に使用される基本データソースを指定します。この属性が定義されていない場合、データソースWMSが使用され、そのデータソースがこのMapViewerサーバーに存在する必要があります。

public_datasources属性では、GetCapabilitiesレスポンスでどのデータソース・コンテンツをリストするかを指定します。この属性が定義されていない場合、すべてのデータソース・コンテンツがリストされます。

<title>要素では、レスポンスの一部として含めるサービス・タイトルを指定します。

<abstract>要素では、レスポンスの一部として含める概要を指定します。

<keyword_list>要素では、該当するMapViewerサーバーによってサービスが提供される層のタイプを最もよく表現するキーワードのリストを指定します。

<sdo_epsg_mapfile>要素では、Oracle Spatial and Graph (SDO) SRID値から対応するEPSG SRID値へのマッピングを定義するテキスト・ファイル(通常はほとんどのWMSリクエストおよびレスポンスで使用される)を指定します。このマッピング・ファイルについては、E.1.3項を参照してください。

1.6.2.13 WMTS GetCapabilitiesレスポンスのカスタマイズ

MapViewerは、Open Geospatial Consortium WMTS (Web Map Tile Service) 1.0.0に準拠したサーバーとして使用できます。これにより、WMTSリクエストを使用して、USER_SDO_CACHED_MAPSメタデータ・ビューに定義されたタイル層を取得できます。WMTSクライアントは、GetCapabilitiesリクエストをMapViewerに送信できます。MapViewerはリクエスト元のクライアントにとって重要な、自ら保持しているタイル層のリストや、データ・プロバイダの名前、キーワードのリストなどの情報をレスポンスで返送します。mapViewerConfig.xmlと同じフォルダに格納された、wmtsConfig.xmlという名前のWMTS構成ファイルを編集すると、このようなカスタマイズされた情報を提供できます。

次の例のように、wmtsConfig.xmlの<wmts_config>要素を使用して、GetCapabilitiesレスポンスの一部としてクライアントに返送する説明情報をカスタマイズできます。

<wmts_config>
<public_datasources>
<public_datasource name="MVDEMO" include_all_tile_layers="true"/>
<public_datasource name="ELOCATION">
<tile_layers>
<tile_layer name="WORLD_MAP"/>
</tile_layers>
</public_datasource>
</public_datasources>
<sdo_epsg_mapfile>
../config/epsg_srid.properties
</sdo_epsg_mapfile>
<ServiceAttributes>
<ServiceIdentification>
<Title>Web Map Tile Service by myCorp</Title>
<Abstract> U.S. maps for state and county boundaries and big cities</Abstract>
<Keywords>
<Keyword>Maps,U.S. State Boundaries,Cities</Keyword>
</Keywords>
</ServiceIdentification>
<ServiceProvider>
<ProviderName>provider's name</ProviderName>
<ProviderSite url="http://www.myCorp.com/mySite"/>
</ServiceProvider>
</ServiceAttributes>
</wmts_config>

<public_datasources>要素に、<public_datasource>下位要素を含めることができます。この下位要素は、WMTS GetCapabilitiesレスポンスにリストされるタイル層のデータソースを指定します。この<public_datasources>要素が定義されていない場合は、すべてのデータ・ソースのタイル層がリストされます。また、この要素が定義されているが、<public_datasource>下位要素が含まれていない場合、データ・ソースからのタイル層はレスポンスにリストされません。

<public_datasource>要素にはname属性を含める必要があります。この属性は、データ・ソースの名前を示します。

include_all_tile_layers属性はオプションであり、デフォルトはfalseです。trueに設定すると、そのデータ・ソースのすべてのタイル層がレスポンスにリストされます。

<tile_layer>要素にはname属性を含める必要があります。この属性は、親要素に定義されたデータ・ソースからレスポンスに含めるタイル層の名前を示します。

<sdo_epsg_mapfile>要素は、Oracle Spatial and Graph (SDO) SRID値から、多くのWMTSリクエストおよびレスポンスで一般的に使用されているEPSG SRID値へのマッピングを定義するテキスト・ファイルを指定します。このマッピング・ファイルの詳細は、E.1.3項「SDOからEPSG SRIDへのマッピング・ファイル」を参照してください。

<Title>要素は、レスポンスの一部として含めるサービス・タイトルを指定します。

<Abstract>要素は、レスポンスの一部として含める概要を指定します。

<Keywords>要素は、MapViewerサーバーによって処理される層のタイプを最も適切に表す一連のキーワード(<Keyword>下位要素)を指定します。

詳細は、wmtsConfig.xmlファイルのコメントを参照してください。

1.6.2.14 Oracle Maps用マップ・タイル・サーバーの構成

MapViewerのOracle Maps機能では、ベース・マップ画像タイルを事前に生成し、マップ・タイル・サーバーを使用してそれらをキャッシングすることができます。<map_tile_server>要素を使用すると、次の例のように、マップ・タイル・ファイルのデフォルトの格納先やログ情報などの構成情報をマップ・タイル・サーバーに提供できます。

<map_tile_server>
<tile_storage default_root_path="/scratch/tilecache/" />
<logging log_level="finest" log_thread_name="false" log_time="true">
<log_output name="System.err"/>
</logging>
</map_tile_server>

<tile_storage>要素では、該当するMapViewerサーバーによって生成されるすべてのマップ画像タイルが格納されるデフォルトのルート・ディレクトリを指定します。

<logging>要素では、マップ・タイル・サーバーに固有なログ情報を指定します。

1.6.2.15 永続mapデータソースの定義

すべてのマップ・リクエストには、地理空間データを持つデータベース・ユーザーである、マップ・データソースを指定するデータソース属性が必要です。使用可能なマップ・データソースを事前定義するには、<map_data_source>要素を使用します。次に例を示します。

<map_data_source name="mvdemo"
jdbc_host="mapsrus.example.com"
jdbc_sid="orcl"
jdbc_port="1521"
jdbc_user="scott"
jdbc_password="!password"
jdbc_mode="thin"
number_of_mappers="5"
allow_jdbc_theme_based_foi="true"
plsql_package="web_user_info"
/>

<map_data_source>要素の属性として、次の情報を指定できます。

- name属性では、MapViewerに対して一意のデータソース名を指定します。データソースを識別するすべてのマップ・リクエストで、データソース名を指定する必要があります。

- 必要なすべての接続情報、コンテナ・データソース名またはネット・サービス名(TNS名)のいずれかを指定する必要があります。つまり、jdbc_host、jdbc_sid、jdbc_port、jdbc_user、またはcontainer_ds、またはjdbc_tns_nameのうちどれか1つのみを指定する必要があります(いずれもこの項で説明します)。
データソースを定義したデータベースを再起動して、そのデータソースがjdbc_host/jdbc_sid/jdbc_port属性またはjdbc_tns_name属性から作成される場合、データベースがオンラインに戻り次第、MapViewerは通常の動作(たとえば、マップ・リクエストに正しく作成されたマップで応答するなど)を再開します。

- jdbc_host、jdbc_sid、jdbc_portおよびjdbc_user属性では、データベース接続情報およびデータベース・ユーザー名を指定します。(これらの属性と、jdbc_password属性およびjdbc_mode属性を指定するかわりに、この項で後述するように、container_ds属性を指定することもできます。)

- jdbc_password属性では、データベース・ユーザーのログイン・パスワードを指定します。初めてパスワードを指定する場合は、先頭に感嘆符(!)を付ける必要があります。次のMapViewerの再起動時に、クリア・テキスト・パスワードは自動的に不明瞭化され、置き換えられます。
MapViewerによってこのパスワード文字列が変更されることはありません。大文字または小文字の変換も行われません。データベースで大/小文字を区別したパスワードが使用される場合は、指定したパスワードがデータベースのパスワードと完全に一致する必要があります。

- jdbc_mode属性では、データベースに接続する際に使用するOracle JDBCドライバがMapViewerに通知されます。デフォルトはthin(シン・ドライバ)です。その他の可能な値はoci8です。この場合、MapViewerが動作するホスト上にOracle Databaseクライアントもインストールされている必要があります。

- container_ds属性を使用すると、Java EEコンテナの名前(JNDI名)を指定できます。これは、jdbc_host、jdbc_sid、jdbc_port、jdbc_user、jdbc_password、およびjdbc_modeの各属性を指定するかわりになります。たとえば、WebLogic Serverコンソールを使用してJDBCデータソースを作成し、そのデータソースにjdbc/OracleDSというJNDI名を付けたとします。その場合、MapViewerの永続データソースを次のように定義できます。

<map_data_source name="mvdemo"
container_ds="jdbc/OracleDS"
number_of_mappers="5"
/>

container_ds属性を使用し、データソースを定義したデータベースの再起動後すぐにMapViewerが通常の動作(たとえば、マップ・リクエストに正しく作成されたマップで応答するなど)を自動的に再開するようにする場合は、アプリケーションに戻される前に必ず接続を検証するように、コンテナ・データソースに指示する必要があります。このオプションがサポートされているかどうか、またサポートされている場合には有効化する方法を、ミドルウェアのドキュメントで確認してください。

- jdbc_tns_name属性では、tnsnames.oraファイルで定義されているネット・サービス名を識別します。

- number_of_mappers属性では、このデータソースで使用可能なマップ・レンダラの最大数(つまり、このデータソースでMapViewerが同時に処理できるマップ・リクエストの最大数)を指定します。未処理のマップ・リクエストはキューに入れられ、最終的には処理されます。たとえば、この値が3の場合、MapViewerでは最大3つのマップ・リクエストを同時に処理できます。3つのリクエストの処理中に送信された4つ目のマップ・リクエストは、MapViewerが現在のリクエストのいずれかの処理を完了するまで待機します。
number_of_mappersに大きな値(50、100など)を指定すると、全体的なスループットを向上できますが、MapViewerがより多くの同時マップ・リクエストを処理しようとするため、ピーク負荷時のランタイム・メモリーとCPU使用率も増加させることになります。これは、アクティブなデータベース・セッションの数も増加させます。したがって、この属性にあまり大きな数値を設定しないようにしてください。

注意:
廃止されるmax_connections属性は、レンダリングに影響を与えなくなり、無視されます。number_of_mappers属性の値は、データソースに対して常にオープンになっているデータベース接続またはセッションの実際の最大数に影響を与えます。

- allow_jdbc_theme_based_foi属性を使用すると、該当するデータソースに対するJDBCテーマベースのFOIリクエストの実行を許可するかどうかを指定できます。JDBCテーマベースのFOIリクエストは、JavaScriptクライアント・アプリケーションによって作成された動的SQL問合せに基づくものです。
デフォルトでは、そのようなFOIリクエストは、この属性をtrueに設定しないかぎり、許可されません。セキュリティ侵害のおそれがあるため、JDBCテーマベースのFOIリクエストは注意して使用する必要があります。JDBCテーマベースのFOIリクエストは、非常に低い権限しか付与されず、公開対象のデータしか含まれないデータベース上でのみ許可してください。JDBCテーマベースのFOIリクエストの詳細は、6.1.1.3項を参照してください。

- plsql_package属性では、セキュアなマップ・レンダリング用に使用するPL/SQLパッケージを指定できます(1.9項を参照)。

- web_user_type属性(この項の例には表示されていません)を使用すると、認証済ユーザー名のソースを指定できます。これは、セキュアなソース・レンダリングで使用するPL/SQLパッケージの指定とあわせてCookieから認証済ユーザー名を取得する場合に特に有効です。web_user_type属性および使用例の詳細は、1.9.2項を参照してください。

1.6.2.16 HTML5 API用のマップ・データ・サーバーの構成および保護

Oracle Fusion Middlewareリリース11.1.1.7以降のMapViewerでは、デフォルトでテーマをストリーミングできるようになっています。これらのテーマを保護するには、認証の追加が必要です。これを行うには、MapViewerのweb.xmlファイルにセキュリティ制約を追加し、構成ファイルの<mds_config>要素を構成して、テーマへのアクセスを認可します。

マップ・データ・サーバー(MDS)サーバー・コンポーネントにより、Oracle Maps V2 APIへのベクトル形式の地理空間データのストリーミングが容易になります(6.2.2項「JavaScript API V2」および6.3.2項「V2 APIの使用」を参照)。MDSは、ブラウザ・クライアントがMapViewerサーバー・インスタンスから任意の事前定義済または動的(JDBC)テーマのベクトル・データをリクエストするためのRESTful APIを提供します。このサービスへのアクセスをセキュアまたは保護するための唯一の方法は、MapViewer web.xml デプロイメント・ファイルにセキュリティ制約を追加することです。次に例を示します。

<security-constraint>
<web-resource-collection>
. . .
<url-pattern>/dataserver/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>map_admin_role</role-name>
</auth-constraint>
</security-constraint>

この例は、相対パス/dataserver/を持つすべての受信URLにセキュリティ制約を追加します。MDSサーブレットは、パスに/dataserverが含まれているURLのみに応答するため、この制約はMDSへのすべてのアクセスを効果的に保護します。したがって、マップ・データ・サーバーにアクセスするすべてのアプリケーションまたはWebクライアントが適切な認証を要求され、map_admin_roleロールを持つユーザーのみがアクセスを許可されます。(MDSなどのJava EEサーブレットを保護する方法の詳細は、Java EEおよびWebLogic Serverのドキュメントを参照してください。)

MapViewerバージョン11.1.1.7.1以降では、MDS URLパターンにセキュリティ制約を追加したかどうかにかかわらず、すべての事前定義済または動的(JDBC)テーマのベクトル・データへのアクセスはデフォルトでブロックされます。つまり、たとえば/dataserver/*のURLが保護されており、HTML5アプリケーションが認証に成功した場合でも、適切な認可がないテーマのデータにアクセスできません。Oracle Maps HTML5アプリケーションが適切な認可のないテーマのロードまたは表示を試みると、「このデータソースはストリーミング・アクセスが許可されていません。」という内容を含む一般的なエラー・メッセージが表示されます。

データソースのテーマへのアクセスを許可するには、構成ファイルで明示的に<mds_config>要素を構成する必要があります。

例1-3に<mds_config>要素を示します。ここでは、2つのMapViewerデータソース、mvdemoとmy-dataが特定のテーマをクライアントにストリームできるように構成されています。

例1-3 mds.xmlファイルの構成

<mds_config>

<data_source name="mvdemo">
<allow_predefined_themes>true</allow_predefined_themes>
<deny>my_secret_theme</deny>
<allow_dynamic_themes>true</allow_dynamic_themes>
</data_source>

<data_source name="my-data">
<allow_predefined_themes>false</allow_predefined_themes>
<allow>
<theme>public_points_theme</theme>
<theme>office_locations*</theme>
</allow>
<allow_dynamic_themes>false</allow_dynamic_themes>
</data_source>

</mds_config>

例1-3の内容は次のとおりです。

- 各データソースは、独自の<data_source>要素内でそれぞれのテーマを認可します。この要素では、2つのタグ、<allow_predefined_themes>および<allow_dynamic_themes>が、この2つのテーマ・タイプへの全体的またはデフォルトのアクセス制御を提供します。動的(JDBC)テーマは、データソース定義内(メインmapViewerConfig.xmlファイル)で無効にすることもできます。動的テーマがデータソース定義で無効になっている場合、その設定が常に優先されます(どのように、<mds_config>要素に設定されているかは関係ありません)。

- mvdemoデータソースでは、デフォルトですべてのクライアントが事前定義済テーマおよび動的(JDBC)テーマのベクトル・データにアクセスできます。これはデータの特性を考えると(一般公開されたサンプルからのデータ)、妥当な選択です。ただし、my_secret_themeテーマには<deny>タグが使用されており、例外になっています。

- my-dataデータソースでは、両方のテーマ・タイプへのアクセスがデフォルトでブロックされています。この場合は、<allow>タグを使用して例外を追加します(ストリーミングのために特定のテーマを開く)。<allow>タグおよび<deny>タグでは、テーマの名前またはパターンは大文字と小文字が区別されません。また、ワイルド・カード文字*(アスタリスク)を使用して複数のテーマに一致させることができます。この例では<allow>タグを使用して、public_points_themeテーマおよび名前がoffice_locationsで始まるすべてのテーマをストリーミングのために開放していますが、他のすべてのテーマはブロックされています。このデータソースでは、動的(SQL)テーマは許可されません。

<mds_config>要素を変更した場合は、デプロイされたMapViewerインスタンスを再起動して、変更を有効にする必要があります。

1.6.3 MapViewer管理タスクの実行

MapViewerの構成方法だけでなく、MapViewer管理ページを使用したその他の重要な管理タスクの実行方法も知っておく必要があります。このページへのログイン方法については、1.6.1項を参照してください。

MapViewer管理者として実行できるタスクには、次のようなものがあります。

- 構成ファイルの編集
「構成」をクリックします。

- データソースのリストのリフレッシュ
「管理」をクリックしてリストを自動的にリフレッシュするか、「リフレッシュ」をクリックして手動リフレッシュを実行します。

- MapViewerのスタイル、テーマ、およびベース・マップのキャッシングされた定義の消去
「管理」をクリックし、データソースを選択して、「キャッシュされたメタデータのパージ」をクリックします。

- 事前定義済テーマからのキャッシュされたジオメトリ・データの消去
「管理」をクリックし、「ジオメトリ・キャッシュ」をクリックして、選択したテーマまたはすべてのテーマの「パージ」をクリックします。

- Oracle Mapsのマップ・タイル層の作成
「管理」、「タイル・レイヤーの作成」の順にクリックし、タイル層のタイプを選択して、「次」をクリックします。

「Internal」マップ・ソース: マップ・キャッシュ名を入力した後、データソースとベース・マップを選択します。また、キャッシュ記憶域(タイルの格納先)、ズーム・レベル、最小および最大スケール、空間参照ID (SRID)、データ枠ボックス(MBR)、およびタイルのサイズと形式のパラメータも定義します。「次」をクリックし、「送信」をクリックして、マップ・タイル層を作成します。また、「XML」をクリックし、XMLでマップ・キャッシュ・プロパティを定義することもできます。

「External」マップ・ソース: マップ・キャッシュ名を入力した後、データソースを選択します。外部ソースにアクセスするには、マップ・サービスURL、リクエスト・メソッド(GETまたはPOST)、プロキシ情報(必要な場合)、サーバー上のJavaアダプタ・クラス名とその位置、アダプタのその他のプロパティなどのパラメータを定義します。また、キャッシュ記憶域(タイルの格納先)、ズーム・レベル、最小および最大スケール、空間参照ID (SRID)、データ枠ボックス(MBR)、およびタイルのサイズと形式のパラメータも定義します。「次」をクリックし、「送信」をクリックして、マップ・タイル層を作成します。また、「XML」をクリックし、XMLでマップ・キャッシュ・プロパティを定義することもできます。

その他のタイプのタイル層(Oracle Maps、Bing、Here、Google、TomTom)についても、同様の手順を実行してください。

- Oracle Mapsのマップ・タイル層の管理
「管理」をクリックして、「タイル・レイヤーの管理」をクリックします。その後、次のいずれかの操作を実行します。

タイル層のリストを手動でリフレッシュする場合は、「リフレッシュ」をクリックします。

マップ・タイル層を編集するには、その層の行を選択して、「詳細の編集/表示」をクリックします。

マップ・タイル層を表示および管理するには、その層の行を選択して、「マップの表示/タイルの管理」をクリックします。

1.7 Oracle Real Application ClustersとMapViewer

データベースがOracle Real Application Cluster (Oracle RAC)である場合、次のいずれかのオプションを使用してOracle RACデータベースに接続できます。

- WebLogic Server 12cなどのJava EEコンテナのデータソースを介してMapViewerがデータベースに接続するようにします。
Oracle RACデータベースに接続するJDBCデータソースをWebLogic Server Enterprise Managerに作成します(1.7.1項を参照)。このデータソースは、JNDIルックアップを利用してMapViewerおよびその他のアプリケーションで使用できます。

このオプションは、管理者がこれらの種類の接続をWebLogic Server用に作成および監視するサイト、または接続が複数のアプリケーションによって使用されるサイトでよく使用されます。また、このオプションでは、データベース接続の詳細(データベースのユーザー名やパスワードなど)がアプリケーションで非表示になります。

- MapViewerが直接にデータベース・サービスに接続できるようにします。
データベースSIDではなく、Oracle RACサービス名を使用してMapViewerデータソースを直接に定義します(1.7.2項を参照)。

このオプションは、前述のオプションよりも実装が簡単です。

これらのオプションのいずれかを実行した後、MapViewerを再起動します(1.7.3項を参照)。

1.7.1 MapViewerサーバーのOracle RACコンテナ・データソースの作成

Oracle RAC MapViewerコンテナにJDBCデータソースを作成し、MapViewer構成ファイルでそのコンテナ・データソースを使用できます。その手順は次のとおりです。

1. Oracle RACコンテナ・データソースの作成。

2. コンテナ・データソースによるMapViewerデータソースの作成。

1.7.1.1 Oracle RACコンテナ・データソースの作成

Oracle Enterprise Manager 12c以降を使用して、Oracle RACデータベースに接続するデータソースを作成できます。

次の手順に、GridLinkデータソースの作成方法を示します。(この手順の後にマルチ・データソースの作成方法を示します。)

1. Enterprise Managerにログインし、「ターゲット・ナビゲーション」ペインで、MapViewerサーバーが含まれているサーバー・インスタンスをクリックします。
図1-5で、「WebLogicドメイン」下の「map_viewer1」をクリックすると、ウィンドウのメイン領域にmap_viewer1のサーバー情報が表示されます。

図1-5 サーバー・インスタンスの選択

2. 図1-6に示すように、「WebLogic Server」をクリックし、「JDBCデータソース」を選択します。

図1-6 JDBCデータソースの表示

3. 図1-7に示すように、「JDBCデータソース」で「作成」をクリックして「GridLinkデータ・ソース」を選択します。

図1-7 GridLinkデータソースの作成

4. 新規JDBCデータソースの作成ウィザードで、必要な情報を入力します。たとえば、jdbc/mvdemoというコンテナ・データソースを作成する場合は次のとおりです。

1. データソース・プロパティ:データソース名にはmvdemo、ドライバ・サービス名にはOracle Driver (Thin XA) for GridLink Connections Versions: Any、JNDI名にはjdbc/mvdemoと指定します。

2. 接続プロパティ:適切なホストにデータベース・ユーザーmvdemoのURLを生成します。

3. トランザクション・プロパティ:表示されたトランザクション・プロパティを受け入れます。

4. ONSプロパティ:表示されたトランザクション・プロパティを受け入れるか、必要に応じて変更します。

5. ターゲットの選択:「名前」の下のmap_viewer1 を選択して目的のサーバーにJDBCデータソースをデプロイします。

6. 確認:新規に作成するデータソースのプロパティを確認します。変更する必要がある場合は、戻って変更を加えてからこのページに戻ります。

前述の手順のようなGridLinkデータソースではなく、マルチ・データソースを作成するには、必要に応じて手順を変えてください。次に例を示します。

1. Enterprise Managerにログインし、「ターゲット・ナビゲーション」ペインで、MapViewerサーバーが含まれているサーバー・インスタンスをクリックします。
図1-8で、「WebLogicドメイン」下の「map_viewer1」をクリックすると、ウィンドウのメイン領域にmap_viewer1のサーバー情報が表示されます。

図1-8 サーバー・インスタンスの選択

2. 図1-9に示すように、「WebLogic Server」をクリックし、「JDBCデータソース」を選択します。

図1-9 JDBCデータソースの表示

3. 図1-10に示すように、「JDBCデータソース」で「作成」をクリックして「マルチ・データソース」を選択します。

図1-10 マルチ・データソースの作成

4. 必要な情報を入力します。例:

1. データソース・プロパティ:データソース名にはmvdemo、JNDI名にはjdbc/mvdemo、アルゴリズム・タイプにはFailoverと指定します。

2. ターゲットの選択:「名前」の下のmap_viewer1 を選択します。

3. データソース・タイプの選択:デフォルト値を受け入れます(non-XA Driver)。

4. 「新しいデータ・ソースの作成」をクリックします。

5. 最初のデータソース・ノードのプロパティを指定します。例:名前はmvdemo-rac0、JNDI名はjdbc/mvdemo-rac0、データベース・タイプはOracle。

6. データベース・ドライバには、Oracle's Driver (Thin) for Oracle RAC Service-Instance connections: Versions: Anyを選択します。

7. デフォルト値を受け入れます(Supports Global TransactionsおよびOne-Phase Commit)。

8. ノード1の接続プロパティを定義します。サービス名、データベース名、ホスト名、ポート、データベース・ユーザー名、パスワードおよびプロトコルの値を入力します。

9. プロパティを確認し、「構成のテスト」をクリックします。成功した場合は、「次へ」をクリックします。

10. MapViewerのデプロイ先サーバー(map_viewer1)を選択し、「終了」をクリックします。

11. 次のページで、「新しいデータ・ソースの作成」をクリックして2番目のノードを作成および構成します。

12. 2番目のデータソース・ノードのプロパティを指定します。例:名前はmvdemo-rac1、JNDI名はjdbc/mvdemo-rac1、データベース・タイプはOracle。

13. データベース・ドライバには、Oracle's Driver (Thin) for Oracle RAC Service-Instance connections: Versions: Anyを選択します。

14. デフォルト値を受け入れます(Supports Global TransactionsおよびOne-Phase Commit)。

15. ノード2の接続プロパティを定義します。サービス名、データベース名、ホスト名、ポート、データベース・ユーザー名、パスワードおよびプロトコルの値を入力します。

16. プロパティを確認し、「構成のテスト」をクリックします。成功した場合は、「次へ」をクリックします。

17. MapViewerのデプロイ先サーバー(map_viewer1)を選択し、「終了」をクリックします。

18. ノードの追加が必要な場合は、「新しいデータ・ソースの作成」をクリックして、前述のような方法で各ノードを作成します。

1.7.1.2 コンテナ・データソースによるMapViewerデータソースの作成

MapViewerコンテナのコンテナ・データソースを作成した後(1.7.1.1項を参照)、MapViewerデータソースにcontainer_ds属性を追加して、Oracle RACデータベースへの接続が可能な新しいMapViewerデータソースを作成します。次に例を示します。

<map_data_source  name="mvdemo"
container_ds="jdbc/mvdemo"
number_of_mappers="7" />

この例の内容は、次のとおりです。

- name属性は、MapViewerデータソース名を指定します。これはマップ・リクエストのために必要です。

- container_ds属性の値は、新規JDBCデータソースの作成ウィザードの「データソース・プロパティ」ページで指定した「JNDI名」と一致している必要があります。

- number_of_mappers属性では、このデータソースをターゲットにできる、サポートされる同時マップ・リクエストの最大数を指定します。

これらの属性の詳細は、1.6.2.15項「永続マップ・データソースの定義」を参照してください

1.7.2 Oracle RACサービス名によるMapViewerデータソースの作成

MapViewer構成ファイルでcontainer_ds属性を使用してJDBCコンテナ・データソースを作成するかわりに(1.7.1項を参照)、Oracle RACデータ・サービスへの接続パラメータを指定して直接にMapViewer構成ファイルにMapViewerデータソースを作成できます。(この接続タイプは、Oracle Databaseリリース11.2以上でのみ使用できます。)次に例を示します。

<map_data_source name="mvdemo"
jdbc_host="rac.mycompany.com"
jdbc_sid="//srv.mycompany.com"
jdbc_port="1521"
jdbc_user="mvdemo"
jdbc_password="!mypassword"
jdbc_mode="thin"
number_of_mappers="8"
allow_jdbc_theme_based_foi="true"
editable="false"
/>

この例の内容は、次のとおりです。

- jdbc_host属性は、Oracle RAC SCAN IPアドレスまたはホスト名である必要があります。

- jdbc_sid属性は、SID値ではなく、Oracle RACデータベース・サービス名を指定します(jdbc_sid="//srv.mycompany.com"の先行の//文字に注意)。

この例の属性の詳細は、1.6.2.15項「永続マップ・データソースの定義」を参照してください

1.7.3 MapViewerの再起動

1.7.1項「MapViewerサーバーのOracle RACコンテナ・データソースの作成」または1.7.2項「Oracle RACサービス名によるMapViewerデータソースの作成」の手順を実行した後、MapViewerを再起動して新規に作成したデータソースを有効にする必要があります。

MapViewerの再起動の後、データソースからのマップをリクエストすると、MapViewerが必要なデータベース接続を取得します(1.7.1項のオプションを選択した場合はコンテナから取得、1.7.2項のオプションを選択した場合は直接に接続パラメータから取得)。

1.8 高可用性とMapViewer

注意:
この項は、MapViewerでOracle Fusion Middlewareの高可用性機能をフルに利用する上級ユーザーを対象としています。ユーザーには高可用性機能についての十分な理解が必要です。高可用性機能については、『Oracle Fusion Middleware高可用性ガイド』を参照してください。

MapViewerのユーザーは、Oracle DatabaseおよびOracle Fusion Middlewareの高可用性機能を利用できます。

1.8.1 中間層クラスタでのMapViewerのデプロイ

MapViewerはWebLogic Serverクラスタにデプロイできます。ただし、各ホストで生成された画像ファイルの命名方法およびクライアント・アプリケーションによるURLでの参照方法には注意する必要があります。

次の例を検討します。マップ・リクエストがフロントWebサーバーに送信されると、リクエストはホストAで稼働しているMapViewerサーバーに届けられます。ホストAのMapViewerからは生成されたマップ画像のURLが返信され、クライアントは実際の画像をフェッチするために2番目のリクエストを送信します。この2番目のリクエストはホストBで稼働しているWebLogic Serverで受信されますが、このWebLogic Serverにはそのような画像がありません(あるいは、同じ名前の間違った画像が返されます)。

どのような環境でも、この問題に対する最善の解決策はありません。1つの選択肢として、異なるホストで稼働する異なるMapViewerサーバーによってマップ画像が同一の仮想(ネットワーク化された)ファイル・システムに置かれるように、ホストで共通のネットワーク・ストレージを共有する方法があります。画像を異なるサブディレクトリに置いたり、画像に異なるファイル接頭辞を付けたりするため、MapViewerインスタンスごとに、マップ・ファイル・ストレージ情報(1.6.2.2項を参照)を構成する必要があります。この情報を構成しない場合、複数のMapViewerサーバーによって生成された画像ファイルが、ディスク上で互いを上書きする可能性があります。マップ・ファイル・ストレージ情報を適切に構成すると、クライアントに返された各URLにより、ネットワーク・ドライブ上で確実に正しいマップが一意に識別されます。

ネットワーク・ドライブを使用できない場合は、ロード・バランサの使用を検討してください。各MapViewerインスタンスで、確実に一意性を保つための適切な方法を使用して、生成された画像ファイルに名前を付けるため、まずMapViewerインスタンスごとに、マップ・ファイル・ストレージ情報を構成する必要があります(前のパラグラフを参照)。これで、URLがあるパターン(指定したマップ画像ファイル接頭辞を含むなど)に一致する場合に画像リクエストを特定のホストにリダイレクトするルールを、ロード・バランサで指定できます。

1.9 セキュアなマップ・レンダリング

この項では、Webユーザーの識別情報に基づいてセキュアなマップ・レンダリングを実装する方法について説明します。同じテーマを表示するときでも、ユーザー各自のロールや権限に応じて、表示される地物のセットを変えることができます。基本的な考え方は、Webユーザーがテーマを利用するためにデータベースにアクセスする場合、MapViewerでは常に特定のPL/SQLパッケージを起動してそのユーザーの識別情報をデータベース内に設定するというものです。このユーザー情報は、データ・アクセス制御を行うためにデータベースで使用されます。

注意:
この項では、「ユーザー」および「認証済ユーザー」という用語は、Oracle Fusion MiddlewareまたはOracle Single Sign-On (SSO)にログインするアプリケーションまたはWebユーザーを意味します。これは、データベース・ユーザーとは異なります。MapViewer自体は、すべての地理空間データが格納されているデータベース・スキーマに直接接続します。

MapViewerは、すべての地理空間データが格納されているデータベース・スキーマに直接接続します。このスキーマ内のデータについて、MapViewerのアクセス制御を実施するには、次の手順を実行する必要があります。

1. データベース・スキーマにPL/SQLパッケージを作成します。このパッケージには、少なくともset_user(username)およびclear_user()という2つのプロシージャを含める必要があります。

2. PL/SQLパッケージに格納されるユーザー識別情報に基づき(この情報は、データベース・セッションごとにset_userプロシージャを使用してMapViewerによって設定されます)、ビューの作成、データベース・オブジェクトに対するアクセス権の設定、およびその他のタスクを実行します。

3. スキーマに対するMapViewerデータソースを作成し、データソース定義の一部としてPL/SQLパッケージの名前を指定します。これがセキュアなデータソースとみなされます。

4. ステップ2で作成したビューを基にしてMapViewerテーマを作成します。

5. MapViewerアプリケーションのページにアクセスするユーザー用のWeb認証を設定し、マップ・リクエストがMapViewerサーブレットに届いたときに、Webセッション・オブジェクトに認証済ユーザーの識別情報が含まれるようにします。

6. ステップ4で定義したテーマを表示するマップ・リクエストまたはFOI(対象地物)リクエストを、直接発行するか、またはベース・マップとOracle Mapsを使用して発行します。
MapViewerでは、PL/SQLパッケージを使用してユーザー識別情報をデータベースに自動的に渡した後、これらのテーマに関する問合せを実行します。識別されたユーザーに対して表示可能な行のみがデータベースから返されて、MapViewerによってレンダリングされます。

1.9.1項では、セキュアなマップ・レンダリングが機能する仕組みについて説明し、実装の詳細といくつかの例を紹介します。1.9.3項では、ユーザー認証のオプションおよび付属のデモについて説明します。

1.9.1 セキュアなマップ・レンダリングが機能する仕組み

MapViewerは、Java EEアプリケーションとして、Oracle Fusion MiddlewareまたはOracle Single Sign-On (SSO)で認証済であるWebユーザーの識別情報を取得できます。このユーザー情報はデータベースに送ったり保存したりできます。データベースでは、このユーザー識別情報に基づいて、マップ層や表へのセキュア・アクセスを設定できます。たとえば、データベース管理者(DBA)は、特定のユーザーに対して表示できる空間地物のみを選択する実表のビューを作成することが可能です。

Oracle Fusion MiddlewareまたはOracle Single Sign-On (SSO)からデータベースにWebユーザーの識別情報を渡すには、データベースにユーザー識別情報を設定するセキュアなPL/SQLパッケージを使用します。このPL/SQLパッケージは、DBAまたはアプリケーション開発者が作成し、データソース・スキーマにインストールします。このようなパッケージには、プロシージャやファンクションをいくつ含めてもかまいませんが、少なくとも次の2つのプロシージャは必ず含める必要があります。

- set_user(username)

- clear_user()

セキュアなデータソースからテーマがリクエストされると、MapViewerでは、関連するPL/SQLパッケージのset_userプロシージャを起動した後でそのテーマに対するデータの問合せを実行します。テーマに対する問合せプロセスが完了すると、MapViewerはclear_userプロシージャを起動します。

例1-4に、セキュアなマップ・レンダリング用として使用できるPL/SQLパッケージを示します。このパッケージは、MVDEMOサンプル・スキーマで作成できます。

例1-4 セキュアなマップ・レンダリング用のPL/SQLパッケージ

CREATE OR REPLACE PACKAGE web_user_info
AS
PROCEDURE set_user (p_name IN VARCHAR2);
PROCEDURE clear_user;
FUNCTION  get_user
RETURN VARCHAR2;
END;
CREATE OR REPLACE PACKAGE BODY web_user_info
AS
w_name VARCHAR2 (32767);

PROCEDURE set_user (p_name IN VARCHAR2)
AS
BEGIN
w_name := LOWER (p_name);
END;

PROCEDURE clear_user
AS
BEGIN
w_name := null;
END;

FUNCTION get_user
RETURN VARCHAR2
AS
BEGIN
RETURN w_name;
END;
END;
/

例1-4では、set_userとclear_userが必須の2つのメソッドで、get_userは、ビューを作成したり他のデータ・アクセスを制御したりするために使用できる便宜的なファンクションです。

このパッケージ(基本的に現行のデータベース・セッションに対するユーザー識別情報を含む)を作成した後、このユーザー情報を使用する複雑な仮想プライベート・データベースを設定できます(Oracle Virtual Private DatabaseまたはVPDの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照)。ただし、わかりやすくするため、この項ではVPDの作成については扱わず、このユーザー情報を使用してデータ・アクセス制御を行うビューを作成できることのみを示します。

たとえば、MVDEMOサンプル・スキーマ内の既存のCUSTOMERS表にACCOUNT_MGRという列を追加して、この表に格納されている各顧客にアカウント・マネージャを割り当てることができます。次に、特定のアカウント・マネージャに対して顧客の行のみを返すビューを作成します(例1-5を参照)。

例1-5 セキュアなマップ・レンダリング用のビュー

CREATE OR REPLACE VIEW customers_view
AS
SELECT * FROM customers
WHERE account_mgr = web_user_info.get_user;

このビューを基にして、アカウント・マネージャがログインして顧客データをマップ上に表示する場合に、各自の担当する顧客しか表示されないようなMapViewerテーマを定義することが可能になります。

PL/SQLパッケージをインストールしたら、データソース定義の一部として、plsql_package属性を使用してこのパッケージの名前をMapViewerに渡すことができます(例1-6を参照)。

例1-6 セキュアなマップ・レンダリング用のデータソース定義

<map_data_source name="mvdemo"
jdbc_host="system32.example.com"
jdbc_sid="mv"
jdbc_port="15214"
jdbc_user="mvdemo"
jdbc_password="password"
jdbc_mode="thin"
number_of_mappers="3"
allow_jdbc_theme_based_foi="true"
plsql_package="web_user_info"
/>

データソース定義にPL/SQLパッケージ名を指定すると、MapViewerは該当するデータソースをセキュアなデータソースとしてフラグ付けし、このデータソースでテーマの問合せを実行するときは常に、パッケージのset_userプロシージャおよびclear_userプロシージャを自動的に起動します。

1.9.2 Cookieからのユーザー名の取得

認証済ユーザー情報は、Java EEやOSSOのセッションからMapViewerに渡されない場合があります。MapViewerをApplication Express (APEX)内に統合したときなどがそうですが、この場合、認証がAPEXにより行われるため、Java EEやOSSOのセッションからユーザー名を取得できません。この問題を回避するため、MapViewerではCookieからのユーザー名の取得もサポートしています。認証済ユーザー名を保持するためのAPEX内のCookieの設定は、各自の責任において行ってください。

指定したCookieからMapViewerがユーザー名を確実に取得するようにするには、データソース定義にweb_user_type属性を(必須のplsql_package属性に加えて)指定する必要があります。たとえば、MapViewerでMON_USERという名前のCookieからユーザー名を取得する場合は、セキュアなデータソース定義は例1-7のようになります。

例1-7 Cookie名を指定するデータソース定義

<map_data_source name="mvdemo"
jdbc_host="system32.example.com"
jdbc_sid="mv"
jdbc_port="25650"
jdbc_user="mvdemo"
jdbc_password="LfCDQ6NH59nuV7zbeY5QY06sqN7XhiUQ"
jdbc_mode="thin"
number_of_mappers="3"
allow_jdbc_theme_based_foi="true"
plsql_package="web_user_info"
web_user_type="MON_USER"
/>

web_user_type属性に使用できる値は次のとおりです。

- J2EE_USER: Java EEセッションから認証済ユーザー名を取得するようMapViewerに指示します。

- OSSO_USER: OSSOセッションから認証済ユーザー名を取得するようMapViewerに指示します。

- <cookie-name>: 指定した名前のCookieから認証済ユーザー名を取得するようMapViewerに指示します。Cookie名は大/小文字が区別されません。

web_user_type属性が指定されていない場合、MapViewerではユーザー名をまずJava EEセッションで検索し、見つからない場合はOSSOセッションで検索します(存在する場合)。

1.9.3 ユーザー認証: オプションとデモ

ユーザーをいつ、どこで、どのように認証するかは、アプリケーションの要件やインストールのセットアップに応じて異なります。たとえば、次のようなオプションがあります。

- MapViewerをエンタープライズ・ポータル・サイトの一部としてデプロイし、エンド・ユーザーがMapViewerを利用してマッピング機能を実行する前に、最初に必ずこのポータルにログインするようにします。

- MapViewerを別のシステムにデプロイし、中央のOracle SSOサーバーでユーザーを認証するようにします。

MapViewerに届くHTTPリクエストに認証済のユーザー情報が含まれているかぎり、MapViewerはそのリクエストをデータベースに渡すことができ、セキュアなデータ・アクセス方法は想定どおりに機能します。

1.9.4 MapViewerでのシングル・サインオン(SSO)の使用

MapViewerでマップを表示するユーザーの認証のためにシングル・サインオンを設定する場合は、次の主要手順に従ってください。

1. Oracle Access Managerのインストール。

2. MapViewerの構成。

3. Oracle Access Managerの構成。

4. MapViewerのOracle Access Managerログアウト・パラメータの構成

5. Oracle HTTP Serverの構成。

1.9.4.1 Oracle Access Managerのインストール

Oracle Access Manager (Access Managerとも呼ばれる)は、Webシングル・サインオン(SSO)、認証、認可、ポリシーとエージェントの集中管理、リアルタイム・セッション管理および監査のコア機能を提供します。

Oracle Access Managerがまだインストールされていない場合は、『Oracle Fusion Middleware Oracle Identity Managementインストレーション・ガイド』の該当するOracle Identify Managementリリース用のOracle Identity and Access Managementに関する章の手順に従ってください。

1.9.4.2 MapViewerの構成

SSOでの使用のためにMapViewerを構成するには、次の手順を実行します。

1. Oracle Access Managementアサータを追加し、構成します。

1. ドメインのWebLogic Serverコンソールを使用して「セキュリティ・レルム」に移動し、レルム名のリンク→「プロバイダ」→「認証」をクリックします。

2. 「認証プロバイダ」で、「新規」をクリックして「新しい認証プロバイダの作成」ページを表示します(図1-11を参照)。

図1-11 新しい認証プロバイダの作成

「名前」には、この認証プロバイダの任意の名前を指定します。例: OAM Id Asserter

「タイプ」では、OAMIdentityAsserterを選択します。

3. 「OK」をクリックします。

4. 「認証プロバイダ」表で、作成したプロバイダ名のリンクをクリックします。

5. プロバイダの「設定」で、「共通」タブの「制御フラグ」をREQUIREDに設定します。

6. 「アクティブなタイプ」で「選択済み」リストにObSSOCookieおよびOAM_REMOTE_USERを追加します。

7. 「保存」をクリックします。

2. OIDの認証プロバイダを追加し、構成します。

1. ドメインのWebLogic Serverコンソールを使用して「セキュリティ・レルム」に移動し、レルム名のリンク→「プロバイダ」→「認証」をクリックします。

2. 「認証プロバイダ」プロバイダで「新規」をクリックして「新しい認証プロバイダの作成ページを表示します。
「名前」には、この認証プロバイダの任意の名前を指定します。例: OID Authenticator

「タイプ」でOracleInternetDirectoryAuthenticatorを選択します。

3. 「OK」をクリックします。

4. 「認証プロバイダ」表で、作成したプロバイダ名のリンクをクリックします。

5. プロバイダの「設定」で、「共通」タブの「制御フラグ」をSUFFICIENTに設定し、「保存」をクリックします。

6. 「プロバイダ固有」タブをクリックし、このOracle Internet Directory認証プロバイダのプロバイダ固有の構成を指定します。
ホスト: LDAPサーバーのホスト名またはIPアドレス。

ポート: LDAPサーバーをリスニングするポートの番号。

プリンシパル: WebLogic ServerがLDAPサーバーとの接続に使用するLDAPユーザーの識別名(DN)。

資格証明および資格証明の確認: LDAPサーバーへの接続に使用する資格証明(通常はパスワード)。

ユーザー・ベースDN:ユーザーが含まれているLDAPディレクトリのツリーの基本識別名(DN)。

ユーザー名属性:ユーザーの名前を指定するLDAPユーザー・オブジェクト・クラスの属性。指定するユーザー名属性は、「すべてのユーザーのフィルタ」属性と「名前指定によるユーザー・フィルタ」属性に指定したユーザー名属性と一致している必要があります。

グループ・ベースDN:グループが含まれているLDAPディレクトリのツリーの基本識別名(DN)。

7. 「保存」をクリックします。

3. プロバイダを並べ替えます。

1. プロバイダ・リストのページに移動します(「ホーム」→「セキュリティ・レルムのサマリー」→レルム名→「プロバイダ」)

2. プロバイダ・リストの下の「並替え」をクリックします。

3. 「認証プロバイダの並替え」ページで「使用可能」プロバイダを並べ替えて、作成したプロバイダをリストの最初に配置します。次のようにします。
(指定したOAMアイデンティティ・アサータ)

(指定したOID認証プロバイダ)

DefaultAuthenticator

DefaultIdentityAsserter

4. 「OK」をクリックします。

4. Oracle Access Manager (OPSS) SSOプロバイダを構成します。

1. いくつかのパラメータを適切なサーバーの値に置き換えてaddOAMSSOProvider() WLSTコマンドを実行します。実行する文の形式は次のとおりです。

$ ORACLE_HOME/common/bin/wlst.sh
connect('weblogic', 'welcome1' [,host,port])
addOAMSSOProvider(loginuri="/${app.context}/adfAuthentication", logouturi="/oamsso/logout.html")
disconnect()

connect()のhostおよびportパラメータは、デフォルトではlocalhost:7001になります。これらのデフォルト値をオーバーライドする必要がある場合は、それらのパラメータを指定してください。

2. ドメインを再起動します(管理サーバーとすべての管理対象サーバー)。

1.9.4.3 Oracle Access Managerの構成

Oracle Access Managerでアプリケーション・ドメインを作成します。アプリケーション・ドメインは、シングル・サインオン処理がトリガーされるようにアプリケーションURIを保護するために使用されます。表1-1は、MapViewerの設定が必要な保護されたURIおよび公開URIを示しています。

表1-1 MapViewerアプリケーション・ドメインの保護されたURIおよび公開URIの設定

保護されたURI

公開URI

/mapviewer/console

/mapviewer/mapadmin

/mapviewer/mcsadmin

/mapviewer

/mapviewer/dataserver

/mapviewer/foi

/mapviewer/mcserver

/mapviewer/wms

/mapviewer/wmts

アプリケーションの各保護されたURIおよび各公開URIを設定する必要があります。概念および手順の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のOracle Access Manager (OAM)の構成に関するトピックを参照してください。

1.9.4.4 MapViewerのOracle Access Managerログアウト・パラメータの構成

バージョン12.2から、SSOサインオンでMapViewerを使用する場合は、Oracle Access Manager (OAM)の構成(1.9.4.3項を参照)に加えて、MapViewer構成ファイルでログアウト・パラメータを定義する必要もあります。OAMのログアウトURLパラメータは、OAMコンソールを使用してWebGateのプロパティから取得できます。次に、構成ファイル内の関連セクションを示します。

<!-- ****************************************************************** -->
<!-- ******************** OAM centralized logout  ******************** -->
<!-- ****************************************************************** -->
<!-- Uncomment the <oam_logout> tag to configure the logout URL
for MapViewer JET web console. The parameters should be related with
the OAM logout redirect URL value registered in OAM installation:
protocol: http, https,...
host: OAM host
port: OAM logout port
mv_webgate_port: OAM MapViewer server port (Webgate port). It is optional,
but is recommended to allow a correct logout of the
non OAM MapViewer that is setup in the OAM environment
-->
<!--
<oam_logout
protocol="http"
host="oam.host.com"
port="7001"
mv_webgate_port="0001"
/>-->

1.9.4.5 Oracle HTTP Serverの構成

HTTPリクエストをアプリケーションに転送するようにOracle HTTP Serverを構成します。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のOracle HTTP Serverのインストールおよび構成に関するトピックを参照してください。

1.10 MapViewerのデモとチュートリアル

いくつかのMapViewerデモおよびチュートリアルは、mvdemo.earという名前の別のアプリケーション・アーカイブに含まれており、このアーカイブは、mapviewer.earのデプロイ先と同じJava EEコンテナにデプロイされます。

これらのデモとチュートリアルは、一度デプロイすると、http://host:port/mvdemo/という形式のURLからアクセス可能になります。

また、次の場所から入手可能なリソースも参照してください。

http://www.oracle.com/technetwork/middleware/mapviewer/downloads/

2 MapViewerの概念

この章では、MapViewerの使用前に熟知しておく必要がある概念について説明します。

基本概念には、スタイル、テーマ、ベース・マップ、マッピング・メタデータおよびマップがあります。

- スタイルは、スタイルに関連付けられた地物のレンダリング・プロパティを定義します。たとえば、テキスト・スタイルは、マップ上でこうした地物がどのようにラベル付けされるかを決定し、線スタイルは、道路などの線形地物のレンダリングを決定します。

- テーマは、スタイリング・ルールの使用によってスタイルに関連付けられた地物(空間属性および非空間属性を持つエンティティ)の集合です。

- ベース・マップは、1つ以上のテーマで構成されます。(ベース・マップはテーマと同じ名前を持つことができません。)

- マッピング・メタデータは、データベースに格納されたスタイル、テーマおよびベース・マップのリポジトリで構成されます。

- マップは、MapViewerがマップ・リクエストに応答して作成するコンポーネントの1つです。マップには、画像ファイル、画像ファイルのオブジェクト表現または画像ファイルを参照するURLがあります。

この章の主な項目は、次のとおりです。

- 2.1項「MapViewerの概要」

- 2.2項「スタイル」

- 2.3項「テーマ」

- 2.4項「マップ」

- 2.5項「データソース」

- 2.6項「マップの生成方法」

- 2.8項「MapViewerでのWorkspace Managerのサポート」

- 2.9項「MapViewerのメタデータ・ビュー」

2.1 MapViewerの概要

アプリケーションでMapViewerを使用すると、特定のスタイル(色、パターンなど)が特定のテーマ(つまり、都市、河川、高速道路などの空間地物の集合)に適用され、マップ(Webページに表示するGIF画像など)がレンダリングされます。たとえば、アプリケーションにより表示するマップで、州立公園を緑色で示し、レストランを赤い星印でマーク付けします。通常、マップには、政治的または物理的エンティティ(あるいはその両方)を表す複数のテーマがあります。たとえば、マップに表示されるのは、国や州の境界線、都市、山脈、河川および史跡などです。レンダリングされたマップでは、各テーマは、画像全体の1つの層を表します。

MapViewerでは、スタイル、テーマおよびベース・マップの他、各テーマに1つ以上のスタイルを適用するためのルールを定義できます。これらのスタイル、テーマ、ベース・マップおよび関連するルールは、データベース内の、MDSYSスキーマのマップ定義表に格納され、メタデータ・ビューを使用して参照可能です。データベース・インスタンス内のすべてのスタイルは、全ユーザーによって共有されます。ユーザーがアクセスできるマッピング・メタデータ(一連のスタイル、テーマおよびベース・マップ)は2.9項で説明するMapViewerメタデータ・ビュー(USER_SDO_STYLES、USER_SDO_THEMES、USER_SDO_MAPSなど)によって決定されます。特定のユーザーがアクセスできるマップ定義オブジェクトのセットは、ユーザーのマッピング・プロファイルとも呼ばれます。スタイル、テーマおよびベース・マップは、スタンドアロンのMap Builderツール(第7章を参照)を使用して管理できます。

2.2 スタイル

スタイルは、空間地物を表す際に使用できる視覚属性です。ポイント地物、線地物および領域地物を表す基本的なマップの記号およびラベルは、個別のスタイルとして定義および格納されます。各スタイルには一意の名前があり、1つ以上のグラフィック要素がXML構文で定義されます。

各スタイルは、次のいずれかのタイプとなります。

- 色: 塗りまたはストローク(枠線)あるいはその両方の色。

- マーカー: 指定された塗りおよびストロークの色の形状、または画像。マーカーは多くの場合、空港、スキー場および歴史的施設などのポイント地物を表すアイコンです。
ある線地物に対してマーカー・スタイルが指定されている場合、レンダリング・エンジンにより、この線上の適切なポイントが選択され、その点にマーカー・スタイル(米国州間高速道路の盾マーカーなど)が適用されます。

- 線: 線スタイル(幅、色、終端スタイル、結合スタイル)、オプションの中心線、輪郭およびハッシュ・マーク。通常、線は高速道路、河川、パイプラインおよび送電線などの線形地物に使用されます。また、街路や高速道路を描画するのに便利な縁取り付き線スタイルも使用できます。

- 領域: 色またはテクスチャ、(オプションの)ストロークの色。通常、領域は郡および国勢調査単位などのポリゴン地物に使用されます。

- テキスト: フォント指定(サイズおよびファミリ)、オプションのハイライト(太字、イタリック)、フォアグラウンド・カラー。通常、テキストは注釈およびラベル付け(都市や河川の名前など)に使用されます。

- 拡張: 主にテーマ・マッピング(2.3.12項を参照)に使用される複合物。基本的な拡張スタイルであるBucketStyleでは、単純なレンダリング(およびオプションでラベリング)のスタイルのセットとバケットのセットとの関係が定義されます。表示される各地物について、その地物の指定値または値セットにより分類されるバケットが決まり、そのバケットに関連付けられたスタイルが地物の表示に使用されます。バケット・スタイルについては、A.6.1項を参照してください。
さらに、カラー・スキーム(A.6.2項を参照)および可変(目盛付き)マーカー(A.6.3項を参照)という2種類の特殊なバケット・スタイルが提供されています。その他の拡張スタイルとしては、ドット密度(A.6.4項を参照)、棒グラフ(A.6.5項を参照)、コレクション(A.6.6項を参照)、可変円グラフ(A.6.7項を参照)、ヒート・マップ(A.6.8項を参照)があります。

表2-1は、各タイプのスタイルに適用可能なジオメトリ・タイプをリストしています。

表2-1 スタイル・タイプおよび適用可能なジオメトリ・タイプ

スタイル・タイプ

適用可能なジオメトリ・タイプ

色

(任意のタイプ)

マーカー

ポイント、線

線

線

領域

ポリゴン

テキスト

(任意のタイプ)

拡張

(任意のタイプ)

データベース・ユーザーが使用できるスタイルはすべて、そのユーザーのUSER_SDO_STYLESビューに格納されます。このビューについては、2.9項および2.9.1項を参照してください。

マップ・リクエストの一部として、任意のスタイル・タイプの動的に定義されるスタイル(一時的スタイル)も作成できます。これらを作成する方法は、次のどのAPIを使用するかによって異なります。

- ネイティブXML API。<map_request>要素内のXML要素を使用してスタイルを定義します。

- JavaBean API。動的に定義されるスタイルをマップ・リクエストに追加します(4.3.4項を参照)。

- Oracle Maps JavaScript API。クラスおよびメソッドを使用して、すべてのタイプのスタイルを動的に作成します。

どの場合でも、実際に作成するのはスタイルのXML定義です。この定義に基づいて動的に定義されるスタイルは、MapViewerサーバーにマップ・リクエストがあるときにMapViewerサーバーによって作成されます。動的に作成されたスタイルは、リクエストが完了するとMapViewerサーバーによって破棄されます。

スタイルのタイプの詳細(各タイプを定義するためのXML形式に関する情報を含む)は、付録Aを参照してください。

この項の主な内容は次のとおりです。

- 第2.2.1項「スタイルのサイズ変更(スケーラブルなスタイル)」

- 第2.2.2項「バケットのラベル・スタイルの指定」

- 第2.2.3項「テキスト・ラベルおよびマーカーの方向設定」

- 第2.2.4項「テキスト・スタイルのスティッキー化」

- 第2.2.5項「任意のスタイルを持つサンプル画像の取得」

2.2.1 スタイルのサイズ変更(スケーラブルなスタイル)

スタイル定義で、デフォルトのピクセル(px)以外の単位を指定した場合、そのスタイルはスケーラブルになります。つまり、スタイルに関連付けられた地物のサイズをマップ上でズームインまたはズームアウトすることにより変更できます。たとえば、マーカー・スタイルの幅と高さを100mと指定すると、マーカーは、現在のズーム・レベルのマップ・スケールにあわせて、各辺が100メートルの正方形として表示されます。

次に示すのは、スタイル・タイプと、関連のサイズ単位を持つ属性です。

- マーカー・スタイル: マーカー・サイズ(高さと幅)およびテキスト属性(フォント・サイズ、ラベル・オフセット)

- 線スタイル: 全体的な線の幅、中心線の幅と破線パターン、矢印線と破線パターン、ハッシュ・マーク、マーカー・パターン(サイズ、オフセット、間隔)

- テキスト・スタイル: フォント・サイズ、ハローの幅

- 棒グラフ・スタイル: バーの幅と高さ

- ドット密度スタイル: ドットの幅と高さ

- 円グラフ・スタイル: ピット半径

例2-1では、各サイズを15キロメートル(15.0km)とする枠ボックス内の星型マーカーを定義します。この定義は、ある国のすべてまたは大部分を表示する地図上で州の主要な都市を識別する場合に便利ですが、特定の都市やその周辺地域をズームインする場合には役に立ちません。

例2-1 スケーラブルなマーカー・スタイル

<style name="M.STAR_CAPITAL_CITY">
<svg width="1in" height="1in">
<desc/>
<g class="marker" style="stroke:#000000;fill:#FF0000;fill-opacity:0;width:15.0km;height:15.0km;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>

例2-2では、全体的な線の幅を10メートル(10.0m)、枠線の幅を1メートル(1.0m)として、線スタイルを定義します。この定義は、主要な高速道路沿いの主要な都市を識別する場合に便利です。

例2-2 スケーラブルな線スタイル

<style name="L.PRIMARY_HIGHWAY">
<svg width="1in" height="1in">
<desc></desc>
<g class="line" cased="true" style="fill:#33a9ff;stroke-width:10.0m">
<line class="parallel" style="fill:#aa55cc;stroke-width:1.0m"/>
</g>
</svg>
</style>

MapViewerでは、ピクセル以外のサイズ単位を持つスタイルをレンダリングまたはラベル付けする場合、現在のマップ領域および表示領域に基づいて、そのサイズ単位を画面ピクセルに変換してから、スタイルのレンダリングやラベル付けを行います。スケーラブルなスタイルのサイズは、マップ上でズームインまたはズームアウトすることにより変化します。ズームアウトで、スタイルの全体サイズが0(ゼロ)以下になると、そのスタイルはレンダリングもラベル付けもされません。

サイズ単位は、既知の空間参照システム(SRS)に関連付けられたデータについてのみ使用できます。データのSRSが存在しなかったり未知のものである場合、すべてのサイズ値にピクセルが使用されます。また、Map Builderユーティリティでレンダリングされたプレビューや凡例では、指定したサイズ単位のかわりにピクセル値が使用されます。(凡例については、2.4.2項を参照してください。)

スケーラブルなスタイルは、MapViewerのリリース11g (11.1.1)以上で機能します。それ以前のリリースのMapViewerでは使用できません。

2.2.2 バケットのラベル・スタイルの指定

コレクションベースのバケット・スタイルおよび個々の範囲ベースのバケット・スタイル(それぞれA.6.1.1項とA.6.1.2項で説明)には、各バケット要素でlabel_style属性を使用して、ラベリング・スタイルを指定できます。例2-3では、V.COUNTY_POP_DENSITYという拡張スタイルを作成します。このスタイルでは、各バケットにテキスト・ラベル・スタイルが割り当てられ(label_style属性を使用)、一部のスタイルは複数のバケットに使用されます。

例2-3 各バケットにテキスト・ラベル・スタイルを指定した拡張スタイル

<?xml version="1.0" ?>
<AdvancedStyle>
<BucketStyle>
<Buckets>
<RangedBucket seq="0" label="&lt;150k"
low="-Infinity" high="150000"
style="C.CB_QUAL_8_CLASS_DARK2_1"
label_style="T.BLUE_SERIF_12"/>
<RangedBucket seq="1" label="150k - 350k"
low="150000" high="350000"
style="C.CB_QUAL_8_CLASS_DARK2_2"
label_style="T.BLUE_SERIF_12"/>
<RangedBucket seq="2" label="350k - 600k"
low="350000" high="600000"
style="C.CB_QUAL_8_CLASS_DARK2_3"
label_style="T.BROWN_SERIF_12"/>
<RangedBucket seq="3" label="600k - 1000k"
low="600000" high="1000000"
style="C.CB_QUAL_8_CLASS_DARK2_4"
label_style="T.BROWN_SERIF_12"/>
<RangedBucket seq="4" label="1000k - 1500k"
low="1000000" high="1500000"
style="C.CB_QUAL_8_CLASS_DARK2_5"
label_style="T.GREY_SERIF_12"/>
<RangedBucket seq="5" label="1500k - 2500k"
low="1500000" high="2500000"
style="C.CB_QUAL_8_CLASS_DARK2_6"
label_style="T.GREY_SERIF_12"/>
<RangedBucket seq="6" label="2500k - 5000k"
low="2500000" high="5000000"
style="C.CB_QUAL_8_CLASS_DARK2_7"
label_style="T.GREEN_SERIF_12"/>
<RangedBucket seq="7" label="&gt;=5000k"
low="5000000" high="Infinity"
style="C.CB_QUAL_8_CLASS_DARK2_8"
label_style="T.GREEN_SERIF_12"/>
</Buckets>
</BucketStyle>
</AdvancedStyle>

個々の範囲ベースのバケットでは、下限値は含まれますが上限値は含まれません(ただし、他の範囲の値より大きい値が含まれる範囲では、上限値は含まれます)。いずれの範囲にも、他の範囲の値と重複する値の範囲を含めることはできません。

例2-3のV.COUNTY_POP_DENSITYスタイルがマップ・リクエストで使用されると、図2-1のようなマップが表示されます。ここでは、郡名が様々なテキスト・スタイル(この場合は郡の総人口により異なる)を反映したラベルで表示されています。

図2-1 異なるバケットに応じた様々なラベル・スタイル

例2-3では、最後のバケットを除くすべてのバケットでラベル・スタイルを指定しています。ラベル・スタイルが指定されていないバケットに分類される地物の場合、その地物に適用されるラベル・スタイル(ある場合)は、次の条件によって決まります。

- テーマのスタイリング・ルールの<label>要素で、拡張スタイル以外のラベル・スタイルが指定されている場合、その地物のラベルには指定されたラベル・スタイルが使用されます。次の例では、<label>要素のスタイル指定(T.STATE_NAME)が<features>要素のスタイル指定(V.COUNTY_POP_DENSITY)と異なっているため、指定されたラベル・スタイルを持たないバケットに分類される地物はT.STATE_NAMEスタイルを使用してラベルが付けられています。

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule column="TOTPOP">
<features style="V.COUNTY_POP_DENSITY">
</features>
<label column="county" style="T.STATE NAME">
1
</label>
</rule>
</styling_rules>

- テーマのスタイリング・ルールの<label>要素で、ラベル・スタイルとして拡張スタイルが指定されている場合、地物にはラベルが付きません。(図2-1で一部の郡にラベルがないのはこのためです。)次の例では、<features>要素と<label>要素の両方で拡張スタイルV.COUNTY_POP_DENSITYが指定されているため、ラベル・スタイルの指定がないバケットに分類される地物にはラベルが付きません。

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule column="TOTPOP">
<features style="V.COUNTY_POP_DENSITY">
</features>
<label column="county" style="V.COUNTY_POP_DENSITY">
1
</label>
</rule>
</styling_rules>

2.2.3 テキスト・ラベルおよびマーカーの方向設定

テキスト・ラベルおよびマーカーの方向は、方位ポイントを使用して、マップ上で制御できます。方位ポイントは、Oracle Spatial and Graphに用意されている特殊なタイプのポイント・ジオメトリです。方位ポイントでは、座標がそのポイントの位置と仮想終点の両方を表し、方位ベクターを示します。方位ベクターに従い、テキストの整列やマーカー記号の回転が行われます。方位ベクターについては、3.1.2.5項およびその項の図3-3を参照してください。方位ポイントの詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。

2.2.3.1 テキスト・スタイルの方位の制御

ポイントのテキスト・ラベルを方位ベクターの方向に向けるには、マップ・リクエストでOracle Spatial and Graph方位ポイントとしてポイントを指定します。MapViewerで方位ポイントのラベルを付けると、ポイントの位置のテキスト・ラベルは自動的に中央揃えになり、ラベルが方位ベクターの方向を指すように位置が調整されます。

各地物を同様にラベル付けするには、その位置を方位ポイントとして指定する必要があります。これらの方位ポイントを1つの表にまとめ、ポイント・ジオメトリを含む列で空間索引を作成できます。これにより、ラベリングとして希望するテキスト・スタイルを指定し、ポイント自体がマップ上に表示されないようにレンダリング・スタイルに透明の色スタイルを指定することで、表に基づいたテーマを作成できます。

例2-4は、座標(12,14, 0.3,0.2)を持つ1つの方位ポイントにラベルを付けるマップ・リクエストで、(12,14)はポイントのX座標およびY座標を表し、(0.3,0.2)は方位ベクターを表します。ここでは、テキストは表示されても、下にあるポイントが表示されないようにするために、動的に定義される透明色スタイル(transparent_color)を使用して、ポイントをレンダリングします。

例2-4 方位ポイントのラベル付け

<map_request
title="Labeling Oriented Points"
datasource="my_datasource"   width="400"  height="300"
antialiase="true"
format="PNG_STREAM">

<themes>
<theme name="theme1">
<jdbc_query
spatial_column="geom"  jdbc_srid="8265"
render_style="transparent_color"
label_column="label" label_style="t.street name"
datasource="tilsmenv">
SELECT SDO_GEOMETRY(2001, 8265, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1, 3, 1, 0),
SDO_ORDINATE_ARRAY(12, 14, .3, .2))
geom, 'Oriented Point' label FROM dual
</jdbc_query>
</theme>
</themes>

<styles>
<style name="transparent_color">
<svg width="1in" height="1in">
<g class="color" style="stroke:#ff0000;stroke-opacity:0">
<rect width="50" height="50"/>
</g>
</svg>
</style>
</styles>
</map_request>

図2-2は、例2-4のリクエストにより生成されるマップの一部を示しています。(ラベルは方位ポイントという語句です。)

図2-2 方位ポイントのラベルのマップ表示

2.2.3.2 マーカーの方位の制御

方位ポイントにマーカー・スタイルが適用される場合、MapViewerではマーカー・スタイルを自動的に回転し、方位ベクターの方向を指すようにします。マーカー・スタイルを回転する場合は、マーカーの中央を中心にして回転します。

図2-3は、方位ポイントを使用してマーカー・スタイルの方位を制御する方法を示しています。この図では、まず元のマーカー・スタイルが回転なしで示されています。しかし、マーカーが2.2.3.1項の例2-4と同じ方位ポイントに適用されると、マーカー・スタイルは方位ベクターを反映するために、それに応じて回転します(この例では約34度左回り)。

図2-3 方位マーカー

2.2.4 テキスト・スタイルのスティッキー化

テキスト・スタイルを「スティッキー」として指定すると、そのテキスト・スタイルをラベル・スタイルとして使用する地物はすべて、該当するテキスト・ラベルが常にマップに描画されます。例2-5に示すスタイルのXML定義では、sticky属性をtrueに設定しています。

例2-5 sticky属性を持つテキスト・スタイル

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
<g class="text" sticky="true" style = "font-style:plain;font-family:Serif;font-size:11pt;font-weight:bold;fill:#000000">
Hello World!
</g>
</svg>

2.2.5 任意のスタイルを持つサンプル画像の取得

データベースに格納されている事前定義済スタイルのサンプル画像を取得する場合は、単純なHTTPリクエストをMapViewerサーバーに発行します。このリクエストでは、サンプル画像のサイズ、バックグラウンド・カラーおよび返される画像の形式を指定できます。このようなリクエストは、スタイルの視覚リストをWebページに表示したり、カスタムのマップ凡例を作成したり、様々なスタイルの表示様式を見たりする場合に便利です。

HTTPリクエストには次のようなパラメータがあり、styを除いてすべてオプションです。

- sty(必須)ではスタイルの名前を指定します。

- dsでは該当するスタイルにアクセスできるデータソースを指定します。デフォルト時は、MapViewerのデフォルトのデータソースが使用されます。

- wでは、サンプル画像の幅(ピクセル数)を指定します。デフォルト値は20です。

- hでは、サンプル画像の高さ(ピクセル数)を指定します。デフォルト値は20です。

- fでは、サンプル画像の形式を指定します。指定可能な値は、png (直接PNG画像ストリーム)、png_url (PNG画像のURL)、gif (直接GIF画像ストリーム)またはgif_url (GIF画像のURL)です。デフォルト値はpngです。その場合、MapViewerサーバーは、生成されたPNG画像データをサーバー・ディスクに保存することなく、ストリーミングによりクライアントに直接返します。

- bgでは、サンプル画像のバックグラウンド・カラーを指定します。形式は0xrrggbbのように16進文字列である必要があります。たとえば、グレーの場合は0x808080となります。デフォルト値は、0xffffff(白)です。
バックグラウンドを透明にするには、bgを拡張16進文字列として指定し、アルファ値を0xaarrggbbの形式で含めます。たとえば、0x00ffffffではスタイル画像のバックグラウンドが完全に透明になり、0x55ffffffは透明値が0x55 (10進値の80)の白のバックグラウンドです。アルファ値の範囲は、0x00(完全な透明)から0xff(完全な不透明)までです。

- aaでは、サンプル画像をアンチエイリアシング・モードでレンダリングするかどうかを指定します。デフォルト値は、文字列trueです。アンチエイリアシングを使用しない場合は、文字列falseを指定します。

次の例では、グレーのバックグラウンド・カラーでデフォルト・サイズの20x20ピクセルのアンチエイリアシングされたPNG画像を生成し、MapViewerデフォルト・データソースのM.STARというマーカー・スタイルを表示しています。

http://www.mycorp.com/mapviewer/omserver?sty=m.star&bg=808080

先のリクエストでは、図2-4のような表示が生成されます。

図2-4 指定したマーカー・スタイルのサンプル画像

次の例では、デフォルトの白のバックグラウンド・カラーで幅が60ピクセル、高さが25ピクセルのアンチエイリアシングされたGIF画像を生成し、mvdemoというMapViewerデータソースのL.PHという線スタイルを表示しています。

http://www.mycorp.com/mapviewer/omserver?sty=l.ph&ds=mvdemo&f=gif&w=60&h=25&aa=true

先のリクエストでは、図2-5のような表示が生成されます。

図2-5 指定した線スタイルのサンプル画像

2.3 テーマ

テーマは、MapViewerにおける最も重要な概念といえます。テーマは、特定のデータ層のビジュアル表現です。概念的には、テーマとは類似する属性を共有する地理的地物の集合です。また、地物のレンダリングやラベル付けに使用するスタイルをMapViewerに指定するためのレンダリング・ルールおよびラベル付けルールも共有されます。より正確に言えば、テーマを定義するときは、実際にはデータを取得する場所とその方法、データをレンダリングおよびラベル付けする方法の情報をMapViewerに提供します。

テーマはどのように作成されるかによって、事前定義済テーマまたは動的(JDBC)テーマに分類できます。事前定義済テーマの場合、テーマの定義はスタンドアロンのMap Builderツールで作成され、データベースに格納されます。動的テーマの場合、テーマの定義(XML)はアプリケーションによってリアルタイムに作成されます。通常、動的テーマではアプリケーションによって作成されたカスタムのSQL問合せを使用してデータが取得されます。

一般に、テーマのデータは空間的に有効な表、つまりSDO_GEOMETRY型の列を持つデータベース表またはビューから取得されます。たとえば、US_STATESというテーマは、GEOMETRYという列およびその他の非空間属性の列を持つSTATES表に基づきます。このタイプのテーマは、ジオメトリ・テーマと呼ばれることがあります。ジオメトリ・データだけでなく、データベースで管理されるその他のタイプの地理的データを、対応するテーマのタイプに関連付けることができます。たとえば、次のような関連付けが可能です。

- BLOBに格納された地理参照画像(画像テーマ)

- Oracle Spatial and Graph GeoRasterデータ(GeoRasterテーマ)

- Oracle Spatial and Graphネットワーク・データ・モデル(ネットワーク・テーマ)

- Oracle Spatial and Graphトポロジ・データ・モデル(トポロジ・テーマ)

- 地図の注釈テキスト(注釈テーマ)

MapViewerテーマは、データベースに格納されている地理的データのレンダリングはもちろん、Webサービス(WFS、WMSおよびWMTS)または(カスタム空間データ・プロバイダ・インタフェース経由で)ローカル・ファイル・システムなど他のソースから取得したデータのレンダリングにも使用できます。

テーマに関連付けられているデータのタイプにかかわらず(ただし外部でレンダリングされたマップ層を表すWMSおよびWMTSテーマを除く)、各テーマに対してMapViewerのスタイリング・ルールを定義する必要があります。また、スタイリング・ルールによって参照されるスタイルは、マッピング・メタデータの一部としてデータベースに存在し、格納されることが必要です。

この項の主な内容は次のとおりです。

- 第2.3.1項「事前定義済テーマ」

- 第2.3.2項「JDBCテーマ」

- 第2.3.3項「イメージ・テーマ」

- 第2.3.4項「GeoRasterテーマ」

- 第2.3.5項「ネットワーク・テーマ」

- 第2.3.6項「トポロジ・テーマ」

- 第2.3.7項「WFSテーマ」

- 第2.3.8項「WMTSテーマ」

- 第2.3.9項「カスタム・ジオメトリ・テーマ」

- 第2.3.10項「注釈テキスト・テーマ」

- 2.3.11項「線形参照システム(LRS)テーマ」

- 2.3.12項「テーマ・マッピング」

- 第2.3.13項「テーマの外観に影響を与える属性」

2.3.1 事前定義済テーマ

事前定義済テーマは、定義がすでにユーザーのデータベース・スキーマに格納されているテーマです。データベース・ユーザーのすべての事前定義済テーマは、そのユーザーのUSER_SDO_THEMESビュー(2.9項、特に2.9.2項を参照)に格納されています。マップ・リクエストに事前定義済テーマを含める場合、指定が必要なのはテーマ名のみです。MapViewerでは、そのテーマの定義を自動的に検索し、それに基づいて問合せを作成し、関連する空間データおよび属性データを取得して、そのテーマのスタイリング・ルールに従ってデータをレンダリングします。

事前定義済テーマはそれぞれ、実表またはビューと関連付ける必要があります。テーマをビューに基づいたものにする場合は、ビュー所有者のUSER_SDO_GEOM_METADATAビュー(Oracle Spatial and Graph開発者ガイドを参照)に、ビューとその空間列を指定する行を挿入する必要があります。ビューが結合ビューの場合(つまり、複数の表に基づいている場合)、テーマのスタイリング・ルールでkey_column属性(A.7項を参照)を指定する必要があります。これは、MapViewerがデフォルトで、実表の行IDに基づき事前定義済テーマのジオメトリをキャッシュするためです。しかし、結合ビューの場合にはROWID擬似列がないため、キー列を指定する必要があります。

ほとんどのタイプの事前定義済テーマ(ただしWMSテーマを除く)は、Map Builderツールを使用して作成し、プレビューを表示できます。Map Builderツールについては、第7章を参照してください。

2.3.1.1 事前定義済空間ジオメトリ・テーマのスタイリング・ルール

事前定義済テーマは必ず、1つ以上のスタイリング・ルール、すなわちテーマの表示方法を制御するXML形式の仕様に関連付けられています。この項では、事前定義済空間ジオメトリ・テーマ(例2-6に示すAirportテーマなど)のスタイリング・ルールについて説明します。画像、GeoRaster、ネットワークおよびトポロジなど、その他のタイプのテーマには、それぞれに固有のスタイリング・ルールがあり、これらについては、各テーマの項で説明します。ただし、すべてのタイプのテーマのスタイリング・ルールは、XML文書の<styling_rules>要素の下にまとめられており、この要素はUSER_SDO_THEMESビューで各事前定義済テーマのSTYLING_RULES列に格納されています。(<styling_rules> DTDについては、A.7項を参照してください。)

注意:
この章で示す例のスタイル名の接頭辞には、次のネーミング規則を使用しています。v.は変数(拡張スタイル)、m.はマーカー、c.は色、l.は線、t.はテキストを示します。(スタイルが現行ユーザーのスキーマにない場合は、所有者のスキーマ名の後にコロンを付けて指定する必要があります。たとえば、mdsys:c.redのように指定します。)
XML文書の内容(文字データ)で、<および>を表すには、それぞれ&lt;および&gt;を使用してください。使用しない場合、WHERE CATEGORY > 'B'などにおける<または>が、XMLパーサーによりXMLタグの一部として解釈されます。

例2-6 Airportテーマに対するスタイリング・ルールのXML定義

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule>
<features style="c.black gray">
runway_number &gt; 1
</features>
<label column="name" style="t.airport name">
1
</label>
</rule>
<rule>
<features style="m.airplane">
runway_number = 1
</features>
</rule>
</styling_rules>

各スタイリング・ルールには、必須の<features>要素およびオプションの<label>要素があります。<features>要素では、ユーザー定義の条件や選択された地物に使用されるスタイルに基づいて選択される表またはビューの行(地物)が指定されます。有効なSQL条件をこの要素の値として指定できます。<label>要素では、選択された地物に注釈を付けるかどうか、さらに、注釈を付ける場合はテキスト・ラベルに使用する表またはビュー内の列が指定されます。

例2-6では、Airportテーマに関連付けられた2つのスタイリング・ルールを示します。

- 1つ目のルールでは、条件runway_number &gt; 1(つまり、1より大きい滑走路番号)を満たす行のみが選択されるように指定しており、これらの行はc.black grayというスタイルを使用してレンダリングされます。値が指定されていない場合、WHERE句の条件は適用されません。たとえば、次のように定義されているとします(つまり、runway_number &gt; 1の条件が省略されています)。

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule>
<features style="c.black gray"/>
<label column="name" style="t.airport name">
1
</label>
</rule>
</styling_rules>

この場合、すべての空港地物が選択され、c.black grayという色スタイルを使用してレンダリングされます。

さらに、1つ目のルールに含まれる<label>要素では、表またはビュー内のNAME列を使用して各空港に注釈を付け、t.airport nameというテキスト・スタイルを使用するように指定しています。<label>要素の値には、数値を評価する任意のSQL式を使用できます。この値を使用して、地物に注釈を付けるかどうかが決定されます。数値が0(ゼロ)より大きい場合、地物に注釈が付けられます。この場合、値が定数1であるため、<features>要素で指定されたすべての地物に、NAME列の値を使用して注釈が付けられます。ある地物について値が0(ゼロ)以下である場合、この地物には注釈が付けられません。

- 2つ目のルールは、滑走路が1つのみである空港に適用されます。このルールには<label>要素がないため、このような空港にはすべて注釈が付けられません。さらに、2つ目のルールを満たす地物は、<features>要素で指定されるように、異なるスタイル(m.airplane)を使用してレンダリングされます。

各スタイリング・ルールは、テーマの実表またはビューに対するフィルタとして考えることができます。これは、スタイリング・ルールによって行のサブセットのみが選択され、そのルールのレンダリング・スタイルおよびラベリング・スタイルが適用されるためです。実際は、MapViewerによって各スタイリング・ルールに対する完全なSQL問合せが作成されます。この問合せ文字列は一定の形式に従っています(2.3.1.2項を参照)。

2.3.1.2 スタイリング・ルールに対するMapViewerでのSQL問合せの作成方法

スタイリング・ルールに対してMapViewerがSQL問合せを作成する方法を確認するために、Airportテーマの例(2.3.1.1項の例2-6)の1つ目のスタイリング・ルールについて考えてみます。

<styling_rules>
<rule>
<features style="c.black gray">
runway_number &gt; 1
</features>
<label column="name" style="t.airport name">
1
</label>
</rule>
. . .
</styling_rules>

MapViewerは、このテーマを処理するときに、このスタイリング・ルールに対して次のような問合せ文字列を作成します。

SELECT ROWID, GEOMETRY, 'C.BLACK GRAY', NAME, 'T.AIRPORT NAME', 1, 'rule#0'
FROM AIRPORT_POINT
WHERE MDSYS.SDO_FILTER(GEOMETRY,
MDSYS.SDO_GEOMETRY(2003, 8265, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),
MDSYS.SDO_ORDINATE_ARRAY(:mvqboxxl, :mvqboxyl, :mvqboxxh, :mvqboxyh)),
'querytype=WINDOW') = 'TRUE'

この問合せ文字列の詳細は次のとおりです。

- テーマの実表の名前であるAIRPORT_POINTがFROM句に指定されています。

- SELECT構文のリストには、1つ目の列としてROWIDが含まれています。ROWIDは、事前定義済テーマのデフォルトのkey_column属性です。

- SELECT構文のリストの次の列はGEOMETRYです。これは、このテーマのジオメトリ列です。

- SELECT構文のリストの次の列は、リテラル文字列'C.BLACK GRAY'です。これは、このルールのレンダリング・スタイル名です。

- SELECT構文のリストの次の列はNAMEであり、この列はラベル・テキストを提供します。これは、このスタイリング・ルールの<label>要素で指定されます。

- SELECT構文のリストの次の列は、リテラル文字列'T.AIRPORT NAME'です。これは、<label>要素で指定されるラベリング・スタイル名です。

- SELECT構文のリストの次の列は、リテラル値1です。これは、<label>要素自体の値です。

- SELECT構文のリストの次の列は、リテラル文字列'rule#0'です。これは、MapViewerのみが内部で使用します。

- 長いWHERE句の基幹となっているのはOracle Spatial and Graphのフィルタ演算子、SDO_FILTERです。このWHERE句はMapViewerによって自動的に追加されます(テーマを定義するときにユーザーが指定する必要はありません)。これによって、現在のマップ表示ウィンドウに関連する地理的地物のみが実表からフェッチされます。4つのバインディング変数(mvqboxxl、mvqboxyl、mvqboxxhおよびmvqboxyh)には、現在のマップ表示ウィンドウの座標が自動的に代入されます。

MapViewerが事前定義済ジオメトリ・テーマのスタイリング・ルールに対するSQL問合せを作成するときは常に、前述の形式が使用されます。トポロジ・テーマやGeoRasterテーマなどその他のタイプのテーマに対する問合せについては、別の形式が使用されます。このような他の問合せに使用される形式についてはここでは説明しませんが、興味がある場合は、MapViewerインスタンスのロギング・レベルをFINESTに設定し、特定のタイプのテーマを含むマップ・リクエストを発行してからMapViewerのログ・ファイルを調べれば、MapViewerによって作成された正確な問合せを確認できます。

この処理により、問合せの結果セットの各行(各地物)に、MapViewerで必要となるすべての情報(空間データ、レンダリング・スタイル名とラベリング・スタイル名、ラベル・テキストおよびラベル付け条件)が格納されます。次にMapViewerは各行のメモリー内地物オブジェクトを作成し、レンダリング・パイプラインに送信してマップに表示されるようにします。

1つのテーマに2つ以上のスタイリング・ルールが指定されている場合、ルールのSQL問合せ(1つ目から最後まで)に対しUNION ALL操作が実行され、表またはビューから必要条件を備えた地物がフェッチされます。

ルールに拡張スタイルが指定されている場合は、ルールに対する問合せのSELECT構文のリストにその拡張スタイルで必要となる追加属性の列が加えられます。

2.3.1.3 バインディング・パラメータを含むスタイリング・ルール

2.3.1.2項で説明したように、スタイリング・ルールの<features>要素では実表またはビューから地物を選択するための問合せ条件を定義できます。通常、この問合せ条件には、Airportテーマにおけるrunway_num > 1のようなハードコード化されたSQL式が含まれます。ただし、そのかわりに問合せ条件にバインディング変数を含めることもできます。このようなテーマは、基本的に特定の地物の表示方法を示すテンプレートを定義するものであり、問合せ条件にバインディング値を提供することによって地物の正確なセットが実行時に決定されることから、一般にテンプレート付きテーマと呼ばれます。

テンプレート付きテーマの概念により、単一のテーマを定義してマップ・リクエスト間でバインディング値を変更することが可能になります。たとえば、次のスタイリング・ルールについて考えてみます。

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule>
<features style="C.RED"> (state_abrv=:1) </features>
<label column="STATE" style="T.STATE NAME"> 1 </label>
</rule>
</styling_rules>

このスタイリング・ルールでは、state_abrv属性の値に基づく問合せ条件を持つ<features>要素を定義しています。この属性値はアプリケーションにより提供されます。MapViewerリクエストには、テーマ・セクションにバインディング・パラメータが定義されている必要があります。各バインディング・パラメータは1つの値およびSQL型で定義されます。次に示すマップ・リクエストのテーマの定義では、州の略記の値はME、可変SQL型はStringです。値MEは、事前定義済テーマのスタイリング・ルールで使用されます。

<theme name="THEME_US_DYN_STATES" >
<binding_parameters>
<parameter value="ME" type="String"/>
</binding_parameters>
</theme>

2.3.1.4 1つのスタイリング・ルールへの複数のレンダリング・スタイルの適用

スタイリング・ルールの<feature>要素では、style属性を使用してレンダリング・スタイルを1つのみ指定できます。複数のテーマを使用せずに1つの地物に複数のレンダリング・スタイルを適用しようとすると、スタイリング・ルールごとに選択される地物のサブセットが異なるため、複数のスタイリング・ルールを指定することはできません。複数のテーマを使用することなく1つの地物に複数のレンダリング・スタイルを適用するには、<features>要素のstyle属性のかわりに<rendering>要素を使用する必要があります。

<rendering>要素では、次の例に示す形式を使用します。

<rendering>
<style name="V.POIVMK" value_columns="FEATURE_CODE">
<substyle name="V.POIVBKT" value_columns="POINT_ID" changes="FILL_COLOR"/>
</style>
</rendering>

<rendering>要素では、地物をレンダリングするときに使用するスタイルの名前、および拡張スタイルで使用する1つ以上の値列(カンマ区切り)を<style>要素で指定します。この例では、スタイル名はV.POIMVK、値列はFEATURE_CODEです。

<style>要素の<substyle>要素により、2種類の属性値の組合せを使用した地物のレンダリングが可能になります。たとえば、地物の形状を<style>要素で定義し、地物の色を<substyle>要素で定義できます。これは、2つの属性値に基づくポイント地物を1回でレンダリングするのに便利です。1つ以上の値列を(カンマ区切りで)指定したり、適用する変更内容(現在サポートされているのはFILL_COLORのみ)を指定したりできます。

<rendering>要素で複数の<style>要素を指定することにより、次のことが可能になります。

- ベース拡張スタイルに複数の属性(列)を関連付け、サブスタイルを使用して他の属性によりレンダリングが影響を受けるような拡張スタイルを作成する。たとえば、1つの値列に基づきサイズが異なるマーカーを表示する一方で、別の値列に基づき補助的な色スタイルを使用してこれらのマーカーの塗りの色を変更するような拡張スタイルが作成可能です。

- 1つの地物のレンダリングに複数のスタイルを使用する(積上げスタイルの効果が得られます)。

例2-7は、<rendering>要素を使用する事前定義済テーマのスタイリング・ルールを示しています。<features>要素はルールの一部であり、問合せ条件を指定するために定義が必要です。ただし、style属性は指定されていません。<rendering>要素で地物のレンダリング方法が定義されています。

注意:
例2-7に示すような<rendering>要素を含むスタイリング・ルールの使用は、リリース10.1.3.1以前のバージョンのMapViewerとは互換性がありません。

例2-7 <rendering>要素を使用したスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule>
<features> </features>
<label column="NAME" style="T.STREET2"> 1 </label>
<rendering>
<style name="V.POIVMK" value_columns="FEATURE_CODE">
<substyle name="V.POIVBKT" value_columns="POINT_ID" changes="FILL_COLOR"/>
</style>
</rendering>
</rule>
</styling_rules>

<rendering>要素を使用する例が記載されている3.1.1.12項も参照してください。

<rendering>要素は、動的テーマ、ジオメトリ・テーマおよびトポロジ・テーマでも使用できます。

2.3.1.5 スケール範囲が指定された複数のレンダリング・スタイルの使用方法

<rendering>要素には、複数の<style>要素を定義できます(2.3.1.4項「1つのスタイリング・ルールへの複数のレンダリング・スタイルの適用」を参照)。また、<style>要素ごとにスケール範囲を割り当てることができます。スケール範囲を持つ複数の積上げスタイルを使用すると、異なるスケールの様々な表現を持つ単一のテーマを定義できます。

例2-8は、積上げスタイルを持つテーマのスタイリング・ルールを示しています。各スタイルには、スケール範囲が定義されています。

例2-8 積上げスタイルを持つテーマのスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule>
<features> </features>
<label column="STATE" style="T.S02_STATE_ABBREVS"> 1 </label>
<rendering>
<style name="C.COUNTIES" max_scale="5.0E7" scale_mode="RATIO"/>
<style name="C.RB13_1" min_scale="5.0E7" max_scale="1.0E7" scale_mode="RATIO"/>
<style name="L.DPH" min_scale="1.0E7" scale_mode="RATIO"/>
</rendering>
</rule>
</styling_rules>

2.3.1.6 事前定義済テーマのキャッシュ

デフォルトでは、事前定義済テーマの空間データが処理のためMapViewerレンダリング・エンジンによってデータベースからフェッチされると、MapViewerは自動的にこのデータをキャッシュします。逆に、動的(JDBC)テーマのデータはMapViewerではキャッシュされません。事前定義済テーマのデータをキャッシュしない場合(ベースとなる実表が常に更新されているテーマの場合など)は、そのテーマの<styling_rules>要素のcaching属性をNONEに設定できます。(caching属性を含む<styling_rules>要素については、A.7項を参照してください。)

ベース・データが静的または読取り専用で、使用頻度の高いテーマの場合、最良のパフォーマンスを得るためにcaching ALLを指定します。これにより、MapViewerでは、テーマ定義に最初にアクセスした際に、すべての地物(関連付けられた空間データ、属性データ、およびスタイリング情報を含む)をフェッチし、それらをMapViewerのメモリーにキャッシュして、テーマの空間データ用のメモリー内Rツリーを作成します。そのテーマを要求する後続のリクエストはすべて、データベースに送信されずに、ローカルで発生します。

caching属性値がNORMAL(デフォルト)の場合、そのテーマを必要とするマップがリクエストされるたびに、MapViewerは空間データと関連の属性データを取得するための問合せをデータベースに対して行います。ただし、行IDまたはユーザー指定のキー列により参照される空間ジオメトリ・データがすでにキャッシュされている場合は、非Pickle化処理(RAWデータベース・ジオメトリ形式からJavaジオメトリ・オブジェクトへの変換)はスキップされます。それでも、メモリーに問題がなく、使用頻度の高いテーマを完全にキャッシュできる場合、最初のロードの後にそのテーマへのデータベース・アクセスを事実上すべて排除するためには、caching ALLを指定する必要があります。

MapViewer空間データ・キャッシュはグローバルであるため、MapViewerがアクセスするすべての事前定義済テーマは、グローバルな固定サイズのメモリー・キャッシュを得るため競合します。キャッシュは完全にメモリー内にあり、キャッシュの最大サイズは、1.6.2.6項での説明のとおりに指定できます。キャッシュの上限に達すると、直前にアクセスされたデータ用に、キャッシュ・データが古い順にキャッシュから削除されます。ただし、caching ALLで指定したテーマのデータはキャッシュから削除されず、MapViewerがこれらのテーマをデータベースに再び問い合せることはありません。

事前定義済の注釈およびカスタム・ジオメトリ・テーマのキャッシュは現在のところ無効です。カスタム・ジオメトリ・テーマについては、プロバイダの実装にキャッシング・メカニズムを実装できます。ただし、各リクエストに対してプロバイダの新しいインスタンスが作成されますが、ローカルのキャッシング・メカニズムを実装した場合、そのインスタンスは失われます。

2.3.1.7 地物ラベルと国際化

MapViewerは、翻訳されたテーマ・ラベルをサポートしています。事前定義済のMapViewerテーマでは通常、それぞれのテーマの地物にラベルを付けるためのすべてのテキスト文字列を提供するラベル列を指定できます。これらのテキスト文字列は、特定の言語(英語など)でデータベースの表列に格納される文字列の値です。ただし、リソース・バンドルを使用して、これらの格納された文字列の値の異なる翻訳を提供することも可能です。このような翻訳済のテキスト文字列が使用可能な場合、特定の言語やロケールを使用してテーマの地物にラベルを付けるようMapViewerに指示できます。

注意:
リソース・バンドルは現在のところ、事前定義済のジオメトリ・テーマでのみサポートされています。

翻訳の提供、および特定のユーザー言語を使用してテーマにラベルを付けるようMapViewerに指示する手順は、以下のとおりです。

1. 翻訳を準備します。
一般的なMapViewerの事前定義済ジオメトリ・テーマは、基礎となるすべてのデータを表から取得します。(文字列タイプ)列のいずれかを、このテーマのラベリング列として指定できます。これをラベル列といいます。ラベル列を異なる言語に翻訳する必要がある場合、この表からすべての値を抽出して、StringResources.propertiesなどのプロパティ・ファイルに格納します。(ファイル名StringResources.propertiesは、抽出されたテキストがすべて英語であることを前提とする点に注意してください。英語でない場合、プロパティ・ファイル名は規則に従わねばならず、言語コードおよびオプションのリージョン・コードまたは国コードがファイル名の接頭辞になっている必要があります。たとえば、StringResources_fr.propertiesはフランス語の翻訳のみを含み、StringResources_zh_CN.propertiesは簡体字中国語です。)

プロパティ・ファイルは、非常に簡単な形式のプレーン・テキスト・ファイルです。たとえば、単純なStringResources.propertiesファイルに以下が含まれるとします。

# This is the English version of the strings.
California = California
Nevada = Nevada
Montana = Montana

最初の行はコメントで、#記号から始まります。後に続く各行には、1組のキー(1番目の文字列)と値(2番目の文字列)が含まれます。キーはラベル列から直接取得されますが、値は対応する翻訳になります。この特定のファイルにはデフォルトの英語のテキスト文字列が含まれるため、値(翻訳)はどの場合でも同じです。キーは常に英語でなければならない点に注意してください。

このデフォルトのプロパティ・ファイルから、翻訳の担当者がそれぞれの翻訳ごとに1ファイル、プロパティファイルのセットを作成します。前述の単純な例を使用した場合、簡体字中国語の翻訳済ファイル(StringResources_zh_CN.properties)は以下のようになります。各キーの値はそのキーの中国語の翻訳に置き換わり、Unicodeの文字列としてエンコードされます。

# This is the Chinese version of the strings.
California =  \u6CA1\u6709\u8981\u5448\u73B0\u7684\u4E3B\u9898\u3002
Nevada = \u65E0\u6CD5\u52A0\u8F7D\u4E3B\u9898\u3002
Montana = \u65E0\u6CD5\u52A0\u8F7D\u6837\u5F0F\u3002

デフォルトのプロパティ・ファイルStringResouces.propertiesと、同じファイル名(言語とリージョンの接頭辞を除く)を共有する言語固有のすべてファイル一式が、リソース・バンドルとなります。この場合は、リソース・バンドル名はStringResourcesです。リソース・バンドルには任意の名前を付けられますが、異なるバンドル(異なるキーのセットを含むもの)には常に別のベース名を使用してください。

Javaのリソース・バンドルおよびプロパティ・ファイルの詳細は、Java言語のドキュメントを参照してください。

2. 翻訳済テキスト文字列をJavaリソース・バンドルとして提供します。これは、Javaリソース・クラスまたは標準のプロパティ・クラスを基礎とすることができます。
すべてのラベル・テキスト文字列を翻訳した後は、すべてのファイル(リソース・バンドル)をMapViewerのCLASSPATHに配置する必要があります。こうすることで、MapViewerが実行時にこれらのファイルを見つけることができます。通常はMapViewerのWEB-INF/classesフォルダを使用できます。ベースのStringResources.propertiesおよび言語固有のファイル(StringResources_fr.propertiesやStringResources_zh_CN.propertiesなど)を含むすべてのファイルを、このフォルダにコピーしてください。

リソース・バンドルのすべてのファイルをWEB-INF/classesの下にあるサブフォルダに入れる場合、リソース・バンドル名(MapViewerで認識されているもの)の接頭辞に、このサブフォルダ名を付ける必要があります。これは、Javaクラスをパッケージ名に準じたディレクトリ構造に配置するときに似ています。たとえば、すべてのStringResources*.propertiesファイルをWEB-INF/classes/i18n/に入れる場合、後でリソース・バンドルをMapViewerに登録する際に、リソース・バンドルの実際の名前をi18n.StringResourcesとする必要があります。

3. リソース・バンドルをMapViewerに登録することにより、テーマ定義でリソース・バンドル名を指定します。
MapViewerが翻訳済クラスを見つけられるようにするには、テーマ定義にリソース・バンドルのフルネームを指定する必要があります。この最も簡単な方法はMap Builderユーティリティを使用して、テーマ・エディタの「拡張パラメータ」ペイン、でリソース・バンドル名を「翻訳クラス」として指定します。図2-6は、「翻訳クラス」にStringResourcesを指定する様子を示します。

図2-6 テーマへのリソース・バンドルの指定

1つ前のステップで説明したようにリソース・バンドルのファイルがサブフォルダにある場合、リソース・バンドル・ファイルがパッケージ内のJavaクラスであるかのように、リソース・バンドルのベース名をピリオドで区切ったものをサブフォルダ名にする必要があります。

4. マップまたはテーマをリクエストする際に言語パラメータを指定します。
Oracle Maps JavaScript API(6.2項を参照)またはXMLマップ・リクエストAPI(第3章を参照)の各マップ・リクエストに優先言語を指定します。

- JavaScriptコードで、MVThemeBasedFOIクラスのコールにラベル言語コードを指定します。次の例では、FOIテーマに簡体字中国語でラベルが表示されます。

themebasedfoi = new MVThemeBasedFOI('themebasedfoi1','mvdemo.theme_demo_states');
themebasedfoi.setLabelLanguageCode("zh-cn");
themebasedfoi.enableLabels(true);

setLabelLanguageCode(lang_code)メソッドを使用して、MapViewerが指定された言語のテキスト文字列を使用して地物にラベルが付けられるように、言語コードを指定できます。言語コードは2文字(zhなど)でなければならず、これにオプションでハイフン(-)と2文字の国コード(zh-cn)を付けることができます。言語コードはISO 639標準で定義されており、http://www.loc.gov/standards/iso639-2/php/English_list.phpなどいくつかのWebサイトに記載されています。指定された言語コードに翻訳済テキスト文字列が見つからない場合、英語のテキスト文字列(またはテーマのデフォルト文字列)がラベル付けに使用されます。

- XMLマップ・リクエストで、lang属性に言語を指定します。次の例では、簡体字中国語でラベルが表示されます。

<map_request title="Oracle LBS MAP"
basemap="demo_map"
datasource = "mvdemo"
width="640" height="480"
lang="zh-CN"
format="PNG_STREAM">

<center size="5.15">
<geoFeature> <geometricProperty typeName="center">
<Point> <coordinates>-122.2615, 37.5266</coordinates>
</Point> </geometricProperty>
</geoFeature>
</center>
</map_request>

ISO 639標準で指定された言語コードおよび国コードのみが、有効なlang値として使用できます。オプションの国コードを使用する場合、それをハイフン(-)で言語コードにつなげる必要があります。国コードと言語コードでは大/小文字が区別されません。

lang属性がXMLマップ・リクエストの一部として指定されている場合、結果のマップにレンダリングされるすべてのテーマに関連のリソース・バンドルがないかチェックされます。テーマに関連のリソース・バンドルがなかったり、あるいは指定された言語の翻訳済テキスト文字列が見つからない場合、デフォルト値(表列に格納されたもの)が使用されます。

lang属性がXMLマップ・リクエストの一部として指定されていない場合、MapViewer自体で有効となっているロケール(含まれているJVM)に関係なく、デフォルトのテキスト文字列の値(表列に格納されているもの)が常に使用されます。

2.3.2 JDBCテーマ

JDBCテーマは、mapリクエストによって動的に定義されるテーマです。JDBCテーマは、事前定義済テーマのように、データベースに永続的には格納されません。

JDBCテーマの場合、必須の空間データ(ジオメトリ、または画像、GeoRaster、ネットワーク、トポロジなどのその他のタイプのデータ)をすべて取得する有効なSQL問合せを指定する必要があります。テーマ・マッピングや空間データ分析など、属性データが必要な場合は、問合せでもそれを選択する必要があります。つまり、JDBCテーマに対する正しく完全な問合せを指定することが必要です。問合せの他に、そのテーマに使用するレンダリングおよびラベリングのスタイルも指定できます。

空間ジオメトリに基づいたJDBCテーマの場合、MapViewerでは次のルールに従い、問合せで指定された列を処理します。

- SDO_GEOMETRY型の列は、空間データ列として扱われます。

- 名前または別名がJDBCテーマのlabel_column属性で指定されたものと一致する列は、ラベリング列として扱われ、その値はラベルのテキストとして使用されます。

- その他の列は属性データ列として扱われ、MapViewerにより使用される場合も、使用されない場合もあります。たとえば、レンダリング・スタイルが拡張スタイルの場合、すべての属性列は問合せのSELECT構文リストに指定された順序で、そのスタイルによって処理されます。したがって、テーマ・マッピングを実行し、拡張スタイルを使用している場合は、ジオメトリ列とオプションのラベリング列の他に、テーマ・マッピングに必要なすべての属性列を指定する必要があります。(ラベリング列が属性列である場合もあり、その場合はSELECTリストでその列を指定する必要はありません。)

例2-9は、JDBCテーマが含まれるマップ・リクエストです。

例2-9 マップ・リクエストのJDBCテーマ

<?xml version="1.0" standalone="yes"?>
<map_request title="My MAP" datasource = "mvdemo">

<themes>
<theme name="jdbc_theme_1">
<jdbc_query
datasource="mvdemo"
jdbc_srid="41052"
spatial_column="geometry"
render_style="C.RED">
SELECT geometry from states where name='MA'
</jdbc_query>
</theme>
</themes>

</map_request>

例2-9でJDBCテーマについてMapViewerが実行する全問合せは、次のとおりです。

SELECT geometry FROM states WHERE name='MA';

このリクエストでは、MapViewerは、このJDBCテーマの問合せの実行結果として、選択されたジオメトリのみが含まれるマップを生成します。ただし、より一般的な場合では、マップ・リクエストで複数のJDBCテーマを使用してベース・マップの上に追加の動的データを表示する必要があります。さらに、マップ・リクエストには問合せウィンドウが関連付けられている場合があります。つまり、ユーザーはベース・マップ全体に含まれる領域の一部のみを参照できます。この場合、JDBCテーマのSQL問合せでは、不必要な結果を排除するために空間ウィンドウの問合せが行われます。

JDBCテーマの詳細は、3.1.2.9項の<jdbc_query>要素を参照してください。

2.3.2.1 2つの列に基づくポイントJDBCテーマの定義

データベース表で2つの列(経度と緯度など)を使用してポイントの座標を表す場合、その2つの列に基づきJDBCテーマを定義してポイントをレンダリングできます。表に空間ジオメトリ列を含める必要はありませんが、含めることは可能です。ただし、テーマ・リクエストでポイント列だけでなくジオメトリ列も定義する場合、MapViewerでは、ジオメトリ列ではなく2つの列を使用してポイントをレンダリングしようとします。

例2-10に示すJDBCテーマは、POIという表のLONG_LOCおよびLAT_LOCという2つの列からポイントをレンダリングします。x_column属性およびy_column属性には、ポイントの座標値を含む列を指定します。この例では、ポイントがC.REDスタイルを使用してレンダリングされ、表のNAME列の値がT.POI_NAMEスタイルを使用してレンダリングされます。

例2-10 列に基づくJDBCテーマ

<map_request>
. . .
<center>
. . .
</center>
<themes>
<theme name="theme1" >
<jdbc_query
datasource="mvdemo"
jdbc_srid="8265"
x_column="long_loc"
y_column="lat_loc"
render_style="C.RED"
label_column="name"
label_style="T.POI_NAME"
>SELECT long_loc, lat_loc,name FROM poi
</jdbc_query>
</theme>
</themes>
</map_request>

リクエストで有効な問合せウィンドウ(一部のみ)を指定する場合、リクエスト・ウィンドウのサイズに基づくWHERE式が自動的に問合せに追加されます。

表にジオメトリ列が含まれている場合、SQLコードを指定して、そのジオメトリ列をフィルタとして使用できます。例2-11は、例2-10と類似していますが、ここでは、SDO_FILTER演算子を使用して、GEOMETRYという列のジオメトリに基づいて問合せウィンドウを指定します。例2-11で、疑問符(?)は、問合せウィンドウの矩形の左下および右上の座標が実行時に提供された値(この例では表示されていない)から取得されることを示しています。

例2-11 列に基づくJDBCテーマ(問合せウィンドウ指定)

<map_request>
. . .
<center>
. . .
</center>
<themes>
<theme name="theme1" >
<jdbc_query
datasource="mvdemo"
jdbc_srid="8265"
x_column="long_loc"
y_column="lat_loc"
render_style="C.RED"
label_column="name"
label_style="T.POI_NAME"
>SELECT long_loc, lat_loc FROM poi WHERE
SDO_FILTER(geometry,MDSYS.SDO_GEOMETRY(2003, 8265, NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),
MDSYS.SDO_ORDINATE_ARRAY(?,?,?,?)),
'querytype=WINDOW') = 'TRUE'
</jdbc_query>
</theme>
</themes>
</map_request>

2.3.2.2 複雑なJDBCテーマのデータベースへの格納

場合によっては、JDBCテーマのSQL問合せは非常に複雑であり、問合せを保存する必要があります。この場合、事前定義済テーマを定義してから(この定義は、データベースのUSER_SDO_THEMESビューに格納されます)、そのテーマのスタイリング・ルールに<features>要素の内容としてSQL全問合せを含めることができます。

<features>要素で指定された地物スタイルは、全問合せを使用して取得されたジオメトリのレンダリングに使用されます。すでにSQL全問合せにFROM句が含まれているため、こうしたテーマに対して定義された実表は無視されます。それでもUSER_SDO_THEMESビューで定義されたジオメトリ列は必要であり、ユーザー指定のSQL問合せで選択されたジオメトリ列と同じである必要があります。スタイリング・ルールに<label>要素がある場合、ラベル・テキストが含まれる列が問合せで選択されているかぎり、指定されたラベル・スタイルがジオメトリのラベル付けに使用されます。

例2-12は、複雑なSQL問合せを含む、事前定義済テーマの<styling_rules>要素の例です。

例2-12 事前定義済テーマの複雑な問合せ

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule>
<features style="L.POOR_ROADS" asis="true">
select sdo_lrs.clip_geom_segment(geometry,start_measure,end_measure)
geometry
from (select /*+ no_merge use_hash(a b) */
a.street_id, name, start_measure, end_measure, geometry
from (select /*+ no_merge */ a.street_id, name, geometry
from philly_roads a
where sdo_filter(geometry,sdo_geometry(2002,41124,null,
sdo_elem_info_array(1,2,1),
sdo_ordinate_array(?,?,?,?)),
'querytype=window')='TRUE') a,
philly_road_conditions b
where condition='POOR' and a.street_id = b.street_id)
</features>
</rule>
</styling_rules>

例2-12が事前定義済テーマとして定義されている場合でも、ユーザーがこのテーマを含むマップをリクエストすると、実行時にはMapViewerによりJDBCテーマとして処理されます。MapViewerでは、通常のJDBCテーマと同様に、デフォルトでSQL問合せにウィンドウ・フィルタ処理(問合せウィンドウがマップ・リクエストに含まれる場合)が課せられます。このデフォルトの動作を無視して、指定した問合せ文字列が変更なしで実行されるようにするには、例2-12に示すように、<features>要素にasis="true"と指定します。(asis属性の詳細は、3.1.2.9項を参照してください。)

2.3.3 イメージ・テーマ

イメージ・テーマは、遠隔操作および航空写真術などによる、地理的参照画像(ラスター)データを視覚化するのに便利な、特殊なMapViewerテーマです。

イメージ・テーマは、動的に、あるいはデータベースで(事前定義済テーマとして)永続的に定義できます。イメージ・テーマは、マップ内でベクトル(非画像)・テーマとともに使用できます。図2-7は、イメージ・テーマ(ボストン市の一部の航空写真を示したもの)に、ボストン市内の様々な種類の道路を示すテーマを重ねたマップを示しています。

図2-7 イメージ・テーマおよびボストンの道路を示すその他のテーマ

イメージ・テーマを定義する前に、次のルールに従って画像データを編成する必要があります。

- 画像データを、データベース表内のBLOB列に元の形式(JPEGなど)で格納するか、元の画像ファイルを指すOracle Multimediaオブジェクト(ORDSYS.ORDImage)として格納します。ORDSYS.ORDImageオブジェクトの作成については、『Oracle Multimediaユーザーズ・ガイド』を参照してください。

- ジオメトリ(SDO_GEOMETRY)列を同じ表に追加し、各画像の最小外接矩形(MBR)をその列に格納します。
MBR列の各ジオメトリには、ピクセル領域で表したサイズではなく、画像の地理的範囲を含めます。たとえば、正射写真画像のサイズが2000×2000ピクセルでも、(936000, 248000)の角を始点とした、幅と高さが8000mの土地矩形をその範囲とする場合、ジオメトリ列のMBRには(936000, 248000, 944000, 256000)と移入する必要があります。

- ジオメトリ列のエントリをUSER_SDO_GEOM_METADATAビューに挿入します。

- ジオメトリ列に対して空間索引を作成します。

イメージ・テーマを事前定義するには、2.3.3.1項のガイドラインに従います。マップ・リクエストで動的なイメージ・テーマを定義するには、2.3.2項および3.1.2.9項で説明しているJDBCテーマの定義に関するガイドラインに従いますが、動的なイメージ・テーマに関する次の考慮事項にも注意してください。

- イメージ・テーマを定義する場合、元の画像解像度情報を指定する必要があります。

- デフォルトでは、イメージ・テーマを使用したマップを生成する場合、現在の問合せウィンドウに適合するようにMapViewerによって画像データが自動的にスケール変更されます。この自動スケール変更を無効にするには、マップ・リクエストでimagescaling="false"と指定します。

イメージ・テーマの定義について、MapViewerでサポートされている画像形式は、GIF、JPEG、PNGおよびTIFFのみです。MapViewerで他の画像形式のデータを視覚化するには、Javaのoracle.sdovis.CustomImageRendererインタフェースを使用してカスタム・イメージ・レンダラを実装した後、実装クラスをmapViewerConfig.xmlファイルに登録し、特殊な形式の画像データに使用するカスタム・イメージ・レンダラをMapViewerに通知する必要があります。カスタム・イメージ・レンダラの実装および登録の詳細は、付録Cを参照してください。

イメージ・テーマを指定したマップ・リクエストの例と、MapViewerによるリクエストの処理方法の説明は、3.1.1.6項の例3-6を参照してください。

2.3.3.1 事前定義済イメージ・テーマの作成

事前定義済イメージ・テーマを作成するには、USER_SDO_THEMESビュー(2.9.2項を参照)に行を挿入することにより、イメージ・テーマの定義をデータベースに格納する必要があります。例2-13では、イメージ・テーマの定義を格納します。

例2-13 事前定義済イメージ・テーマの作成

INSERT INTO user_sdo_themes  VALUES (
'IMAGE_LEVEL_2',
'Orthophotos at pyramid level 2',
'IMAGES',
'IMAGE_MBR',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="image" image_column="image"
image_format="JPEG" image_resolution="2"
image_unit="M">
<rule >
<features style="C.RED"> plevel=2 </features>
</rule>
</styling_rules>' );

例2-13では、IMAGE_LEVEL_2という名前のイメージ・テーマを作成しています。実表(すべての画像データおよび関連するMBRが格納される表)の名前はIMAGESで、画像の最小外接矩形(MBR)はIMAGE_MBRという列に格納されます。USER_SDO_THEMESビューのSTYLING_RULES列には、1つの<styling_rules>要素を含むXML文書が挿入されます。

イメージ・テーマの<styling_rules>要素には、次の属性があります。

- theme_type: このテーマがイメージ・テーマとして認識されるようにimageにする必要があります。

- image_column: 実際の画像データが格納される実表またはビューの列を指定します。

- image_format: 画像データの形式を示す文字列。GIFまたはJPEGと指定した場合、MapViewerでは常に画像データをレンダリングできます。他の値(ECWなど)を指定した場合は、画像を正しくレンダリングするために、カスタム・イメージ・レンダラを実装してMapViewerに登録している必要があります。カスタム・イメージ・レンダラの実装の詳細は、付録Cを参照してください。

- image_resolutionは、元の画像解像度(ピクセル当たりのimage_unit単位の数)を指定するオプション属性です。

- image_unitはオプション属性です。ただし、image_resolution属性を指定した場合は必須です。image_unit属性は、メートルに対するMのように、解像度の単位を指定します。この属性の値は、MDSYS.SDO_DIST_UNITS表のSDO_UNIT列に含まれている値のいずれかである必要があります。例2-13では、画像の解像度はピクセル当たり2mです。

<styling_rules>要素のDTDについては、A.7項を参照してください。

2.3.4 GeoRasterテーマ

GeoRasterテーマは、GeoRasterオブジェクトを視覚化するのに便利な、特殊なMapViewerテーマです。GeoRasterはOracle Spatial and Graphの機能で、ラスター画像およびグリッド・データとその関連メタデータの格納、索引付け、問合せ、分析および配信を行います。GeoRasterオブジェクトは、SDO_GEORASTERデータ型を使用して定義します。GeoRasterの詳細は、Oracle Spatial and Graph GeoRaster開発者ガイドを参照してください。

MapViewerでGeoRasterテーマを使用する前に、Java Advanced Imaging (JAI)ライブラリ・ファイル(jai_core.jarおよびjai_codec.jar)がMapViewerライブラリ・パスにあることを確認します(1.4項を参照)。GeoRasterデータで次のアクションを実行する必要もあります。

1. GeoRasterデータのセル座標と現実の地上座標(またはその他のローカル座標)を関連付けるために、GeoRasterデータを地理参照します。
Oracle Database 10gリリース1(10.1)を使用している場合は、空間解像度の値も設定する必要があります。

2. ラスター・データと関連付けられた空間エクステント(フットプリント)を生成または定義します。

3. オプションで、ラスター画像またはデータを異なるサイズと異なる解像度で表す、ピラミッド・レベルを生成します。

4. USER_SDO_GEOM_METADATAビューに、GeoRaster表の名前とGeoRaster列(つまり、SDO_GEORASTER型の列)のSPATIALEXTENT属性を指定する行を挿入します。次の例では、GEOR_COLUMNというGeoRaster列のあるGEOR_TABLEという表を指定する行を挿入しています。

INSERT INTO USER_SDO_GEOM_METADATA VALUES
( 'geor_table',
'geor_column.spatialextent',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('X', 496602.844, 695562.844, 0.000005),
SDO_DIM_ELEMENT('Y',8788409.499,8973749.499, 0.000005)
),
82279   -- SRID
);

5. GeoRaster表の空間エクステントに空間索引を作成します。次の例では、GEOR_TABLEという表の空間エクステントにGEOR_IDXという空間索引を作成しています。

CREATE INDEX geor_idx ON geor_table(geor_column.spatialextent)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

2.3.4.1項の例2-17では、使用するGeoRasterデータを準備し、GeoRasterテーマをデータベースに格納します。

MapViewerでは、GeoRaster表のオブジェクトに関する2種類のマップ・リクエストをサポートします。

- 1つ以上のGeoRasterオブジェクトを選択するためのSQL文を含むリクエスト

- ラスター・データ表名とSDO_GEORASTERオブジェクト内のrasterID属性値との組合せにより1つのGeoRasterオブジェクトを指定するリクエスト(SDO_GEORASTERオブジェクト内のrasterID属性値は、GeoRaster表のどの主キー列またはID列とも異なり、関係ありません。)

次の要素と属性は、GeoRasterテーマの定義に適用されます。

- <jdbc_georaster_query>要素: 動的に定義されるGeoRasterテーマであることを指定します。1つ以上のGeoRasterオブジェクトを選択するためにSQL文を使用するテーマの場合、この要素にはSQL問合せ文(終了セミコロンなし)が含まれます。この要素の完全なDTDは、3.1.2項のマップ・リクエストDTDに含まれています。

- georaster_table属性: GeoRaster表の名前を指定します。

- georaster_column属性: GeoRaster表内のSDO_GEORASTER型列の名前を指定します。

- polygon_mask属性(オプション): GeoRaster画像のポリゴン・マスクの外側の部分を透明にするマスクとして使用されるポリゴンを表す2次元の座標のセットを指定します。座標は、x1、y1、x2、y2、...のように定義します。データ座標領域にマスク座標が格納されている必要があります。

- raster_bands属性(オプション): 赤、緑および青のチャネルに割り当てられるバンド構成を指定します。1つの値のみを指定すると、その結果表示される画像では1バンド(単色画像のグレー・レベル)が使用されます。2つの値を指定すると、それらは赤と緑のチャネルに使用され、GeoRasterメタデータに格納されているデフォルトの青のバンドが青のチャネルに使用されます。この属性を指定しない場合、MapViewerではGeoRasterメタデータに格納されているデフォルト値が使用されます。

- raster_pyramid属性(オプション): ピラミッド・レベル(解像度のレベル)を指定します。この属性を指定しない場合、MapViewerでは、現行ウィンドウの問合せおよびデバイス領域に最適なピラミッド・レベルが計算されます。

- raster_id属性(定義にSQL文が含まれていない場合のみ): マップ・リクエスト用に、1つのGeoRasterオブジェクトのSDO_GEORASTERオブジェクト定義内のrasterID属性値を指定します。

- raster_table属性(オプション、定義にSQL文が含まれていない場合のみ): マップ・リクエスト用に、1つのGeoRasterオブジェクトに関連付けられたラスター・データ表を指定します。

- transparent_nodata属性(オプション): いずれかのGeoRaster NODATA値を透明としてレンダリングするかどうかを指定します。デフォルト値はfalseです。

例2-14では、1つのGeoRasterオブジェクトを選択するSQL文を含むGeoRasterテーマを定義しています。テーマでは、バンド1を赤チャネル、バンド2を緑チャネル、バンド3を青チャネルに割り当てます。raster_pyramid属性は指定されていないため、地理参照処理の間または後に設定される空間解像度の値を使用して、MapViewerが最適なピラミッド・レベルを計算します。(例2-14で、WHERE句のgeorid=1は、PCI_IMAGEという名前のGeoRaster表にあるGEORIDという列を参照しています。)

例2-14 SQL文を含むGeoRasterテーマ

<theme name="georaster_theme">
<jdbc_georaster_query
georaster_table="pci_image"
georaster_column="georaster"
raster_bands="1,2,3"
jdbc_srid="82301"
datasource="mvdemo"
asis="false"> SELECT georaster FROM pci_image WHERE georid =1
</jdbc_georaster_query>
</theme>

例2-15では、SDO_GEORASTERオブジェクトのrasterID属性値が1 (raster_id="1")である単一のGeoRasterオブジェクトを指定し、RDT_PCIというラスター・データ表に関連付けられているGeoRasterテーマを定義しています。このテーマでは、ピラミッド・レベルを2としています。

例2-15 ラスターIDおよびラスター・データ表を指定するGeoRasterテーマ

<theme name="georaster_theme">
<jdbc_georaster_query
georaster_table="pci_image"
georaster_column="georaster"
raster_id="1"
raster_table="rdt_pci"
raster_pyramid="2"
raster_bands="1,2,3"
jdbc_srid="82301"
datasource="mvdemo"
asis="false">
</jdbc_georaster_query>
</theme>

サブトピック:

- 事前定義済GeoRasterテーマの作成

- GeoRasterテーマでのビットマップ・マスクの使用

- GeoRasterテーマの再投影

- 仮想モザイク・テーマ

2.3.4.1 事前定義済GeoRasterテーマの作成

事前定義済GeoRasterテーマを作成するには、USER_SDO_THEMESビュー(2.9.2項を参照)に行を挿入することにより、GeoRasterテーマの定義をデータベースに格納する必要があります。例2-16では、GeoRasterテーマの定義を格納します。

例2-16 事前定義済GeoRasterテーマの作成

INSERT INTO user_sdo_themes  VALUES (
'GEOR_BANDS_012',
'Band 0 for red, 1 for green, 2 for blue',
'GEOR_TABLE',
'GEOR_COLUMN',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="georaster" raster_table="RDT_PCI"
raster_id="1" raster_bands="0,1,2">
</styling_rules>' );

例2-16では、GEOR_BANDS_012というGeoRasterテーマを作成しています。この例では、バンド0が赤チャネル、バンド1が緑チャネル、バンド2が青チャネルに割り当てられています。GeoRaster表の名前(この例ではGEOR_TABLE)はUSER_SDO_THEMESビューのBASE_TABLE列に、GeoRaster列の名前(この例ではGEOR_COLUMN)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

GeoRasterテーマの<styling_rules>要素では、このテーマがGeoRasterテーマとして認識されるように、theme_typeをgeorasterとする必要があります。

GeoRasterテーマの<styling_rules>要素では、例2-16で示したように、2.3.4項で解説したraster_bands、raster_pyramid、raster_id、raster_tableなどの属性を指定できます。また、GeoRasterテーマの<styling_rules>要素をルール定義にすることもできます。たとえば、WHERE句の条件georid=1を満たすGeoRasterオブジェクトをGeoRaster表から選択するGeoRasterテーマを作成するには、例2-16の<styling_rules>要素を次のように置き換えます。

<styling_rules theme_type="georaster">
<rule>
<features> georid=1
</features>
</rule>
</styling_rules>

GeoRasterテーマの<styling_rules>要素では、2.3.4.2項で説明するビットマップ・マスクを1つ以上指定することもできます。

<styling_rules>要素のDTDについては、A.7項を参照してください。

例2-17では、データベースに格納されているGeoRasterテーマで使用するGeoRasterデータを準備します。コード例のコメントは、主要な手順を簡単に説明しています。GeoRasterデータの要件および使用手順の詳細は、Oracle Spatial and Graph GeoRaster開発者ガイドを参照してください。

例2-17 GeoRasterテーマで使用するGeoRasterデータの準備

connect scott
Enter password: password

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 100
SET PAGESIZE 10000
SET SERVEROUTPUT ON SIZE 5000
SET LONG 20000
SET TIMING ON
call dbms_java.set_output(5000);

-------------------------------------------------------------------
-- Create a GeoRaster table (a table that has a
-- column of SDO_GEORASTER object type).
-------------------------------------------------------------------

create table georaster_table
(georid     number primary key,
type       varchar2(32),
georaster  sdo_georaster);

-------------------------------------------------------------------
-- Create the GeoRaster DML trigger on the GeoRaster table, if
-- the Oracle Database release is before 11.1. (In Release 11.1 and later
-- this trigger is created automatically, so you do not need to create
-- it manually.)
-------------------------------------------------------------------

call sdo_geor_utl.createDMLTrigger('georaster_table', 'georaster');

-------------------------------------------------------------------
-- Create a raster data table (RDT).
--
-- It is used to store cell data of GeoRaster objects.
-- This step is not a requirement. If the RDT table does not
-- exist, the GeoRaster procedures or functions will generate it
-- automatically whenever needed.
-- However, for huge GeoRaster objects, some tuning and setup on those
-- tables can improve the scalability and performance significantly.
-- In those cases, it is better for users to create the RDTs.
-- The primary key must be added to the RDT if you create it.
-------------------------------------------------------------------

create table rdt_geor of sdo_raster
(primary key (rasterId, pyramidLevel, bandBlockNumber,
rowBlockNumber, columnBlockNumber))
lob(rasterblock) store as (nocache nologging);

commit;

----------------
-- Import the image.
----------------

connect system;
Enter password: password

call dbms_java.grant_permission('MDSYS','SYS:java.io.FilePermission',
'lbs/demo/images/l7_ms.tif', 'read' );

call dbms_java.grant_permission('SCOTT','SYS:java.io.FilePermission',
'lbs/demo/images/l7_ms.tif', 'read' );

connect scott;
Enter password: password

declare
geor SDO_GEORASTER;
begin
delete from georaster_table where georid = 1;
insert into georaster_table
values( 1, 'TIFF', sdo_geor.init('rdt_geor', 1) );
select georaster into geor
from georaster_table where georid = 1 for update;
sdo_geor.importFrom(geor, '', 'TIFF', 'file',
'lbs/demo/images/l7_ms.tif');
update georaster_table set georaster = geor where georid = 1;
commit;
end;/

connect system;
Enter password: password

call dbms_java.revoke_permission('MDSYS','SYS:java.io.FilePermission',
'lbs/demo/images/l7_ms.tif', 'read' );

call dbms_java.revoke_permission('SCOTT','SYS:java.io.FilePermission',
'lbs/demo/images/l7_ms.tif', 'read' );

connect scott;
Enter password: password

--------------------------
-- Change the GeoRaster format, if needed.
-- To do this, you can call SDO_GEOR.changeFormatCopy.
-- The following operations for pyramiding, spatial resolution setup, and
-- spatial extent generation can also be combined into one PLSQL block.
--------------------------

declare
gr1 sdo_georaster;
begin
--
-- Using changeFormat with a GeoRaster object:
--

-- 1. Select the source GeoRaster object.
select georaster into gr1
from georaster_table where georid = 1;

-- 2. Make changes. (Interleaving is application-dependent. For TIFF images,
--    the default interleaving is BSQ.)
sdo_geor.changeFormat(gr1, 'blocksize=(512,512,3) interleaving=BIP');

-- 3. Update the GeoRaster object in the GeoRaster table.
update georaster_table set georaster = gr1 where georid = 1;

commit;
end;/

---------------------------
-- Generate pyramid levels (strongly recommended, but optional).
---------------------------

declare
gr sdo_georaster;
begin

-- 1. Select the source GeoRaster object.
select georaster into gr
from georaster_table where georid = 1 for update;

-- 2. Generate pyramids.
sdo_geor.generatePyramid(gr, 'resampling=NN');

-- 3. Update the original GeoRaster object.
update georaster_table set georaster = gr where georid = 1;

commit;
end;/

-----------------------------
-- Georeference the GeoRaster object.
-----------------------------

DECLARE
gr sdo_georaster;
BEGIN
SELECT georaster INTO gr FROM georaster_table WHERE georid = 1 FOR UPDATE;
sdo_geor.georeference(gr, 82216, 1,
sdo_number_array(30, 0, 410000.000000),
sdo_number_array(0, -30,3759000.000000));
UPDATE georaster_table SET georaster = gr WHERE georid = 1;
COMMIT;
END;/

-----------------------------
-- Set the spatial resolutions (required for 10gR1 only)
-----------------------------
-- If you are using Oracle Database Release 10.1, set spatial resolutions. (Not
-- required if you are using Release 10.2.) The spatial resolution values of
-- (30, 30) are from the ESRI world file or from the georeferencing information;
-- however, you may have to compute these values if they are not part of
-- the original georeferencing metadata.
DECLARE
gr sdo_georaster;
BEGIN
SELECT georaster INTO gr FROM georaster_table WHERE georid = 1 FOR UPDATE;
sdo_geor.setSpatialResolutions(gr, sdo_number_array(30, 30));
UPDATE georaster_table SET georaster = gr WHERE georid = 1;
COMMIT;
END;
/

------------------------
-- Update the spatial extent.
------------------------

DECLARE
sptext sdo_geometry;
BEGIN
SELECT sdo_geor.generateSpatialExtent(a.georaster) INTO sptext
FROM georaster_table a WHERE a.georid=1 FOR UPDATE;
UPDATE georaster_table a SET a.georaster.spatialextent = sptext WHERE a.georid=1;
COMMIT;
END;/

commit;

------------------------------------------------------------------
-- Create metadata information for the GeoRaster spatial extent column.
------------------------------------------------------------------

INSERT INTO USER_SDO_GEOM_METADATA
VALUES (
'GEORASTER_TABLE',
'georaster.spatialextent',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('X', 410000.0, 470000.0, 0.000005),
SDO_DIM_ELEMENT('Y', 3699000.0,3759000., 0.000005)
),
82216   -- SRID
);

------------------------
-- Create a spatial index on the spatial extent.
------------------------

CREATE INDEX georaster_idx ON georaster_table(georaster.spatialextent)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

--------------------------------------------------------
-- Create a predefined GeoRaster theme for MapViewer.
--------------------------------------------------------

INSERT INTO user_sdo_themes  VALUES (
'GEORASTER_TABLE',
'GeoTiff image',
'GEORASTER_TABLE',
'GEORASTER',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="georaster" raster_table="RDT_GEOR"
raster_id="1" raster_bands="0,1,2">
</styling_rules>' );

commit;

2.3.4.2 GeoRasterテーマでのビットマップ・マスクの使用

Oracle Spatial and Graph GeoRasterでは、ビットマップ・マスクを、データベースに格納されているGeoRaster層に割り当てることができます。ビットマップ・マスクは深度が1ビットの特別な矩形ラスター・グリッドで、各ピクセルの値は0または1のいずれかです。これは、別のイメージ内にある変則的な形をした領域を定義するために使用します。1ビットは領域の内部を定義し、0ビットは領域の外部を定義します。ビットマップ・マスクの詳細は、Oracle Spatial and Graph GeoRaster開発者ガイドを参照してください。

GeoRasterテーマでビットマップ・マスクを指定するには、例2-18に示すように、事前定義済テーマの<styling_rules>要素の<bitmap_masks>要素を使用します。

例2-18 事前定義済GeoRasterテーマのビットマップ・マスク

<styling_rules theme_type="georaster" raster_id="1"
raster_table="RDT_MASS_COLOR_MOSAIC">
<bitmap_masks>
<mask layers="1,2" zeromapping="0" onemapping="255"/>
</bitmap_masks>
</styling_rules>

<bitmap_masks>要素には1つ以上の<mask>要素が含まれ、それぞれで特定のGeoRasterオブジェクトのマスク定義が指定されます。例2-18では、RDT_MASS_COLOR_MOSAIC表に格納されているラスターIDが1のGeoRasterオブジェクトの層1および2に対して、マスクが定義されています。<mask>要素には次の属性があります。

- raster_idでは、GeoRasterオブジェクトのラスターIDの値を指定します。

- raster_tableでは、ラスター・データ表(RDT)を指定します。

- layersでは、マスクに使用するGeoRasterオブジェクトの層番号を指定します。

- zeromappingでは、ビットマップ・ピクセルで値0(ゼロ)を使用してレンダリングするときに適用される透明度の値を指定します。属性値は、0(完全な透明)から255(完全な不透明)までの範囲で指定できます。

- onemappingでは、ビットマップ・ピクセルで値1を使用してレンダリングするときに適用される透明度の値を指定します。属性値は、0(完全な透明)から255(完全な不透明)までの範囲で指定できます。

2.3.4.3 GeoRasterテーマの再投影

リリース11.2.0.1のOracle Spatial and Graph GeoRasterから、GeoRasterオブジェクトを別のSRIDに再投影できるようになりました。オブジェクトがMapViewerにレンダリングされるときに、再投影された隣接するGeoRasterオブジェクトの境界線が黒くならないように、Oracle Databaseパッチ10259201を適用することをお薦めします。詳細は、My Oracle SupportのドキュメントID 1272931.1にあるWmsでGeorasterデータを再投影した後のOracle Mapviewerでの黒い線についての説明を参照してください。

MapViewerでは、GeoRasterテーマのSRIDがマップ・リクエストSRIDと異なると、そのGeoRasterテーマは再投影されます。再投影はレンダリングのみを目的に行われ、元のGeoRasterオブジェクトが変更されることはありません。再投影をサポートしていない以前のデータベースの場合、GeoRasterオブジェクトは再投影されません。

使用可能な再投影モードは、BILINEAR(デフォルトとして使用)、NN、CUBIC、AVERAGE4、AVERAGE16です。再投影の詳細は、Oracle Spatial and Graph GeoRaster開発者ガイドを参照してください。

GeoRasterテーマで再投影モードを指定するには、例2-19に示すように、事前定義済テーマの<styling_rules>要素のreproj_modeキーワードを使用します。

例2-19 事前定義済GeoRasterテーマにおける再投影モード

<styling_rules theme_type="georaster" reproj_mode="CUBIC">
</styling_rules>

2.3.4.4 仮想モザイク・テーマ

Oracle Spatial and GraphのGeoRasterでは、仮想モザイクは、1つのGeoRasterオブジェクトであるかのように扱われる1つ以上のGeoRaster表またはビューに基づく、幾何補正の有無を問わない地理参照されたGeoRasterオブジェクトの大規模コレクションとして定義されます。

仮想モザイクは、様々な方法で定義できます。たとえば、1つまたは複数のGeoRaster表(またはGeoRaster列を含むビュー)を使用したり、GeoRasterオブジェクトのコレクションが得られる完全なSQL問合せ文を使用したりできます。

MapViewerは、次のタイプの事前定義済GeoRaster仮想モザイク・テーマの作成をサポートしています。

- GeoRaster列があり、問合せ条件を含んでいる可能性のある表に基づいたテーマ。GeoRaster列がある表のリストも定義できます。次のXML定義では、表LANDSAT5_IMAGESとGeoRaster列IMAGEに基づいて仮想モザイク・テーマを定義しています。

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="georaster" virtual_mosaic="true">
<virtual_mosaic srid="32617" nodata_cell="true">
<tables>
<table name="LANDSAT5_IMAGES" georaster_column="IMAGE"/>
</tables>
</virtual_mosaic>
</styling_rules>

- 完全なSQL問合せに基づいたテーマ。次のXML定義では、SQL問合せに基づいた仮想モザイク・テーマを指定しています。

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="georaster" virtual_mosaic="true">
<virtual_mosaic srid="32617" nodata_cell="true">
<sql>select image from landsat5_images</sql>
</virtual_mosaic>
</styling_rules>

仮想モザイク・テーマには、次のパラメータを定義できます。

srid: 空間参照システム(座標系)の値。

nodata_cell: 重複する領域の処理時に、NODATA (NODATA値またはNODATAビットマップ・マスク)を考慮するかどうかを指定します。TRUEでは、NODATA値を含むセルがNODATAセルとみなされ、セル値は重複する領域の計算に含まれませんが、FALSEでは、NODATA値を含むセルが通常のセルとみなされ、セル値は重複する領域の計算に含まれます。デフォルト値はFALSEです。この値がTRUEで、リサンプリング・メソッドがBILINEAR、BIQUADRATIC、CUBIC、AVERAGE4またはAVERAGE16の場合、リサンプリングの計算に含まれるセル値がNODATA値であると、リサンプリングの結果も常にNODATA値になります。複数のNODATA値または値の範囲が存在する場合、結果のNODATA値は、現行のラスター・レイヤーに関連付けられているNODATA値の最小値になります。

common_point_rule: 重複している領域のセル値を取得する方法。次のいずれかの値を指定できます。

- OLDEST: メタデータに最も古いEndDataTimeが含まれるGeoRasterオブジェクトの値が使用されます。

- END: 最後に出現したGeoRasterオブジェクトの値が使用されます。

- LATEST: メタデータに最も新しいEndDataTimeが含まれるGeoRasterオブジェクトの値が使用されます。

- OLDEST: メタデータに最も古いEndDataTimeが含まれるGeoRasterオブジェクトの値が使用されます。

- CTC: 出力ウィンドウの中心に最も近いGeoRasterオブジェクトの値が使用されます。

- HIGH: すべての重複するGeoRasterオブジェクトの最大セル値が使用されます。

- LOW: すべての重複するGeoRasterオブジェクトの最小セル値が使用されます

- AVERAGE: 重複するGeoRasterオブジェクトのすべてのセル値の平均が使用されます。

- HISHRES: 空間解像度が最も高いGeoRasterオブジェクトの値が使用されます。

resampling_mode: モザイク操作中に使用するリサンプリング・メソッドを指定します(リサンプリングが含まれるか、幾何補正が必要な場合)。NN、BILINEAR、BIQUADRATIC、CUBIC、AVERAGE4またはAVERAGE16のいずれかの値を指定できます。

resampling_tolerance: ソースGeoRasterオブジェクトを完全に揃えられない場合にリサンプリングを実行しない許容差を指定します。値は、0から0.5の間にする必要があり、単位はピクセルまたはセルです(たとえば、0.5は半分のピクセルまたはセルを意味します)。指定しない場合、0.5が使用され、リサンプリングは発生しません。

color_balance: カラー・バランスの方法を指定します。次のいずれかの値を指定できます。NONE、LINEARSTRETCHING、NORMALIZATION。

min_stretch_value: color_balanceがLINEARSTRETCHINGでない場合は無視されますが、それ以外の場合は線形ストレッチ・メソッドの範囲で最も小さい値を指定します。デフォルトは、0です。

max_stretch_value: color_balanceがLINEARSTRETCHINGでない場合は無視されますが、それ以外の場合は線形ストレッチ・メソッドの範囲で最も大きい値を指定します。デフォルトは、255です。

mean: color_balanceがNORMALIZATIONでない場合は無視されますが、それ以外の場合は正規化メソッドの参照平均値を指定します。

standard_deviation: color_balanceがNORMALIZATIONでない場合は無視されますが、それ以外の場合は正規化メソッドの参照標準偏差値を指定します。

2.3.5 ネットワーク・テーマ

ネットワーク・テーマは、Oracle Spatial and Graphネットワーク・データ・モデルを使用して定義されるネットワークを視覚化するのに便利な、特殊なMapViewerテーマです。ネットワークは一連のノードおよびリンクで構成されています。通常、リンクやパスには方向がありますが、ネットワークは有向にも無向にもできます。また、ネットワークは、ネットワーク階層と呼ばれる様々な抽象レベルに編成可能です。MapViewerは、ネットワーク内のネットワーク空間表が同じ座標系を使用し、これらの表がOracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドの説明に従って索引付けおよび登録されていることを想定しています。

ネットワークのノード、リンクおよびパス表には、SDO_GEOMETRY型のジオメトリが格納されます。これらのジオメトリを使用するJDBCテーマを作成できます。さらに、有向ネットワークのリンクの方向など、ネットワークの様々な面を考慮した動的テーマを定義できます。

次の要素と属性は、ネットワーク・テーマの定義に適用されます。

- <jdbc_network_query>要素: 動的に定義されるネットワーク・テーマであることを指定します。この要素の完全なDTDは、3.1.2項のマップ・リクエストDTDに含まれています。

- network_name属性: ネットワークの名前を指定します。

- network_level属性(オプション): このテーマを適用するネットワーク階層レベルを指定します。(非階層ネットワークの場合、1を指定します。これがデフォルト値です。)

- link_style属性(オプション): リンクに使用されるスタイル名を指定します。

- direction_style属性(オプション): リンクの方向マーカー(方向を示す矢印の画像など)に使用されるスタイル名を指定します。

- bidirection_style属性(オプション): 双方向リンクに使用されるスタイル名を指定します。

- direction_position属性(オプション): リンクの始点を基準とした方向マーカーの位置を、0から1の数値で指定します。たとえば、0.85は、リンクの始点と終点の間隔の85パーセントの位置を示します。

- direction_markersize属性(オプション): 方向マーカーのサイズ(ピクセル数)を指定します。

- direction_multimarker属性(オプション): リンク上で方向マーカーを繰り返すかどうかを指定します。trueの場合、方向マーカーは指定した開始位置に配置された後、所定の距離ごとに配置されます。false(デフォルト値)の場合、方向マーカーは繰り返されません。

- link_labelstyle属性(オプション): link_labelcolumn属性で指定した列内のリンク・ラベルに使用されるスタイル名を指定します。

- link_labelcolumn属性(オプション): link_labelstyle属性で指定されたスタイルを使用してレンダリングされるリンク・ラベルを含む列名を指定します。

- node_style属性(オプション): ノードに使用されるスタイル名を指定します。

- node_markersize属性(オプション): ノード・マーカーのサイズ(ピクセル数)を指定します。

- node_labelstyle属性(オプション): node_labelcolumn属性で指定した列内のノード・ラベルに使用されるスタイル名を指定します。

- node_labelcolumn属性(オプション): node_labelstyle属性で指定されたスタイルを使用してレンダリングされるノード・ラベルを含む列名を指定します。

- path_ids属性(オプション): レンダリングされる格納済パスのパスID値を1つ以上指定します。パスが複数の場合は、カンマでパスID値を区切ります。たとえば、path_ids="1,3,4"は、パスID値が1、3および4のパスがレンダリングされることを指定します。

- path_styles属性(オプション): path_ids属性で指定したパスに関連付けられた1つ以上のスタイル名を指定します。たとえば、path_styles="C.RED,C.GREEN,C.BLUE"は、path_ids属性で指定した1番目、2番目および3番目のパスをそれぞれレンダリングするために使用されるスタイルを指定します。

- path_labelstyle属性(オプション): path_labelcolumn属性で指定した列内のパス・ラベルに使用されるスタイル名を指定します。

- path_labelcolumn属性(オプション): path_labelstyle属性で指定されたスタイルを使用してレンダリングされるパス・ラベルを含む列名を指定します。

ネットワーク分析に関連するその他のネットワーク・テーマ属性については、2.3.5.2項を参照してください。

ネットワーク・テーマは、リンク、ノードおよびパスの属性、またはこれらの組合せを併用できます。そのような場合、MapViewerでは、リンク、パス、ノードの順にレンダリングします。

例2-20では、NYC_NETというネットワークのリンクおよびノードを表示する際の属性を指定するネットワーク・テーマを定義しています。

例2-20 ネットワーク・テーマ

<theme name="net_theme" user_clickable="false">
<jdbc_network_query
network_name="NYC_NET"
network_level="1"
jdbc_srid="8307"
datasource="mvdemo"
link_style="C.RED"
direction_style="M.IMAGE105_BW"
direction_position="0.85"
direction_markersize="8"
node_style="M.STAR"
node_markersize="5"
asis="false">
</jdbc_network_query>
</theme>

2.3.5.1 事前定義済ネットワーク・テーマの作成

事前定義済ネットワーク・テーマを作成するには、USER_SDO_THEMESビュー(2.9.2項を参照)に行を挿入することにより、ネットワーク・テーマの定義をデータベースに格納する必要があります。例2-21では、ネットワーク・テーマの定義を格納します。

例2-21 事前定義済ネットワーク・テーマの作成

INSERT INTO user_sdo_themes  VALUES (
'NYC_NET_1',
'New York City network',
'NYC_NET_LINK_TABLE',
'GEOMETRY',
'<?xml version="1.0" standalone="yes"?>
<styling_rules
theme_type="network"
network_name="NYC_NET"
network_level="1">
<rule>
<features>
<link
style="C.RED"
direction_style="M.IMAGE105_BW"
direction_position="0.85"
direction_markersize="8">
</link>
<path
ids="1,3"
styles="C.BLUE,C.GREEN">
</path>
<node
style="M.CIRCLE"
markersize="5">
</node>
</features>
<label>
<link column="LINK_ID" style="T.STREET NAME"> 1 </link>
</label>
</rule>
</styling_rules>' );

例2-21では、NYC_NETという名前のネットワークのレベル1に対して、NYC_NET_1というネットワーク・テーマを作成しています。ネットワーク表の名前(この例ではNYC_NET_LINK_TABLE)はUSER_SDO_THEMESビューのBASE_TABLE列に、リンク・ジオメトリ列の名前(この例ではGEOMETRY)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

ネットワーク・テーマの<styling_rules>要素では、このテーマがネットワーク・テーマとして認識されるように、theme_typeをnetworkとする必要があります。リンク、パスおよびノードの要素は、例2-21の場合と同様に、同じ<features>要素で指定できます。

- リンク地物のルールでは、すべてのリンクのC.REDスタイルと方向マーカーの属性を指定します。

- パス地物のルールでは、パスID値が1であるパスにC.BLUEスタイルを、パスID値が3であるパスにC.GREENスタイルを指定します。

- ノード地物のルールでは、M.CIRCLEスタイルを指定し、マーカー・サイズを5と指定します。

例2-21では、リンクに<label>要素も含まれており、リンク列LINK_IDとラベル・スタイルT.STREET NAMEを指定しています。

<styling_rules>要素のDTDについては、A.7項を参照してください。

2.3.5.2 ネットワーク分析でのMapViewerの使用

ネットワーク・モデルのJava APIには、いくつかのネットワーク分析機能が用意されています。MapViewerネットワーク・テーマを、最短パス分析機能とコスト内分析機能をサポートするように定義できます。属性には、両方の機能に適用されるものと、適切な関連機能に対してのみ適用されるものがあります。

すべてのネットワーク分析機能に対して、2.3.5項で説明している<jdbc_network_query>要素とネットワーク関連属性が、ネットワーク・テーマの定義に適用されます。

最短パス分析では、次の属性がネットワーク・テーマの定義に適用されます。

- analysis_algorithm属性: 使用する最短パス分析アルゴリズムを指定します。DIJKSTRAまたはASEARCHのいずれかを指定します。

- shortestpath_style属性: 最短パスに使用するスタイル名を指定します。

- shortestpath_startnode属性: 分析に使用する開始ノードを指定します。

- shortestpath_endnode属性: 分析に使用する終了ノードを指定します。

- shortestpath_startstyle属性(オプション): 開始ノードに使用されるスタイル名を指定します。

- shortestpath_endstyle属性(オプション): 終了ノードに使用されるスタイル名を指定します。

例2-22では、最短パス分析に使用できるネットワーク・テーマを定義します。

例2-22 最短パス分析用のネットワーク・テーマ

<theme name="shortest_path_theme" user_clickable="false">
<jdbc_network_query
network_name="BI_TEST"
network_level="1"
jdbc_srid="0"
datasource="mvdemo"
analysis_algorithm="DIJKSTRA"
shortestpath_style="L.PH"
shortestpath_startnode="20"
shortestpath_endnode="101"
shortestpath_startstyle="M.STAR"
shortestpath_endstyle="M.CIRCLE"
asis="false">
</jdbc_network_query>
</theme>

コスト内分析では、次の属性がネットワーク・テーマの定義に適用されます。

- analysis_algorithm属性: WITHINCOSTにしてください。

- withincost_startnode属性: 分析に使用する開始ノードを指定します。

- withincost_cost属性: 含めるノードのコスト削減値を指定します。開始ノードから指定値以下のコストで到達可能なすべてのノードが、結果として表示されます。開始ノードから到達不能なノード、または到達までに指定値より大きなコストが必要なノードは表示されません。

- withincost_startstyle属性(オプション): 開始ノードに使用されるスタイル名を指定します。

- withincost_style属性: 開始ノードと指定したコスト削減値内の各ノード間のパス表示で、リンクに使用されるスタイル名を指定します。

例2-23では、コスト内分析に使用可能なネットワーク・テーマを定義しています。

例2-23 コスト内分析用のネットワーク・テーマ

<theme name="within_cost_theme" user_clickable="false">
<jdbc_network_query
network_name="BI_TEST"
network_level="1"
jdbc_srid="0"
datasource="mvdemo"
analysis_algorithm="WITHINCOST"
withincost_startnode="20"
withincost_style="L.PH"
withincost_cost="1"
withincost_startstyle="M.STAR"
asis="false">
</jdbc_network_query>
</theme>

2.3.6 トポロジ・テーマ

トポロジ・テーマは、Oracle Spatial and Graphトポロジ・データ・モデルを使用して定義されるトポロジを視覚化するのに便利な、特殊なMapViewerテーマです。トポロジ・データ・モデルを使用することにより、トポロジ内のノード、エッジおよびフェースに関するデータを処理できます。ノード、エッジおよびフェースの空間表現は、SDO_GEOMETRY型の空間ジオメトリです。ノードやエッジの場合、ジオメトリは明示的に格納されます。フェースの場合は、基線(外側と内側)が格納され、その結果フェース・ジオメトリを生成できます。

トポロジには、ノード、エッジ、フェースの空間表現の他に、地物も指定できます。地物(トポロジ・ジオメオリとも呼ばれる)は、実際のオブジェクトの空間表現です。各地物はSDO_TOPO_GEOMETRY型のオブジェクトとして定義されます。このオブジェクトはトポロジ・ジオメトリ・タイプ、トポロジ・ジオメトリID、トポロジ・ジオメトリ層IDおよびトポロジIDです。詳細は、Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドを参照してください。

MapViewerでは、トポロジ地物をレンダリングできます。トポロジのノード、エッジおよびフェースを表示するために、デバッグ・モード(この項の後半で説明)でテーマをレンダリングすることもできます。MapViewerでは、トポロジ・テーマごとに、USER_SDO_TOPO_METADATAビューに格納されているトポロジ・メタデータ情報を使用します。

次の要素と属性は、トポロジ・テーマの定義に適用されます。

- <jdbc_topology_query>要素: これが動的に定義されるトポロジ・テーマであることを指定します。この要素にはSQL問合せ文(終了セミコロンなし)を指定できます。この要素の完全なDTDは、3.1.2項のマップ・リクエストDTDに含まれています。

- topology_name属性: トポロジ名を指定します。

- feature_table属性: 地物表名を指定します。

- spatial_column属性: SDO_TOPO_GEOMETRY型の空間地物列名を指定します。

- label_column属性: 各地物で使用されるテキスト・ラベルを含む地物表の列を指定します。

- label_style属性: ラベル列のラベルをレンダリングするために使用されるテキスト・スタイル名を指定します。

- render_style属性: トポロジのレンダリングに使用されるスタイル名を指定します。

例2-24では、CITY_DATAトポロジのLAND_PARCELS表の地物およびラベルを表示するための属性を指定するトポロジ・テーマを定義しています。SQL文は、空間地物列およびラベル列を指定し、地物表のすべての行を含みます。

例2-24 トポロジ・テーマ

<theme name="topo_theme" user_clickable="false">
<jdbc_topology_query
topology_name="CITY_DATA"
feature_table="LAND_PARCELS"
label_column="FEATURE_NAME"
spatial_column="FEATURE"
label_style="T.CITY NAME"
render_style="C.COUNTIES"
jdbc_srid="0"
datasource="topology"
asis="false">select feature, feature_name from land_parcels
</jdbc_topology_query>
</theme>

MapViewerでは、トポロジのノード、エッジおよびフェースをレンダリングするデバッグ・モードもサポートしています。デバッグ・モードを指定するには、<theme>要素にmode="debug"属性を含めます。この項で前述した<jdbc_topology_query>属性の他に、デバッグ・モードでは次の属性を使用できます。

- edge_style属性: エッジのレンダリングに使用されるスタイル名を指定します。

- edge_label_style属性: エッジ・ラベルのレンダリングに使用されるテキスト・スタイル名を指定します。

- edge_marker_style属性: エッジ・マーカーに使用されるマーカー・スタイル名を指定します。

- edge_marker_size属性: エッジ・マーカーのサイズ(ピクセル数)を指定します。

- node_style属性: ノードのレンダリングに使用されるスタイル名を指定します。

- node_label_style属性: ノード・ラベルのレンダリングに使用されるテキスト・スタイル名を指定します。

- face_style属性: フェースのレンダリングに使用されるスタイル名を指定します。

- face_label_style属性: フェース・ラベルのレンダリングに使用されるテキスト・スタイル名を指定します。

例2-25では、CITY_DATAトポロジのすべての地物表の地物、エッジ、ノードおよびフェースをレンダリングするための、デバッグモード・トポロジ・テーマを定義しています。

例2-25 デバッグ・モードを使用するトポロジ・テーマ

<theme name="topo_theme" mode="debug" user_clickable="false">
<jdbc_topology_query
topology_name="CITY_DATA"
edge_style="C.RED"
edge_marker_style="M.IMAGE105_BW"
edge_marker_size="8"
edge_label_style="T.EDGE"
node_style="M.CIRCLE"
node_label_style="T.NODE"
face_style="C.BLUE"
face_label_style="T.FACE"
jdbc_srid="0"
datasource="topology"
asis="false">
</jdbc_topology_query>
</theme>

2.3.6.1 事前定義済トポロジ・テーマの作成

事前定義済トポロジ・テーマを作成するには、USER_SDO_THEMESビュー(2.9.2項を参照)に行を挿入することにより、トポロジ・テーマの定義をデータベースに格納する必要があります。例2-26では、トポロジ・テーマの定義を格納します。

例2-26 事前定義済トポロジ・テーマの作成

INSERT INTO user_sdo_themes  VALUES (
'LANDPARCELS',
'Topology theme for land parcels',
'LAND_PARCELS',
'FEATURE',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="topology" topology_name="CITY_DATA">
<rule>
<features style="C.RED"></features>
<label column="FEATURE_NAME" style="T.TEXT STYLE"> </label>
</rule>
</styling_rules>' );

例2-26では、CITY_DATAというトポロジ用にLANDPARCELSというトポロジ・テーマを作成しています。地物表の名前(この例ではLAND_PARCELS)はUSER_SDO_THEMESビューのBASE_TABLE列に、地物列の名前(この例ではFEATURE)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

トポロジ・テーマの<styling_rules>要素では、このテーマがトポロジ・テーマとして認識されるように、theme_typeをtopologyとする必要があります。例2-26のテーマでは、CITY_DATAトポロジのすべての土地区画地物をC.REDスタイルを使用してレンダリングし、地物表のFEATURE_NAME列の値にはT.TEXT STYLEラベル・スタイルを使用する、1つのスタイリング・ルールを定義しています。

<styling_rules>要素のDTDについては、A.7項を参照してください。

2.3.7 WFSテーマ

WFSテーマは、Open GIS Consortium (OGC)のWeb Feature Service (WFS)プロトコル、特にWFS1.0.0の実装仕様を使用して配信されるデータのレンダリングをサポートする、特殊なMapViewerテーマです。

WFSは概念的にはジオメトリ・テーマに類似しており、ユーザーは地物のレンダリングやラベル付けを行うことができます。WFSテーマをレンダリングするときは、WFSのGetCapabilities、DescribeFeatureTypeおよびGetFeatureという操作が使用されます。WFSサービスにアクセスすると、MapViewerは機能および地物のタイプに関する情報をキャッシュします。

- GetCapabilitiesは、サーバーの一般情報(リクエストを発行するためのURLアドレスなど)および使用可能な地物を取得します。通常、WFS機能リクエストは次の形式をとります。

http://localhost:1979/geoserver/wfs/GetCapabilities?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetCapabilities

結果には、WFSリクエスト用のURLアドレスを含む<Capabilities>要素が含まれます。たとえば、次の結果にはHTTPのGETおよびPOSTリクエスト用のGetCapabilities URLが含まれています。

<Capability>
<Request>
<GetCapabilities>
<DCPType>
<HTTP>
<Get onlineResource="http://localhost:1979/geoserver/wfs/GetCapabilities?" />
</HTTP>
</DCPType>
<DCPType>
<HTTP>
<Post onlineResource="http://localhost:1979/geoserver/wfs/GetCapabilities?" />
</HTTP>
</DCPType>
</GetCapabilities>
. . .
</Capability>

- DescribeFeatureTypeは、地物の属性やタイプなどの情報を取得します。

- GetFeatureは、地物のジオメトリおよび属性を取得します。GetFeatureリクエストに対する出力形式はGML2です。

WFSテーマの定義には次の属性が適用されます。

- datasource属性: スタイルがロードされるMapViewerデータソースを指定します。

- feature_attributes属性: 拡張スタイルに使用できる地物属性(さらにジオメトリ列とラベル列)を指定します。

- feature_ids属性: 取得するWFS地物IDを指定します。地物IDは、WFSレスポンスではfid名で表されます。地物IDが指定されている場合、WFSリクエストでは空間フィルタおよび問合せ条件は使用されません。

- feature_name属性: WFS地物名を指定します。

- key_column属性: キー列として使用する属性を指定します。事前定義済テーマに適用され、Oracle Mapsアプリケーションで使用できます。key_columnを指定しない場合は、fidがキー列として使用されます。

- label_column属性: 各WFS地物で使用されるテキスト・ラベルを含む地物表の列を指定します。

- label_style属性: ラベル列のラベルをレンダリングするために使用されるテキスト・スタイル名を指定します。

- query_condition属性: WFSテーマに適用するWHERE句の条件を指定します。複数のカッコを使用して定義した式の階層を持つ複雑な条件は指定できません。問合せ内の各文字列は、スペースで区切る必要があります。解析できない条件はWFSリクエストで無視されます。feature_ids属性を指定した場合は、すべての問合せ条件が無視されます。有効な式の例を次に示します。

state_name = 'New Hampshire' or state_name = 'New York'
(state_name = 'New Hampshire' or state_name = 'New York') and top_pop > 700000
(state_name = 'New Hampshire' or state_name = 'New York') and (top_pop > 700000)

- render_style属性: ジオメトリのレンダリングに使用されるスタイル名を指定します。

- service_url属性: HTTP GETリクエスト用の機能アドレスに対応します。MapViewerのservice_urlパラメータは、<GetCapabilities>要素のHTTP GETのオンライン・リソース・アドレスであることが必要です。前述の例の場合、使用される値はhttp://localhost:1979/geoserver/wfs/GetCapabilities?です。
CapabilitiesのパラメータのSERVICE、VERSIONおよびREQUESTは含めず、機能情報のURLのみを使用してください。

- spatial_column属性: SDO_TOPO_GEOMETRY型の空間地物列名を指定します。

- srs属性: WFS地物の空間参照システム(座標系)の名前をEPSGまたはOracle Spatial and Graphの形式で指定します。たとえば、EPSG:4325、SDO:8307および8307 (Spatial and GraphのSRID値)は、同じSRSを表します。EPSGのSRS値を指定した場合、MapViewerでは等価のSpatial and Graph (SDO) SRIDを識別しようとし、一致するSRIDが見つからなかったときは、該当するテーマのSRIDはゼロ(0)とみなされます。MapViewerは、一致するSRID値を次のようにして探します。

1. MapViewer構成ファイルで指定したSDO SRIDからEPSG SRIDへのマッピング・ファイルに指定されているカスタム・マッピングを使用します(1.6.2.11項を参照)。

2. Spatial and GraphファンクションのSDO_CS.MAP_EPSG_SRID_TO_ORACLEを使用して等価のSDOコードを取得します(データの格納に使用するOracle Databaseのバージョンでこのファンクションを利用できる場合)。

3. 一致する値が見つからなかった場合は、MDSYS.CS_SRS表にあるEPSGコードを使用します。

- userおよびpassword属性は、Basic認証を使用するセキュアなWFSサーバーにアクセスするよう定義できます。
WFSサーバーがWebLogic Application Serverにデプロイされている場合、パラメータ-DUseSunHttpHandler=trueをWebLogicサーバーの起動スクリプトに追加する必要があります。

例2-27は、動的WFSテーマを含むリクエストを示しています。WFSサービスはgeoserverで、ローカル・システムにインストールされています。

例2-27 動的WFSテーマを含むWFSリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
title="WFS MAP"
datasource = "mvdemo"
width="640"
height="480"
bgcolor="#a6cae0"
antialiase="true"
mapfilename="wfs_map"
format="PNG_URL">
<center size="20.">
<geoFeature  >
<geometricProperty typeName="center">
<Point>
<coordinates>-70., 44.</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>

<themes>
<theme name="wfs" >
<wfs_feature_request
service_url="http://localhost:1979/geoserver/wfs/GetCapabilities?"
srs="EPSG:4326"
feature_name="states"
spatial_column="the_geom"
render_style="C.COUNTIES"
label_column="STATE_NAME"
label_style="T.STATE NAME"
datasource="mvdemo" />
</theme>
</themes>

</map_request>

2.3.7.1 事前定義済WFSテーマの作成

事前定義済WFSテーマを作成するには、USER_SDO_THEMESビュー(2.9.2項を参照)に行を挿入することにより、WFSテーマの定義をデータベースに格納する必要があります。例2-28では、WFSテーマの定義を格納します。

例2-28 事前定義済WFSテーマの作成

INSERT INTO user_sdo_themes  VALUES (
'WFS_THEME1',
'WFS',
'POI',
'THE_GEOM',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wfs" service_url="http://localhost:1979/geoserver/wfs/GetCapabilities?" srs="EPSG:4326">
<hidden_info>
<field column="NAME" name="name"/>
<field column="MAINPAGE" name="mainpage"/>
</hidden_info>
<rule>
<features style="M.STAR"> </features>
<label column="NAME" style="T.STREET NAME"> 1 </label>
</rule>
</styling_rules>' );

例2-28では、WFS地物POIが実表として使用され、属性THE_GEOMが空間列です。スタイリング・ルール情報にはservice_urlおよびsrs情報が含まれており、例2-28では指定されていませんが、key_column値を指定することもできます。スタイリング・ルールの<features>要素と<label>要素は、ジオメトリ・テーマで使用されるルールとほぼ同じです。非表示情報(<hidden_info>要素)を定義してOracle Mapsアプリケーションで使用することもできます。

例2-29は、例2-28で作成された事前定義済テーマを使用するマップ・リクエストを示しています。

例2-29 事前定義済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">

<themes>
<theme name="wfs_theme1" />
</themes>

</map_request>

WFSのマップ・リクエストの例は、3.1.1.14項も参照してください。

場合によっては、プロキシ情報がWFSサーバーへのアクセスに影響することがあります。そのような場合は、MapViewer構成ファイルで適切なプロキシ・パラメータを指定します。

2.3.8 WMTSテーマ

WMTSテーマでは、Open GIS Consortium (OGC)のWeb Map Tile Service (WMTS)標準、特にWMTS 1.0.0の実装標準を使用した配信データのレンダリングがサポートされます。

WMTSテーマは、WMTS対応サーバーからインターネット経由でタイル画像をフェッチし、それらの画像をレンダリングします。WMTS対応サーバー上のタイル画像は、事前定義済コンテンツ、エクステントおよび解像度を使用して空間参照されます。

WMTSテーマをレンダリングするときは、WMTSのGetCapabilities、GetTileおよびGetFeatureInfoという操作が使用されます。WMTSサービスにアクセスすると、MapViewerはそのWMTSサービスの機能情報をキャッシュします。WMTSテーマの作成時にMap Builderでプロキシ・サーバーを指定したり、WMTSテーマの使用時にMapViewer構成ファイル(MapViewerConfig.xml)を編集することが必要になる場合があります。

- GetCapabilities操作は、サーバーの一般情報(リクエストを発行するためのURLアドレスなど)および使用可能な地物を取得します。通常、WMTS機能リクエストは次の形式をとります。

http://maps.opengeo.org/geowebcache/service/wmts?service=WMTS&version=1.0.0&request=GetCapabilities

結果には、WMTSリクエスト用のURLアドレスを含む<Capabilities>要素が含まれます。たとえば、次の結果にはHTTPのGETまたはPOSTリクエスト用のGetCapabilities URLが含まれています。

<?xml version="1.0" encoding="UTF-8"?>
<Capabilities xmlns="http://www.opengis.net/wmts/1.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd"
version="1.0.0">
<ows:ServiceIdentification>
<ows:Title>Web Map Tile Service - GeoWebCache</ows:Title>
<ows:ServiceType>OGC WMTS</ows:ServiceType>
<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
</ows:ServiceIdentification>
<ows:ServiceProvider>
<ows:ProviderName>http://maps.opengeo.org/geowebcache/service/wmts</ows:ProviderName>
<ows:ProviderSite xlink:href="http://maps.opengeo.org/geowebcache/service/wmts" />
<ows:ServiceContact>
<ows:IndividualName>GeoWebCache User</ows:IndividualName>
</ows:ServiceContact>
</ows:ServiceProvider>
<ows:OperationsMetadata>
<ows:Operation name="GetCapabilities">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetTile">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetFeatureInfo">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
</ows:OperationsMetadata>
<Contents>
<Layer>
<ows:Title>bluemarble</ows:Title>
<ows:WGS84BoundingBox>
<ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
<ows:UpperCorner>180.0 90.0</ows:UpperCorner>
</ows:WGS84BoundingBox>
<ows:Identifier>bluemarble</ows:Identifier>
<Style isDefault="true">
<ows:Identifier>_null</ows:Identifier>
</Style>
<Format>image/png</Format>
<Format>image/jpeg</Format>
<TileMatrixSetLink>
<TileMatrixSet>EPSG:4326</TileMatrixSet>
</TileMatrixSetLink>
<TileMatrixSetLink>
<TileMatrixSet>EPSG:900913</TileMatrixSet>
</TileMatrixSetLink>
</Layer>
...
<TileMatrixSet>
<ows:Identifier>EPSG:4326</ows:Identifier>
<ows:SupportedCRS>urn:ogc:def:crs:EPSG::4326</ows:SupportedCRS>
<TileMatrix>
<ows:Identifier>EPSG:4326:0</ows:Identifier>
<ScaleDenominator>2.795411320143589E8</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
...
</TileMatrixSet>
...
</Contents>
<ServiceMetadataURL xlink:href="http://maps.opengeo.org/geowebcache/service/wmts?REQUEST=getcapabilities&amp;VERSION=1.0.0"/>
</Capabilities>

- GetTile操作は、WMTSサーバーからタイル画像を取得します。サーバーへのリクエストには、タイル画像を定義するキーと値のペア(KVP)のパラメータが含まれます。

- GetFeatureInfo操作により、WMTSクライアントは、特定の問合せ層の特定のタイルに含まれる特定の位置の情報をリクエストできるようになります。

これらの操作の詳細は、http://www.opengeospatial.org/standards/wmtsを参照してください。

WMTSテーマの定義には、次の属性が適用されます。

- current_threads属性(オプション): 整数値(int)の変数。デフォルトは8です。WMTSサーバーからタイル画像を取得するための同時スレッド数です。通常は、同時スレッド数が多いほど、より多くのスレッドで同時にマップ・サーバーから画像タイルを取得できます。他の制約要因により、100という単位の数は使用できない場合がありますが、16、32またはそれよりも少し大きい値を指定すると、処理を高速化できます。

- format属性: WMTSサーバーに格納されるタイル画像の形式を指定します。MapViewerでサポートされる形式は、tif、jpeg、pngおよびpng8です。

- layer属性: タイル画像をフェッチする層の名前を指定します。

- matrix_set_id属性: タイル画像をフェッチするマトリックス・セットのIDを指定します。

- service_url属性: HTTP GETリクエスト用の機能アドレスに対応します。MapViewerのservice_urlパラメータは、<GetCapabilities>要素のHTTP GETのオンライン・リソース・アドレスであることが必要です。前述の例では、http://maps.opengeo.org/geowebcache/service/wmts?という値が使用されます。

- snap_to_tile_scale属性(オプション): ブール値(trueまたはfalse)。デフォルトはfalseです。
snap_to_tile_scaleをtrueに設定すると、リクエスト・スケール(デバイス・ウィンドウのサイズとリクエスト・データ・ウィンドウのサイズから導出されます)は最も近いタイル・スケールにスナップされます。マップ・スケールにはタイル・スケールが使用されます。たとえば、タイルの一連のスケールが1:4000、1:2000、1.1000、1:500…の場合、リクエスト・スケール1:1600はタイル・スケール1:2000にスナップされ、マップには同じスケール1:2000が使用されます(図2-8を参照)。

図2-8 snap_to_tile_scale属性

マップ・リクエストに含まれる複数のWMTSテーマでsnap_to_tile_scaleがtrueに指定されている場合、1つ目のWMTSで指定されたsnap_to_tile_scaleのみがtrueに設定され、他はすべてfalseにリセットされます。これは論理的な動作です。たとえば、そのような2つのテーマで、この属性が両方ともtrueに設定されていて、それぞれが異なる一連のWMTSタイル・スケールを使用する場合(所有する機関が異なり、使用する一連のスケールも異なる2台のマップ・サーバーなど)、1つ目のテーマは最も近いタイル・スケールを、タイル・データの取得と最終的なリクエスト・スケールに使用します。同時に、2つ目のテーマはsnap_to_tile_scaleをfalseにリセットし、tile_resizing_optionに従って独自のタイル・スケールを検出した後、1つ目のテーマのタイル・スケールに合せて、タイルのサイズを変更する必要があります。

- style属性: MapViewerでは現在使用されていません。デフォルトは文字列defaultです。

- tile_resizing_option属性(オプション): 文字列unbiased、expand_biasedまたはcontract_biased。デフォルトはunbiasedです。snap_to_tile_scaleがtrueに設定されている場合、tile_resizing_optionは無視されます。
詳細は、第2.3.8.1項「tile_resizing_option属性の動作」を参照してください。

- timeout属性(オプション): リクエストのタイムアウトを指定する整数(ミリ秒単位)。デフォルトは0です(つまり、リクエストがレスポンスを待機する時間は制限されません)。
この属性を指定すると、指定した時間内にマップ・サーバーが応答しなかった場合はマップ・リクエストが終了し、リソースが解放されます。たとえば、30000 (30,000ミリ秒、つまり30秒)を指定します。

- top_left_corner_x属性(オプション): WMTSサーバーによって提供される、タイル画像全体を含むエクステントの左上隅を示すx座標値。指定しなかった場合、WMTSサーバーから取得された値が使用されます。この属性を指定する場合は、top_left_corner_y属性も指定します。

- top_left_corner_y属性(オプション): WMTSサーバーによって提供される、タイル画像全体を含むエクステントの左上隅を示すy座標値。指定しなかった場合、WMTSサーバーから取得された値が使用されます。この属性を指定する場合は、top_left_corner_x属性も指定します。

- version属性: WMTSサーバーによって実装されたWMTS仕様のバージョン。

関連項目:
MapViewer用のWMTSサービス、WMTS操作およびMapViewer用のWMTSサービスの準備の詳細は、付録F「MapViewerでのOGC WMTSのサポート」を参照してください。

2.3.8.1 tile_resizing_option属性の動作

WMTSテーマのsnap_to_tile_scale属性がfalse (デフォルト)に設定されているか省略されている場合は、常にリクエスト・スケールが適用され、tile_resizing_option属性の値(指定した値またはデフォルト値)を使用して適切なタイル・スケールが選択されます。ただし、snap_to_tile_scaleがtrueの場合、tile_resizing_option属性の値は無視されます。

tile_resizing_option属性の値には、文字列unbiased (デフォルト)、expand_biasedまたはcontract_biasedを指定できます。

- unbiased (デフォルト): 最も近いレベルのタイル・スケールを選択した後、タイル・イメージを拡大または縮小してリクエスト・スケールのマップを生成します。たとえば図2-9では、リクエスト・スケールの範囲が1:3000から1:1500の場合、常に1:2000を使用してマップが生成されます。

図2-9 tile_resizing_optionのunbiased値

- expand_biased: リクエスト・スケールのマップを生成するための適切なタイル・スケールを識別する際に、タイル画像の拡大によるリクエスト・マップのレンダリングに関するプリファレンスを使用します。つまり、リクエスト・スケールのマップを生成する際に、より小さいタイル・スケールをプリファレンスとして使用します。現在実装されている拡大率のプリファレンスは8:2です。たとえば図2-10では、リクエスト・スケールの範囲が1:2400から1:1200の場合、タイル・スケール1:2000を使用してリクエスト・マップが生成されます。

図2-10 tile_resizing_optionのexpand_biased値

- contract_biased: リクエスト・スケールのマップを生成するための適切なタイル・スケールを識別する際に、タイルの縮小によるリクエスト・マップのレンダリングに関するプリファレンスを使用します。つまり、リクエスト・スケールのマップを生成する際に、より大きいタイル・スケールをプリファレンスとして使用します。現在実装されている縮小率のプリファレンスは8:2です。たとえば図2-11では、リクエスト・スケールの範囲が1:3600から1:1800の場合、タイル・スケール1:2000を使用してリクエスト・マップが生成されます。

図2-11 tile_resizing_optionのcontract_biased値

第2.3.8.2項「snap_to_tile_scaleおよびtile_resizing_option属性の使用に関するガイドライン」も参照してください。

2.3.8.2 snap_to_tile_scaleおよびtile_resizing_option属性の使用に関するガイドライン

この項では、snap_to_tile_scaleおよびtile_resizing_option属性を使用して、より質の高いマップを生成するための一般的なガイドラインを示します。マッピングには様々な用途があるため、使用中のドメインに関する知識を生かし、その要件に最も合った属性値を設定することもできます。

マップの質が最も高いのは元のタイル・マップであるため、可能なかぎりsnap_to_tile_scaleをtrueに設定して、リクエスト・スケールのかわりに、最も近いタイル・スケールを使用します。

ただし、リクエスト・スケールを使用することが必須である場合は、属性を設定する際に、次のことを考慮します。

- tile_resizing_optionの値を設定する場合、snap_to_tile_scale属性を省略するか、この属性をfalse (デフォルト)に設定します。snap_to_tile_scaleがtrueに設定されている場合、リクエスト・スケールは適用されず、かわりに最も近いタイル・スケールが使用されます。

- マップが注釈と細い線形地物を含む地形マップである場合、expand_biasedオプションを使用できます。

- マップが土地被覆マップなどのテーマ・マップである場合、contract_biasedオプションを使用できます。

- マップが衛星画像である場合、unbiasedまたはcontract_biasedオプションを使用できます。

tile_resizing_optionの値については、次のことに注意してください。

- 通常は、contract_biasedオプションを指定すると、より詳細なマップを生成できますが、これらのマップはexpand_biasedオプションを指定した場合よりも多くのタイルを必要とするため、タイルの取得に時間がかかります。

- リクエスト・スケールが適用される際に(snap_to_tile_scale属性がfalseに設定されている場合)、リクエスト・スケールがタイル・スケールとほぼ等しい場合、tile_resizing_optionに指定された値とは無関係に、同じ操作(拡大または縮小)が実行されます。たとえば、第2.3.8.1項「tile_resizing_option属性の動作」の図では、リクエスト・スケールが1:1900の場合、unbiased、expand_biasedまたはcontract_biasedのうち、いずれのオプションが指定されていても、1:2000のタイル・マップが取得され、そのマップが、リクエスト・マップを1:1900のマップ・スケールでレンダリングするために拡大されます。同様に、リクエスト・スケールが1:2100の場合も、1:2000のタイル・マップが取得され、そのマップが、リクエスト・マップを1:2100のスケールでレンダリングするために縮小されます。

例2-30は、snap_to_tile_scale="true"が指定された動的WMTSテーマを含むリクエストを示しています。

例2-30 動的WMTSテーマを含むリクエスト

<?xml version="1.0" standalone="yes"?>
<map_request title="OpenGeo wmts theme (bluemarble)"
datasource="mvdemo"
width="1024"
height="900"
mapfilename="Bluemarble"
format="PNG_STREAM">
<center size="80.0">
<geoFeature>
<geometricProperty typeName="center">
<Point>
<coordinates>-112, 42.0</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>
<themes>
<theme name="wmtstheme: Earth" timeout="10000" snap_to_tile_scale="true">
<wmts_gettile_request>
<service_url> http://maps.opengeo.org/geowebcache/service/wmts </service_url>
<version> 1.0.0 </version>
<layer> bluemarble </layer>
<matrix_set_id> EPSG:4326 </matrix_set_id>
<format> image/png </format>
<style> default </style>
<top_left_corner_x> -180.0 </top_left_corner_x>
<top_left_corner_y> 90.0 </top_left_corner_y>
</wmts_gettile_request>
</theme></themes>
</map_request>

2.3.8.3 事前定義済WMTSテーマの作成

事前定義済WMTSテーマを作成するには、USER_SDO_THEMESビュー(第2.9.2項を参照)に行を挿入することにより、WMTSテーマの定義をデータベースに格納する必要があります。例2-31では、WMTSテーマの定義を格納します。

例2-31 事前定義済WMTSテーマの作成

INSERT INTO user_sdo_themes  VALUES (
'earth_image',
'Opengeo.org demo',
'table_spaceholder',
'geom_col_spaceholder',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wmts">
<version> 1.0.0 </version>
<service_url> http://maps.opengeo.org/geowebcache/service/wmts </service_url>
<layer> bluemarble </layer>
<matrix_set_id> EPSG:4326 </matrix_set_id>
<format> image/png </format>
<style> default </style>
</styling_rules>');

例2-31において、earth_imageはWMTSテーマの名前、table_spaceholderとgeom_col_spaceholderはUSER_SDO_THEMESビューのBASE_TABLEおよびGEOMETRY_COLUMN列に値を格納するためのダミー値です。スタイリング・ルール情報にはservice_url、layer、matrix_set_id、formatおよびstyle情報が含まれます。top_left_corner_xおよびtop_left_corner_y属性は指定されていないため、デフォルトではWMTSサーバーから取得した値が使用されます。

例2-32は、例2-31で作成された事前定義済テーマを使用するマップ・リクエストを示しています。

例2-32 事前定義済WMTSテーマを含むマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
title="OpenGeo predefined wmts theme"
datasource="mvdemo"
width="1024"
height="768"   mapfilename="Bluemarle: Earth"
format="PNG_STREAM">
<center size="10.0">
<geoFeature>
<geometricProperty typeName="center">
<Point>
<coordinates>-75.0,42.0</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>
<themes>
<theme name="earth_image" />
</themes>
</map_request>

2.3.9 カスタム・ジオメトリ・テーマ

カスタム・ジオメトリ・テーマは、外部空間データ(シェープファイルなど、Oracle Spatial and Graph以外のネイティブ形式の空間データ)に関連付けられます。カスタム・ジオメトリ・テーマは空間プロバイダ・クラスを使用してネイティブ・データを取得します。また、外部プロバイダは空間データ・プロバイダ・プラグイン・メカニズムを使用する必要があります。MapViewerには、外部プロバイダが実装する必要がある空間プロバイダ・インタフェース・クラスが用意されています。このインタフェース実装には、次のメソッドが含まれます(一部のメソッドは、Map Builderなどのアプリケーションのユーザー・インタフェースで使用できる情報を主に提供します)。

public interface SDataProvider
{
/**
* Returns the initialization parameters for the provider.
* @return String[] - array with initialization parameter names
*/
public String[] getInitParameterNames();

/**
* Returns runtime parameter names. Runtime parameters are additional parameters
* that the provider may use when retrieving the data objects.
* @return String[] - array with runtime parameter names
*/
public String[] getRuntimeParameterNames();

/**
* Returns a value that gives a hint for the runtime parameter value.
* This hin can be used as a tooltip in user intefaces.
* @param runtimeParam
* @return   a String representing the hint value, or null if no hint is available
*/
public String getRuntimeParameterHintValue(String runtimeParam);

/**
* This method is used to set the initialization parameters for the specific
* data provider.
* @param params - parameters to be used by the initialization method.
* @return boolean - true if success; false otherwise
*/
public boolean init(Properties params);

/**
* This method creates and returns an instance of SDataSet which contains
* all the Spatial data produced by this provider, based on
* the given parameters for a specific incoming map request.
* <br>
* MapViewer calls this method on the custom theme producer implementation.
*
* @param queryWin the search area to retrieve spatial objects. The window is
* assumed to be already on data provider spatial reference system.
* @param nonSpatialColumns - the list of attributes that will return with objects.
* @param queryCondition - query condition expression (may have binding parameters).
* @param bindingParameters - binding variables for query condition with binding parameters.
* @param params  - parameters that the provider may use to retrieve the data.
* @return SDataObject - an instance of SDataSet class; null if failed.
*/
public SDataSet buildDataSet(Rectangle2D queryWin,String []nonSpatialColumns,
String queryCondition,Object[] bindingParameters,
Properties params);

/**
* Returns the list of existing attributes for this data provider.
* @param params  parameters that the provider may use to get the attribute list.
* @return Field[] - array of attributes for this provider.
*/
public Field[] getAttributeList(Properties params);

/**
* Returns the data set spatial extent MBR.
* @param params  parameters that the provider may use to get the data extents
* @return Rectangle2D - data spatial extent for this provider.
*/
public Rectangle2D getDataExtents(Properties params);

/**
* Returns if provider can build spatial indexes.
* If true, means that buildSpatialIndex method can be called.
* @return
*/
public boolean canBuildSpatialIndex();

/**
* Builds a spatial index on the data set.
* @param params  parameters that the provider may use to build the spatial index.
* @return boolean - true if saptial index creation is successful.
*/
public boolean buildSpatialIndex(Properties params);

/**
* Clears provider internal caches (if provider implement caches).
*/
public void clearCache();

/**
* Returns the parameter names that can be used to query for spatial tables.
* Can be used more as information for user interfaces.
* @return
*/
public String[] getParametersToQuerySpatialMetadata();

/**
* Returns the spatial tables and spatial columns.
* @param params must define the parameters returned from
* getParametersToQuerySpatialMetadata.
* @return  an array list defining the table name(index [0])
*          and spatial column (index[1])
*/
public String[][] getSpatialTables(Properties params);
}

initメソッドおよびbuildDataSetメソッドは必ず実装する必要があります。その他のメソッドの実装は空でもかまいませんが、Oracle Map Builderツールなどのアプリケーションではこれらのメソッドを利用して、空間データ・プロバイダに関する情報を処理することが可能です。プロバイダは、各自に固有の空間索引付けメカニズムを実装できます。たとえば、MapViewerにはシェープファイル・プロバイダ用の実装が用意されており、buildSpatialIndexメソッドによって、.oixという拡張子が付いた索引付けファイルがshapefileディレクトリに作成されます。付録Dに、MapViewerでサンプル空間プロバイダを実装および登録する方法の例が記載されています。

カスタム・ジオメトリ・テーマを含むMapViewerのネイティブ・データをレンダリングするには、次の手順を実行します。

1. プラグイン・インタフェースに基づく空間プロバイダ・クラスを実装し、そのプロバイダの実装を含むjarファイルを生成します。このjarファイルを、MapViewerのCLASSPATH定義に含まれるディレクトリにコピーします。

2. プロバイダをMapViewer構成に登録します。MapViewerとMap Builderには、ESRIシェープファイルにアクセスするためのシェープファイル・プロバイダ、OGRでサポートされるデータ形式にアクセスするためのGDAL-OGRプロバイダ、およびTeradataデータベースに格納されているデータにアクセスするためのTeradataプロバイダが付属しています。(これらの環境における空間データの処理の詳細は、GDAL-OGRとTeradataのドキュメントを参照してください。)GDAL-OGRライブラリgdal.jarと、Teradataライブラリterajdbc4.jarおよびtdgssconfig.jarは、サーバーのクラスパスに配置されている必要があります。MapViewer構成ファイルの登録セクションは、次のようになります。

<s_data_provider
id="shapefileSDP"
class="oracle.sdovis.ShapefileDataProvider"
>
<parameters>
<parameter name="datadir" value="/temp/data" />
</parameters>
</s_data_provider>

各プロバイダにはid名とclass名の定義が必要です。idはプロバイダを識別する一意の名前で、classはJavaクラスの実装に対応します。<parameters>要素では、プロバイダの初期化パラメータを定義します。

シェープファイル・プロバイダの場合、初期化パラメータdatadirによってMapViewerがデータファイルを探す場所を定義するので、MapViewerがアクセスできるディレクトリを指定する必要があります。MapViewerは、まずテーマ定義情報に基づいてデータファイルを探します。テーマ定義に定義されたデータ・パスにアクセスできない場合は、構成ファイルに定義されたデータ・パスを探します。

3. 外部空間データ・プロバイダに関連付けられたカスタム・ジオメトリ・テーマを作成します。

外部空間データはOracleデータベースの外側にありますが、このデータをレンダリングするためにはデータベース接続が必要です。データベースは、データのレンダリングやラベル付けに使用されるスタイリング情報の他、テーマに関連するメタデータ情報を格納するために使用されます。

例2-33は、動的カスタム・ジオメトリ・テーマの定義を示しています。<custom_geom_theme>は、カスタム・ジオメトリ・テーマを指定するXML要素です。<parameters>要素では、プロバイダによって使用されるランタイム・パラメータを定義します。この場合は"filename"がランタイム・パラメータで、"/lbs/demo/shapefile/parcel.shp"がファイル・パスを定義しています。MapViewerは最初にこのファイル・パス定義を使用しますが、このパスにアクセスできない場合は、シェープファイル空間プロバイダの構成ファイルに定義されているデータ・ディレクトリの値を使用します。

使用可能な空間プロバイダ用のランタイム・パラメータは、次のとおりです(Map Builderにはパラメータ値を暗号化するためのオプションが用意されています)。

- シェープファイル・プロバイダの場合:

- filename: ディスク上のシェープファイル(.shp)へのフルパス

- GDAL-OGRの場合:

- datasource: OGRデータソースを示す全文字列この文字列は、データソースの形式によって異なります。(GDAL-OGRでサポートされる様々な形式への接続の詳細は、GDAL-OGRのドキュメントを参照してください。)
ファイル形式の場合、このパラメータの値は通常、アーカイブへのフルパスです。

データベース接続の場合、空間表と空間列にアクセスするための全接続文字列を入力します。たとえば、1つの空間列を含むPostgis表名STATESの場合、値は次のようになります。

datasource = PG:dbname='template_postgis' host='localhost' port='5432' user='postgres' password='manager' tables=states

- Teradataプロバイダの場合:

- jdbcurl: TeradataデータベースへのJDBC接続。文字列の形式は次のとおりです。

jdbc:teradata://<host_address>/DATABASE=<db_name>,DBS_PORT=<db_port>,TMODE=ANSI,CHARSET=UTF8

- user: データベース・ユーザー。

- パスワード: データベース・パスワード

- containerds: オプション。アプリケーション・サーバーで定義されたTeradataコンテナ・データソースの名前(WebLogicなど)。定義されている場合、この値がまず、MapViewerでjdbcurl値のかわりに使用されます。

- basetable: 空間表の名前。

- geomcolumn: 空間列の名前。

- fetchsize: オプション。プリフェッチする行の数。

例2-33 動的カスタム・ジオメトリ・テーマの定義

<theme name="custom_geom_theme_1" >
<custom_geom_theme
provider_id="shapefileSDP"
srid="26986"
render_style="C.RED"
label_column="parcel_id"
label_style="T.CITY NAME"
datasource="mvdemo">
<parameters>
<parameter name="filename" value="/lbs/demo/shapefile/parcel.shp"/>
</parameters>
</custom_geom_theme>
</theme>

動的カスタム・ジオメトリ・テーマに対して使用可能な属性は次のとおりです。

- provider_idでは、空間プロバイダを指定します。

- datasourceでは、Oracleデータベース接続を指定します。この接続は、空間データをレンダリングするためのスタイルを取得するときに使用されます。

- sridでは、空間参照システム(Oracle Spatial and Graphの座標系)を指定します。

- render_styleでは、地物をレンダリングするときに使用されるスタイルを指定します。

- label_columnでは、テーマで使用されるラベル・テキストを含む列の名前を指定します。

- label_styleでは、地物にラベル付けするときに使用されるスタイルを指定します。

- feature_attributesでは、拡張スタイルで使用可能な追加の属性を指定します。

- key_columnでは、Oracle Mapsアプリケーションで使用できるキー属性を指定します。

- query_conditionでは、機能選択をフィルタ処理するためのWHERE句を指定します。シェープファイル・プロバイダでは、問合せ条件がサポートされていません。ただし、OGRプロバイダを使用すると、問合せ条件を含むシェープファイルをレンダリングできます。問合せ条件の式では、バインディング・パラメータを定義できます(attr = :1など)。

例2-34は、事前定義済カスタム・ジオメトリ・テーマの定義を格納する方法を示しています。GEOMETRYをジオメトリ列名として使用し、実表名には任意の名前を指定できます。"theme_type=geom_custom"属性は、テーマをカスタム・テーマとして識別します。<rule>要素は、Oracle Spatial and Graphジオメトリ・テーマに使用する場合と同じ機能を持ちます。<parameters>要素では、プロバイダが受け入れるランタイム・パラメータを定義します。シェープファイル・プロバイダの場合、ランタイムparameterファイル名は、シェープファイル・データへのパスを定義します。

例2-34 事前定義済カスタム・ジオメトリ・テーマの格納

insert into user_sdo_themes values (
'SHAPE_THEME',
'Shapefile theme',
'CUSTOM_TABLE',
'GEOMETRY',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="geom_custom" srid="26986" provider_id="shapefileSDP">
<rule>
<features style="C.RED"> </features>
<label column="PARCEL_ID" style="T.CITY NAME"> 1 </label>
</rule>
<parameters>
<parameter name="filename" value="/lbs/demo/shapefile/parcel.shp"/>
</parameters>
</styling_rules>'
);

事前定義済カスタム・ジオメトリ・テーマのランタイム・パラメータ・セクションは、map_request内にパラメータを指定することによってオーバーライドできます。たとえば、<map_request>要素に次のようなパラメータを含めることができます。

<theme name="CUSTOM_THEME" >
<parameters>
<parameter name="filename" value="/lbs/demo/shapefile/counties.shp"/>
</parameters>
</theme>

2.3.10 注釈テキスト・テーマ

Oracle Spatial and Graphでは、『OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture』で指定された注釈テキストをサポートしています。この仕様では、注釈テキストは、地理関連データまたはアドホック・データおよびプロセス関連情報を表示可能なテキストとして含む、単純に挿入されたテキストとして定義されています。このテキストは、エディタまたは単純な地図で表示するために使用できます。通常、完全な地図製作における品質としては不十分ですが、あらゆるアプリケーションで必要となるテキスト機能をほぼ果たすことができます。

Oracle Spatial and Graphには、注釈テキストの格納用としてST_ANNOTATION_TEXTオブジェクト型が、注釈テキストに関連するメタデータの格納用としてUSER_ANNOTATION_TEXT_METADATAビューおよびALL_ANNOTATION_TEXT_METADATAビューが用意されています。注釈テキストのサポートの詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。

各注釈テキスト・オブジェクトは1つ以上の要素で構成され、各要素は次の項目によって定義されます。

- 値: 要素に関連付けられるテキスト。値がNULLの場合、テキストは最初のNULL以外の先行する要素の値から取得されます。先行する要素の値がいずれもNULLである場合は、メタデータから取得されたテキスト式の値がテキストになります。

- 位置: 注釈テキスト・オブジェクトに関連付けられる空間的位置。

- 引出し線: 注釈テキスト・オブジェクトに関連付けられる線形地物。

- 属性: テキストの表示に使用される図形属性。値がNULLの場合、図形属性はメタデータの属性値から取得されます。

メタデータ・ビューのテキスト式は、次のいずれかになります。

- 列の名前。

- 列名に適用される関数。例: substr(my_col,1,3)

- 連結した複数の列名。例: column_1 || column_2 || column_3

- 列名とは無関係のテキスト値。この場合、NULL値を持つテキスト要素に使用される単純なテキスト文字列とみなされます。

MapViewerの注釈テキスト・テーマは、ST_ANNOTATION_TEXT型の列を持つデータベース表に関連付けられます。各注釈テキスト要素について、MapViewerでは次のものがレンダリングされます。

- 注釈テキスト要素の値(NULL以外の場合)。要素の属性に基づきリアルタイムに作成されるテキスト・スタイルを使用して、文字列としてレンダリングされます。

- 注釈テキスト要素に関連付けられた引出し線(NULL以外の場合)。この場合、ユーザーは引出し線をレンダリングするためのMapViewerスタイルを選択できます。

各注釈テキスト要素にはジオメトリによって表されるエンベロープが含まれており、空間索引付けに使用されます。そのため、MapViewerの注釈テキスト表で空間索引付けを使用するには、次の手順を実行する必要があります。

1. USER_ANNOTATION_TEXT_METADATAビューに、注釈テキスト表の名前および注釈テキスト列(つまり、ST_ANNOTATION_TEXT型の列)のPRIVATEENVELOPE属性を指定する行を挿入します。
次の例では、TEXTOBJという注釈テキスト列を含むANNOTEXT_TABLEという名前の表に行を挿入しています。

INSERT INTO USER_SDO_GEOM_METADATA
VALUES (
'ANNOTEXT_TABLE',
'TEXTOBJ.PRIVATEENVELOPE',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('X', 0.0, 10.0, 0.0005),
SDO_DIM_ELEMENT('Y', 0.0,10.0, 0.0005)
),
null   -- SRID
);

2. 指定した注釈テキスト表の注釈テキスト・エンベロープに空間索引を作成します。
次の例では、ANNOTEXT_TABLEという表の注釈エンベロープにANNO_TEXT_IDXという空間索引を作成しています。

CREATE INDEX anno_text_idx ON annotext_table(textobj.privateenvelope)
INDEXTYPE IS mdsys.spatial_index;

有効なSRID情報を持つテーマの場合、メタデータ・ベース・マップ・スケールを定義すると、要素のテキスト・サイズは、マップのズームインやズームアウトにあわせて変更されます。

例2-35では、MapViewerの事前定義済注釈テキスト・テーマのスタイリング・ルールを定義しています。構成は他のMapViewerテーマと同様です。現在のところ、各注釈テーマに対して処理されるスタイリング・ルールは1つのみです。この例では、テーマのタイプはannotation、引出し線のレンダリングに使用される地物スタイルはL.PHで、問合せ条件(id = 1 or id = 2)が最後の問合せに追加されます。

例2-35 事前定義済注釈テキスト・テーマのスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="annotation">
<rule>
<features style="L.PH"> (id = 1 or id = 2) </features>
</rule>
</styling_rules>

例2-36は、動的注釈テキスト・テーマのテーマ定義を示しています。定義されるパラメータは次のとおりです。

- datasource: データソース名

- jdbc_srid: 空間参照ID

- annotation_table: 注釈テキスト表

- annotation_column: 注釈テキスト列

- leaderline_style: 使用される引出し線のスタイル

例2-36 動的注釈テキスト・テーマの定義

<themes>
<theme name="theme1" >
<jdbc_annotation_query
datasource="tilsmenv"
jdbc_srid="0"
annotation_table="ANNOTEXT_TABLE"
annotation_column="textobj"
leaderline_style="L.PH"
>select textobj from annotext_table
</jdbc_annotation_query>
</theme>
</themes>

例2-37は、例2-36と類似していますが、ここでは、annotation_column列にNULL値が含まれる場合にtextexpr_columnの値が注釈に使用されるという動作が追加されています。例2-37では、ANNOTATION_TABLE表にDEFAULT_ANNOTATIONという列(例2-38で使用)が含まれているものとします。この追加列は、textexpr_column属性とSELECT文に指定されます。

例2-37 デフォルト注釈列を含む動的注釈テキスト・テーマ

<themes>
<theme name="theme1" >
<jdbc_annotation_query
datasource="tilsmenv"
jdbc_srid="0"
annotation_table="ANNOTEXT_TABLE"
annotation_column="textobj"
textexpr_column="default_annotation"
leaderline_style="L.PH"
>select textobj, default_annotation from annotext_table
</jdbc_annotation_query>
</theme>
</themes>

例2-38では、注釈テキスト表を作成し、MapViewerで使用できるように準備します。

例2-38 注釈テキスト・データを生成するためのスクリプト

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 100
SET PAGESIZE 10000
SET SERVEROUTPUT ON SIZE 5000
SET LONG 20000
SET TIMING ON
call dbms_java.set_output(5000);

---------------------------------------------------------------------
-- Create an annotation text table (a table that has a
-- column of ST_ANNOTATION_TEXT object type), and insert some records.
---------------------------------------------------------------------

create table annotext_table (
id number,
default_annotation varchar2(32),
textobj ST_ANNOTATION_TEXT);

insert into annotext_table values (1,'Text_1',
ST_ANNOTATION_TEXT(
ST_ANNOTATIONTEXTELEMENT_ARRAY(
ST_ANNOT_TEXTELEMENT_ARRAY(
ST_ANNOTATIONTEXTELEMENT('Sample Label 1',
SDO_GEOMETRY(2001, null, sdo_point_type(1,1,null),null,null),
SDO_GEOMETRY(2002,null,null,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(0,0, 1,1)), NULL)))));

insert into annotext_table values (2,'Text_2',
ST_ANNOTATION_TEXT(
ST_ANNOTATIONTEXTELEMENT_ARRAY(
ST_ANNOT_TEXTELEMENT_ARRAY(
ST_ANNOTATIONTEXTELEMENT('Sample Label 2',
SDO_GEOMETRY(2001,null,sdo_point_type(10,10,null),null,null),
SDO_GEOMETRY(2002,null,null,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(5,10, 10,10)), NULL)))));

insert into annotext_table values (3, 'Text_3',
ST_ANNOTATION_TEXT(
ST_ANNOTATIONTEXTELEMENT_ARRAY(
ST_ANNOT_TEXTELEMENT_ARRAY(
ST_ANNOTATIONTEXTELEMENT(null,
SDO_GEOMETRY(2002, null, null,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(2,5,4,5,6,5)),
SDO_GEOMETRY(2002,null,null,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(4,3, 4,5)),
'<?xml version="1.0" encoding="UTF-8" ?>
<textAttributes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../annotation_text.xsd">
<textStyle fontFamily="Dialog" fontSize="14" fill="blue"/>
<textlayout/>
</textAttributes>'
)))));

---------------------------------------------------------------------
-- Register the annotation text table in the user metadata view.
---------------------------------------------------------------------

insert into USER_ANNOTATION_TEXT_METADATA values(
'ANNOTEXT_TABLE', 'TEXTOBJ', null, null, null);

---------------------------------------------------------------------
-- Update the metadata information.
---------------------------------------------------------------------

update user_annotation_text_metadata set
text_expression='default_annotation',
text_attributes =
'<?xml version="1.0" encoding="UTF-8" ?>
<textAttributes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../annotation_text.xsd">
<textStyle fontFamily="Serif" fontSize="14" fill="#ff0000"/>
<textlayout/>
</textAttributes>';

---------------------------------------------------------------------
-- Register the annotation text geometry envelope on the user
-- metadata view of geometries.
---------------------------------------------------------------------

INSERT INTO USER_SDO_GEOM_METADATA
VALUES (
'ANNOTEXT_TABLE',
'TEXTOBJ.PRIVATEENVELOPE',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('X', 0.0, 10.0, 0.0005),
SDO_DIM_ELEMENT('Y', 0.0,10.0, 0.0005)
),
null   -- SRID
);

---------------------------------------------------------------------
-- Create a spatial index on the annotation text envelope.
---------------------------------------------------------------------

create index anno_text_idx on annotext_table(textobj.privateenvelope)
indextype is mdsys.spatial_index;

---------------------------------------------------------------------
-- Insert a predefined theme into MapViewer's theme view.
---------------------------------------------------------------------

INSERT INTO user_sdo_themes  VALUES (
'ANNOTEXT_THEME',
'Annotation text',
'ANNOTEXT_TABLE',
'TEXTOBJ',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="annotation">
<rule >
<features style="L.PH"> </features>
</rule>
</styling_rules>' );

commit;

2.3.11 線形参照システム(LRS)テーマ

LRSテーマは、Oracle Spatial and Graphの線形参照システム(LRS)を使用して定義される地物を視覚化するのに便利な、特殊なMapViewerテーマです(『Oracle Spatial and Graph開発者ガイド』を参照)。

LRSテーマには、2つの表が必要です。それらは、LRSジオメトリ列を含むLRS表と、1つまたは2つのメジャー列を含む結合表です。点イベントには、結合表に1つのメジャー列が必要です(例:メジャーm1に配置された道路標識およびメジャーm2で発生した事故)。一方、線形イベントには2つのメジャー列が必要です。開始メジャーに1つおよび終了メジャーに1つです(例:メジャーm1からメジャーm2までは道路の舗装状態が悪く、メジャーn1からメジャーn2までは状態がよい)。各イベントは、結合表内の1つの行に格納されます。

LRSテーマを定義した後は、テーマの使用時にマップ・リクエストにテーマ名のみを指定します。MapViewerにより自動的にテーマの定義が検索され、これら2つの指定された表を結合するクエリーが作成されます。また、LRSファンクションが内部で使用され(点イベントの場合はSDO_LRS.LOCATE_PT、線形イベントの場合はSDO_LRS.CLIP_GEOM_SEGMENT)、ジオメトリ・データが生成されます。MapViewerでは、テーマのスタイリング・ルールに従って、点または線形セグメントがそれらの属性データとともにレンダリングされます。

事前定義済LRSテーマを作成するには、USER_SDO_THEMESビューに行を挿入することにより、LRSテーマの定義をデータベースに格納する必要があります。例2-39では、LRS_THEMEというLRSテーマの定義を格納します。

例2-39 LRSテーマの作成

INSERT INTO user_sdo_themes (name, description, base_table, geometry_column, styling_rules)
VALUES (
'LRS_THEME',
'LRS theme example with 3 rules, 2 measure columns',
'INTERSTATES_LRS',
'GEOM',
'<?xml version="1.0" standalone="yes"?>
<styling_rules key_column="id" theme_type="lrs">
<rule>
<features  asis="true">
condition=''good''
</features>
<label column="condition" style="T.STREET NAME"/>
<rendering>
<style name="L.PTH"/>
</rendering>
</rule>
<rule>
<features  asis="true">
condition=''fair''
</features>
<label column="condition" style="T.STREET NAME"/>
<rendering>
<style name="L.SH"/>
</rendering>
</rule>
<rule>
<features  asis="true">
condition=''poor''
</features>
<label column="condition" style="T.STREET NAME"/>
<rendering>
<style name="L.MAJOR STREET"/>
</rendering>
</rule>
<hidden_info>
<field column="highway"      name="highway name"/>
<field column="routen"       name="highway number"/>
<field column="condition"    name="pavement condition"/>
</hidden_info>
<join_table
name="pavement_condition"
start_measure="from_measure"
end_measure="to_measure"
/>
<join_columns
lrs_table_column="highway"
join_table_column="seg_id"
/>
</styling_rules>'
);

例2-39では、LRS表の名前(GEOM、HIGHWAYおよびROUTENの3列が含まれるINTERSTATES_LRS)はUSER_SDO_THEMESビューのBASE_TABLE列に、LRSジオメトリ列(GEOM)はGEOMETRY_COLUMN列に、<styling_rules>要素が1つ含まれるXML文書はSTYLING_RULES列にそれぞれ挿入されます。

LRSテーマの<styling_rules>要素では、このテーマがLRSテーマとして認識されるように、theme_typeをlrsとする必要があります。

オプションのkey_column属性を省略すると、データベースからデータをフェッチするためのクエリー文字列が作成されるとき、キー列は含まれません。これは、ROWID列がデフォルトのキー列である事前定義済ジオメトリ・テーマとは異なります。

子要素の<rule>、<hidden_info>、<join_table>および<join_columns>は、<styling_rules>要素内に含めることができます。子要素の<join_table>および<join_columns>は、LRSテーマに固有です。

LRSテーマの<rule>要素は事前定義済テーマでの定義に類似していますが、その子要素である<features>では、asis属性の値がtrueに設定されている必要があります(asis="true")。<styling_rules>要素には、0個、1個またはそれ以上の<rule>要素を含めることができます。

<hidden_info>要素は、LRSテーマではオプションです。これはOracle Mapsアプリケーションでの使用のために定義されています。LRS表または結合表のいずれか一方、あるいはその両方からの属性のリストを指定します。(詳細は、3.1.2.9項「jdbc_query要素」を参照してください。)

<join_table>要素のname属性は、結合表の名前を指定します(この例ではpavement_condition)。この例の結合表には、id、seg_id、condition、from_measure、to_measureなどの列が含まれています。結合表の線形イベントの定義に2つのメジャー列を使用する場合は、start_measure属性およびend_measure属性(この例では、from_measureおよびto_measure)を指定する必要があります。これらは結合表のメジャー列の名前を示します。結合表に点イベントのメジャーが1つ含まれる場合、この<join_table>要素にはmeasure属性が指定されます。

<join_columns>要素には、lrs_table_column属性およびjoin_table_column属性を指定する必要があります。lrs_table_columnはLRS表からの列を定義し、join_table_columnは、これらの2つの表を結合する結合表からの列を指定します。

例2-40は、例2-39の事前定義済LRSテーマを使用するマップ・リクエストを示しています。

例2-40 事前定義済LRSテーマを含むマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
title="LRS Theme test"
datasource="mvdemo"
width="640"
height="480"
bgcolor="#a6caf0"
antialiase="true"
format="PNG_STREAM">
<center size="45">
<geoFeature>
<geometricProperty typeName="center">
<Point>
<coordinates>-95, 35</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>
<themes>
<theme name="LRS_THEME"/>
</themes>
</map_request>

関連項目:
LRSテーマに固有の要素および属性(<join_table>および<join_columns>要素など)の詳細は、付録A「スタイル、テーマ、ベース・マップおよびマップ・タイル層のためのXML形式」を参照してください。

2.3.12 テーマ・マッピング

テーマ・マッピングは、属性値に基づいた空間地物の描画を意味します。MapViewerでは、テーマ・マッピングにより、地物の属性を示すために色または記号が地物に適用されたマップが作成されます。たとえば、Countiesテーマは、各郡の人口密度に直接マップされる様々な色相の色を使用して描画できます。また、Earthquakesテーマは塗りつぶした円によって表示でき、円のサイズは各地震の規模または被害にマップされます。

テーマ・マッピングを実行するには、まずテーマ・マップのタイプに適した拡張スタイルを作成し、次にレンダリング・スタイルとして拡張スタイルを指定して、地物のテーマを作成する必要があります。テーマのスタイリング・ルールでは、表またはビューで属性列も指定する必要があります。この値は、拡張スタイルにより地物をテーマ別にレンダリングする方法を厳密に決定するために使用されます。

たとえば、各地域に使用されている色が、ある製品の売上高のレベルを反映するマップを表示するとします。このためには、個々の範囲ベースの一連のバケットを定義する拡張スタイルを作成します(A.6.1.2項を参照)。各バケットには製品売上高の値の事前定義済範囲が含まれており、バケットはレンダリング・スタイルに関連付けられています。(各地域は、売上高の値が含まれている範囲に関連付けられたスタイルを使用してレンダリングされます。)また、範囲に対してチェックされる属性値を示す列の名前も指定します。つまり、拡張スタイルは売上高の値に基づいて地域をマップする方法を定義し、テーマのスタイリング・ルールは拡張スタイルと実際の売上高の値を含む属性列を関連付けます。

図2-12は、拡張スタイルとテーマとの関係と、スタイルおよびテーマが実表とどのように関連しているかを示しています。この図では、V.SALESという拡張スタイルによって一連のバケットが定義されています。SALES_BY_REGIONという事前定義済テーマでは、そのスタイリング・ルール内でスタイルV.SALESを指定しています。また、このテーマでは、REGIONS表のSALES列を、値がスタイル内のバケット範囲と比較される列として識別します。(各バケットは、2.2.2項で説明しているように、レンダリング・スタイルに加えて、あるいはそのかわりに、ラベリング・スタイルと関連付けることができます。)

図2-12 テーマ・マッピング: 拡張スタイルとテーマの関係

MapViewerでは、図2-12で示した個々の範囲ベースのバケットに加えて、A.6.1項で説明しているその他のバケット・スタイルもサポートします。円グラフを描く場合など、テーマ・マッピングに複数の属性列を使用することもできます(3.1.1.9項を参照)。

この項の後半では、テーマ・マッピングのその他の例を示します。

例2-41は、EarthquakesテーマのXML定義です。

例2-41 Earthquakesテーマに対するスタイリング・ルールのXML定義

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="nature">
<rule column="RICHTER_SCALE">
<features style="v.earthquakes">
</features>
</rule>
</styling_rules>

例2-41のテーマには、ルールが1つのみ含まれます。<rule>要素には、例2-6のAirportテーマにはないcolumnという属性が含まれます。column属性では、テーマ・マッピングに必要な属性値を指定する1つ以上の列(カンマ区切り)が指定されます。<features>要素に指定されたスタイルは、v.earthquakesという拡張スタイルです。

Earthquakesテーマの定義のもう1つの部分では、レンダリングされるデータが含まれる表が指定されます。この表には、空間データの(SDO_GEOMETRY型の)列に加えて、RICHTER_SCALEという列も含める必要があります。(該当する表とSDO_GEOMETRY型の列はそれぞれ、USER_SDO_THEMESビューのBASE_TABLE列およびGEOMETRY_COLUMN列で指定する必要があります。USER_SDO_THEMESビューについては、2.9.2項を参照してください。)RICHTER_SCALE列はNUMBER型である必要があります。その理由については、例2-42の拡張スタイル定義を参照してください。

例2-42 Earthquakesテーマの拡張スタイル定義

<?xml version="1.0" ?>
<AdvancedStyle>
<VariableMarkerStyle basemarker="m.circle" startsize="7" increment="4">
<Buckets>
<RangedBucket seq="0"  label="less than 4"  high="4"/>
<RangedBucket seq="1"  label="4 - 5" low="4" high="5"/>
<RangedBucket seq="2"  label="5 - 6" low="5" high="6"/>
<RangedBucket seq="3"  label="6 - 7" low="6" high="7"/>
<RangedBucket seq="4"  label="7 and up" low="7"/>
</Buckets>
</VariableMarkerStyle>
</AdvancedStyle>

このスタイルでは、m.circleというマーカーを使用して地震の場所を示すように指定されています。地震についてレンダリングされるマーカーのサイズは、その行のRICHTER_SCALE列の数値によって左右されます。この例では5つのバケットがあり、それぞれが事前に決定された値の範囲に相当します。たとえば、地震がリヒター・スケールでマグニチュード5.7である場合、マーカー・サイズは15ピクセル(7 + 4 + 4)となります。これは、5.7という値が3つ目のバケット(5 - 6)に分類され、開始マーカー・サイズが7ピクセル(startsize="7")であり、各範囲の増分が4 (increment="4")であるためです。

注意:
label属性値(label="less than 4"など)はマップに表示されず、拡張スタイル用にコンパイルされたラベルにのみ使用されます。
seq属性値(seq="0"など)はMapViewerにより無視されます。MapViewerでは、定義内の要素の順序によってのみ順序が決まります。

例2-42では、<VariableMarkerStyle>タグを使用しました。次の各例では、カリフォルニアにおける国勢調査区画のテーマ・マッピングの作成で、<ColorSchemeStyle>タグが使用されています。例2-43では、人口密度のテーマ・マッピングに目盛付きカラー・スケールを使用しています。例2-44は、目盛付きカラー・スケールを使用した平均世帯収入のテーマ・マッピングです。例2-45も平均世帯収入のテーマ・マッピングですが、各収入範囲に、目盛付きスケールではなく固有の色スタイルが使用されています。

例2-43 目盛付きカラー・スキームを使用した人口密度のマッピング

# ca pop density usbg_hhinfo
<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="political">
<rule column="densitycy">
<features style="v.CA Pop density">
</features>
</rule>
</styling_rules>

USBG_HHINFOという表には、DENSITYCYという列(例2-43で使用)が含まれています。この人口密度テーマに対応するスタイル(v.CA Pop density)の定義は、次のとおりです。

<?xml version="1.0" ?>
<AdvancedStyle>
<ColorSchemeStyle basecolor="#ffff00" strokecolor="#00aaaa">
<Buckets low="0.0" high="20000.0" nbuckets="10"/>
</ColorSchemeStyle>
</AdvancedStyle>

基本色(basecolor)およびストロークの色(strokecolor)は、16進法を使用して指定された24ビットRGB(赤-緑-青)値です。基本色の値は、1つ目のバケットに使用されます。後続の各バケットの色値は、最初に基本色をRGBからHSB(色相-彩度-輝度)モデルに変換してから、輝度を各バケットの固定増分ずつ下げることで取得されます。したがって、1つ目のバケットの輝度が最も高くなり、最後のバケットの輝度が最も低くなります。

例2-44では、例2-43と同様に基本色および目盛付きカラー・スキームを使用していますが、今回は世帯収入を示すことが目的です。

例2-44 目盛付きカラー・スキームを使用した平均世帯収入のマッピング

<?xml version="1.0" standalone="yes"?>
<!-- # ca hh income theme  table = usbg_hhinfo  -->
<styling_rules>
<rule column="avghhicy">
<features style="v.ca income">
</features>
</rule>
</styling_rules>

USBG_HHINFOという表には、AVGHHICYという列(例2-44および例2-45で使用)が含まれています。この平均世帯収入テーマに対応するスタイル(v.ca income)の定義は、次のとおりです。

<?xml version="1.0" ?>
<AdvancedStyle>
<ColorSchemeStyle basecolor="#ffff00" strokecolor="#00aaaa">
<!-- # income range with a color gradient -->
<Buckets>
<RangedBucket seq="0" label="less than 10k"  high="10000"/>
<RangedBucket seq="1" label="10-15k" low="10000" high="15000"/>
<RangedBucket seq="2" label="15-20k" low="15000" high="20000"/>
<RangedBucket seq="3" label="20-25k" low="20000" high="25000"/>
<RangedBucket seq="4" label="25-35k" low="25000" high="35000"/>
<RangedBucket seq="5" label="35-50k" low="35000" high="50000"/>
<RangedBucket seq="6" label="50-75k" low="50000" high="75000"/>
<RangedBucket seq="7" label="75-100k" low="75000" high="100000"/>
<RangedBucket seq="8" label="100-125k" low="100000" high="125000"/>
<RangedBucket seq="9" label="125-150k" low="125000" high="150000"/>
<RangedBucket seq="10" label="150-250k" low="150000" high="250000"/>
<RangedBucket seq="11" label="250-500k" low="250000" high="500000"/>
<RangedBucket seq="12" label="500k and up"   low="500000"/>
</Buckets>
</ColorSchemeStyle>
</AdvancedStyle>

個々の範囲ベースのバケットでは、下限値は含まれますが上限値は含まれません(ただし、他の範囲の値より大きい値が含まれる範囲では、上限値は含まれます)。いずれの範囲にも、他の範囲の値と重複する値の範囲を含めることはできません。

例2-45では、各平均世帯収入範囲に固有の色スタイルが使用されています。

例2-45 各収入範囲の色を使用した平均世帯収入のマッピング

<?xml version="1.0" standalone="yes"?>
<!-- # ca hh income theme  table = usbg_hhinfo  -->
<styling_rules>
<rule column="avghhicy">
<features style="v.ca income 2">
</features>
</rule>
</styling_rules>

v.ca income 2スタイルの定義は、次のとおりです。

<?xml version="1.0" ?>
<AdvancedStyle>
<BucketStyle>
<Buckets>
<!-- # income ranges with specific colors -->
<RangedBucket seq="0" label="less than 10k"  high="10000" style="c.rb13_1"/>
<RangedBucket seq="1" label="10-15k" low="10000" high="15000" style="c.rb13_2"/>
<RangedBucket seq="2" label="15-20k" low="15000" high="20000" style="c.rb13_3"/>
<RangedBucket seq="3" label="20-25k" low="20000" high="25000" style="c.rb13_4"/>
<RangedBucket seq="4" label="25-35k" low="25000" high="35000" style="c.rb13_5"/>
<RangedBucket seq="5" label="35-50k" low="35000" high="50000" style="c.rb13_6"/>
<RangedBucket seq="6" label="50-75k" low="50000" high="75000" style="c.rb13_7"/>
<RangedBucket seq="7" label="75-100k" low="75000" high="100000" style="c.rb13_8"/>
<RangedBucket seq="8" label="100-125k" low="100000" high="125000" style="c.rb13_9"/>
<RangedBucket seq="9" label="125-150k" low="125000" high="150000" style="c.rb13_10"/>
<RangedBucket seq="10" label="150-250k" low="150000" high="250000" style="c.rb13_11"/>
<RangedBucket seq="11" label="250-350k" low="250000" high="350000" style="c.rb13_12"/>
<RangedBucket seq="12" label="350k and up"   low="350000" style="c.rb13_13"/>
</Buckets>
</BucketStyle>
</AdvancedStyle>

<RangedBucket>の各定義には、スタイルが指定されています。

次の各例では、様々な石油会社が経営するガソリン・スタンドを識別するための拡張スタイルと、このスタイルを使用したテーマを作成しています。例2-46では、<CollectionBucket>タグを使用して、列値(Shell、Esso、Texaco、BP、およびAvia、Benzinex、Q8、Total、Witte Pompのいずれかと、その他すべてのデフォルト・カテゴリ)をその会社のガソリン・スタンドに適したスタイルに関連付けます。

例2-46 Gasoline Stationsテーマの拡張スタイル定義

<?xml version="1.0" ?>
<AdvancedStyle>
<BucketStyle>
<Buckets>
<CollectionBucket seq="0" label="Shell" style="m.shell gasstation">
Shell
</CollectionBucket>
<CollectionBucket seq="1" label="Esso" style="m.esso gasstation">
Esso
</CollectionBucket>
<CollectionBucket seq="2" label="Texaco"  style="m.texaco gasstation">
Texaco
</CollectionBucket>
<CollectionBucket seq="3" label="BP"  style="m.bp gasstation">
BP
</CollectionBucket>
<CollectionBucket seq="4" label="Other"  style="m.generic gasstation">
Avia,Benzinex,Q8,Total,Witte Pomp
</CollectionBucket>
<CollectionBucket seq="5" label="DEFAULT" style="m.default gasstation">
#DEFAULT#
</CollectionBucket>
</Buckets>
</BucketStyle>
</AdvancedStyle>

例2-46に関する注意は、次のとおりです。

- m.esso gasstation、m.texaco gasstationおよびその他のスタイル名は、名前の単語間にスペースがあります。

- 表の名前は大/小文字が区別されません。したがって、名前を区別する手段として大/小文字を使用しないでください。たとえば、m.esso gasstationとM.ESSO GASSTATIONは同じ名前とみなされます。

- デフォルト・コレクション・バケットは、バケットの値として#DEFAULT#を使用することで指定できます。このバケットは、他のバケットで指定されていない列値(ガソリン・スタンド名)に使用します。

次に、会社名が含まれる表内の列(MERK)を指定するテーマ(theme_gasstation)が定義されます。例2-47では、このテーマのスタイリング・ルールを示します。

例2-47 Gasoline Stationsのテーマ定義のスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule column="merk">
<features style="v.gasstations">
</features>
<label column="merk" style="t.SansSerif red 10">
1
</label>
</rule>
</styling_rules>

このテーマは、表2-2に示す列が含まれるNED_GASSTATIONS表に依存しています(開発者の言語がオランダ語であることを反映した列名となっています)。

表2-2 Gasoline Stationsテーマで使用される表

列

データ型

FID

NOT NULL NUMBER

ID

NUMBER

NAAM

VARCHAR2(31)

STRAAT_

VARCHAR2(30)

NR

NUMBER

TV

VARCHAR2(1)

AAND

VARCHAR2(2)

PCODE

VARCHAR2(6)

PLAATS

VARCHAR2(10)

GEOM

SDO_GEOMETRY

MERK

VARCHAR2(40)

この表では、GEOM列には空間ジオメトリが含まれ、MERK列には会社名(Shell、Essoなど)が含まれます。

theme_gasstationテーマのスタイリング・ルールでは、GEOM列の内容により指定された場所のマーカー(v.gasstationsスタイル)が、その行のMERK列の値によって決定されるように指定しています。スタイルv.gasstations(例2-46を参照)では、列値がShellの場合はスタイルm.shell gasstationを使用し、列値がEssoの場合はスタイルm.esso gasstationを使用する、などのように指定しています。また、列値がAvia、Benzinex、Q8、TotalおよびWitte Pompのいずれかの場合はスタイルm.generic gasstationを使用し、列値が前述のいずれでもない場合はスタイルm.default gasstationを使用するように指定しています。

2.3.12.1 外部属性データを使用したテーマ・マッピング

先に説明したテーマ・マッピングでは、属性データ(総売上高の母集団など)も地理空間データ(境界線や位置などを表すジオメトリ・オブジェクト)も同じデータベース内にあることが前提でした。ただし、属性データは、現在のデータベースの外部にあるソースから得られる場合もあります。たとえば、別のデータベース上で実行されるビジネス・インテリジェンス(BI)問合せの集約結果が反映されることもあれば、スプレッドシートからエクスポートされた売上高値のカンマ区切りリストから得られることもあります。そのような属性データ、つまり地理空間データが含まれるデータベースの外部から得られる属性データは、外部属性データと呼ばれています。

MapViewerで外部属性データを使用するには、非空間データ・プロバイダ・プラグイン・メカニズムを使用する必要があります。このメカニズムでは、カスタム・データ・プロバイダが、同一のマップ・リクエスト内でMapViewerテーマ(事前定義済または動的)と関連付けられます。MapViewerは、該当するテーマを処理する際、非空間データ・プロバイダをコールし、該当するテーマのためにフェッチされている空間データと非空間属性データを結合します。

非空間データ・プロバイダを使用するには、次の手順を実行します。

1. MapViewerの定義済インタフェースoracle.mapviewer.share.ext.NSDataProviderを実装することにより、Java非空間データ・プロバイダを実装します。

2. (構成ファイル内で)非空間データ・プロバイダの実装をMapViewerに登録します。その場合、実装で依存する可能性がある一連のグローバル・パラメータを指定することもできます。カスタム・データ・プロバイダの各実装クラスには、一意のIDを割り当てる必要があります。

3. 非空間データ・プロバイダの実装クラスが含まれるライブラリを、MapViewerのライブラリ・パス(MapViewerのweb/WEB-INF/libディレクトリなど)に入れます。

4. 次のメソッドをMapViewer JavaクライアントAPIクラスMapViewer上で起動し、非空間データ・プロバイダの実装をmapリクエストに含めます。

addNSDataProvider(java.lang.String providerId,
java.lang.String forTheme,
java.lang.String spatialKeyColumn,
java.lang.String customRenderingStyle,
java.util.Properties params,
long timeout)

addNSDataProviderのパラメータについては、MapViewerに関するJavadocリファレンス情報を参照してください。この情報は、http://host:port/mapviewer/mapclientという形式のURLで入手できます。ここで、hostおよびportは、Oracle Fusion Middlewareが着信リクエストをリスニングする場所です。たとえば、http://www.mycorp.com:8888/mapviewer/mapclientです。

例2-48は、単純な非空間データ・プロバイダの実装を示しています。この実装は、デフォルトの非空間データ・プロバイダとしてMapViewerにも提供されます。

例2-48 非空間(外部)データ・プロバイダの実装

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Properties;
import java.util.Vector;

import oracle.mapviewer.share.ext.NSDataSet;
import oracle.mapviewer.share.ext.NSDataProvider;
import oracle.mapviewer.share.ext.NSRow;
import oracle.lbs.util.Logger;

import oracle.mapviewer.share.Field;

/**
* A simple implementation of the NSDataProvider interface. When invoked, it supplies tabular attribute data to MapViewer out
* of a file or URL. The data in the file must be orgazined as following: <br>
* <UL>
*   <LI> The first line contain a single character which is the delimiter
*        between columns in the subsequent lines.
*   <LI> Each line after the first in the file represent one data row
*   <LI> Each field in the row must be separated by the delimiter char only
*   <LI> The first field in each line must be a string (key) that serves as the
*         key; the rest of the fields must be numeric values
* </UL>
*
* When incorporating this data provider in a map request, one of the following
* two parameters must be specified:
* <UL>
*   <LI> file  if the custom data is stored in a local file; this parameter
*        specifies the full path to that file
*   <LI> url  if the custom data can be accessed from a web; this parameter
*        specifeis the full URL to the data file.
* </UL>
*
*
*/
public class NSDataProviderDefault implements NSDataProvider
{
private static Logger log = Logger.getLogger("oracle.sdovis.nsdpDefault");

public boolean init(Properties params)
{
return true;
}

public NSDataSet buildDataSet(Properties params)
{
String file = params.getProperty("file");
if(file!=null)
return readFromFile(file);

String url = params.getProperty("url");
if(url!=null)
return readFromUrl(url);

log.error("Must supply either file or url for default NS data provider.");
return null;
}

public void destroy()
{
}

protected NSDataSet readFromFile(String file)
{
BufferedReader in = null;
try{
in   = new BufferedReader(new FileReader(file));
String line = in.readLine();
String delimiter = line.substring(0,1);

Vector rows = new Vector();

while ( (line=in.readLine()) != null)
{
NSRow row = buildRow(line, delimiter);
if(row!=null)
rows.add(row);
}

NSDataSet res = new NSDataSet(rows);
return res;
}catch(Exception ex)
{
log.error(ex);
return null;
} finally
{
try{
if(in!=null)
in.close();
}catch(Exception e){}
}
}

protected NSDataSet readFromUrl(String url)
{
log.error("url not supported yet.");
return null;
}

protected NSRow buildRow(String line, String delimiter)
{
if(line==null || line.length()<1)
return null;

String[] fields = line.split(delimiter);
if(fields==null || fields.length==0)
return null;

Field[] row = new Field[fields.length];

Field a = new Field(fields[0]);
a.setKey(true);

row[0] = a;

for (int i = 1; i < fields.length; i++)
{
try{
double d = Double.parseDouble(fields[i]);
a = new Field(d);
row[i] = a;
}catch(Exception e)
{
log.warn("invalid row field (key="+fields[0]+")");
return null;
}
}

return new NSRow(row);

}
}

2.3.13 テーマの外観に影響を与える属性

<theme>要素の一部の属性は、テーマに関連付けられるデータを決定するかわりに、マップ表示の外観にのみ影響を与えます。これらの外観関連の属性は、マップの生成時にテーマの処理およびレンダリングを行うかどうか、またその方法を制御します。例には次の属性が含まれています。

- min_scaleおよびmax_scaleは、テーマを様々なマップ・スケール(解像度のレベル)で表示するかどうかを決定します。たとえば街路のマップを表示する場合、州全体を表示するときなど、街路の表示が密集しすぎるため使用しづらいマップ・スケールがあります。このような場合は街路用のテーマを作成し、スケールが適切なときにはテーマの影響を受ける個々の街路が表示され、適切でないときには表示されないように、最小および最大のスケール値を指定します。

- labels_always_onは、テーマのラベルが別のラベルと重なる場合に表示するかどうかを決定します。適切なlabels_always_on値を選択し、マップ・リクエスト内で処理されるテーマの適切な順序を選択することで、ラベルの重複の度合いと、どのラベルを優先的に表示するかを制御できます。

- fast_unpickleは、使用する非Pickle化(アンストリーム)の方法を決定します。表示のパフォーマンスと精度のどちらを優先するかの選択となる場合があります。

- fixed_svglabel、visible_in_svg、selectable_in_svg、onclick、onmousemove、onmouseoverおよびonmouseoutは、SVGマップの外観に影響を与えます。

外観関連の属性を指定するには、<theme>要素(3.1.2.20項を参照)をXML APIまたはJavaBeanベースのAPI(特に4.3項を参照)で使用します。

2.4 マップ

マップは、次のような要素および属性の組合せで構成できます。

- バックグラウンド・イメージ

- タイトル

- 凡例

- 問合せウィンドウ

- 脚注(著作権表示など)

- ベース・マップ

- 事前定義済テーマ(ベース・マップ内のテーマに追加)

- JDBCテーマ(動的問合せを含む)

- 動的に定義される(一時)スタイル

これらの要素および属性をマップ・リクエストで指定した場合、生成されるマップの内容と外観が定義されます。マップ・リクエストで使用可能な要素および属性の詳細は、第3章を参照してください。

マップには、ベース・マップと、ウィンドウ内で相互に積み上げてレンダリングした多数のテーマを含めることができます。マップには、マップ内のすべてのテーマで共有する必要がある、関連付けられた座標系が含まれます。たとえば、マップ座標系が8307(経度/緯度(WGS 84)に相当、GPSデバイスで使用される最も一般的な座標系)の場合、マップ内のすべてのテーマにこの座標系を使用して定義されたジオメトリが必要です。

マップにテーマを追加するには、ベース・マップ名を指定するか、プログラム・インタフェースを使用してテーマを追加します。テーマが追加される順序によりテーマのレンダリングの順序が決まり、最後に指定されたテーマが最上部に配置されるため、バックグラウンドおよびフォアグラウンドに必要なテーマを必ず把握しておいてください。

データベース・ユーザーのすべてのベース・マップ名および定義は、そのユーザーのUSER_SDO_MAPSビューに格納されます。このビューについては、2.9項および2.9.3項を参照してください。USER_SDO_MAPSビューのDEFINITION列には、ベース・マップのXML定義が含まれます。

例2-49では、ベース・マップの定義を示しています。

例2-49 ベース・マップのXML定義

<?xml version="1.0" ?>
<map_definition>
<theme name="theme_us_states"    min_scale="10"  max_scale="0"/>
<theme name="theme_us_parks"     min_scale="5"   max_scale="0"/>
<theme name="theme_us_highways"  min_scale="5"   max_scale="0"/>
<theme name="theme_us_streets"   min_scale="0.05" max_scale="0"/>
</map_definition>

ベース・マップ内の各テーマは、このテーマの表示範囲である参照可能なスケール範囲に関連付けることができます。例2-49では、マップ・リクエストが0.05以下で0より大きいマップ・スケール(この場合、非常に細かな詳細を示すスケール)に対するものでないかぎり、theme_us_streetsというテーマは表示されません。min_scale属性およびmax_scale属性が指定されていない場合、ベース・マップを表示すると常にテーマが表示されます。(マップ・スケールの詳細は、2.4.1項を参照してください。)

ベース・マップ内のテーマの表示順序は、ベース・マップ定義でのテーマの順序と同じです。例2-49では、最初にtheme_us_statesテーマ、次にtheme_us_parks、theme_us_highways、最後に(マップ・スケールがすべての指定範囲内である場合)theme_us_streetsがレンダリングされます。

この項の主な内容は次のとおりです。

- 第2.4.1項「マップのサイズおよびスケール」

- 第2.4.2項「マップ凡例」

2.4.1 マップのサイズおよびスケール

マップ・サイズは、マップ・データ領域の単位で表したマップの高さです。たとえば、マップ・データがWGS 84地理座標内にあり、マップの中心が(-120.5, 36.5)でサイズが2の場合、マップの高さは2度(10進)、Y(緯度)の下限値は35.5度(10進)、上限値は37.5度(10進)です。

マップ・スケールは、画面またはデバイス上の1インチで表される、ユーザーのデータ領域内の単位数で表されます。MapViewerのマップ・スケールは、マップ・スケールの一般的な表現方法である1/nの分母値です。この場合の意味は次のとおりです。

- 分子の1は、表示されたマップ上の1単位(MapViewerでは1インチ)です。

- 分母のnは、表示されたマップ上の1単位(MapViewerでは1インチ)で表される測定単位(度(10進)、メートル、マイルなど)の数値です。

次に例を示します。

- コンピュータ・ディスプレイ上の1インチがユーザー・データの0.5度(10進)に相当する場合、分数は1/0.5となります。この分数の10進値は2.0ですが、MapViewerのスケール値は0.5です。

- コンピュータ・ディスプレイ上の1インチがユーザー・データの2マイルに相当する場合、分数は1/2となります。この分数の10進値は0.5ですが、MapViewerのスケール値は2です。

- コンピュータ・ディスプレイ上の1インチがユーザー・データの10マイルに相当する場合、分数は1/10となります。この分数の10進値は0.1ですが、MapViewerのスケール値は10です。

<theme>要素のmin_scale属性およびmax_scale属性は、テーマの参照可能なスケール範囲を示します。これらの属性は、現在のマップ・スケールに応じて、テーマが表示されるかどうかを制御します。min_scaleのデフォルトのスケール値は正の無限大であり、max_scaleのデフォルト値は負の無限大です(つまり、デフォルトではすべてのマップ・スケールにおいてテーマが表示され、可能な場合は表示特性が割り当てられます)。

- min_scaleは、テーマを表示するためにこの値まで表示をズームインする必要のあるスケール値です。たとえば、公園のmin_scale値が5であり、現在のマップ・スケール値が5以下で、しかもmax_scale値より大きい場合、公園は表示に含まれます。ただし、表示をズームアウトしてマップ・スケール値が5より大きくなると、公園は表示に含まれません。

- max_scaleは、テーマが表示されないようにするためにこの値を超えるまで表示をズームインする必要のあるスケール値です。たとえば、郡のmax_scale値が3であり、現在のマップ・スケール値が3以下である場合、郡は表示に含まれません。ただし、表示をズームアウトしてマップ・スケール値が3より大きくなると、郡は表示に含まれます。

min_scaleの大きな値は、大まかなマップ詳細と、地図製作における小さいスケールに関連付けられており、max_scaleの大きな値は、細かいマップ詳細と、地図製作における大きいスケールに関連付けられています。(MapViewerでのマップ・スケールの意味は、地図製作のマップ・スケールにおける一般的な意味とは異なる点に注意してください。)テーマのmin_scale値は、max_scale値より大きくする必要があります。2.4項の例2-49には、min_scale値とmax_scale値が含まれています。

ベース・テーマ・スケールと異なる値を持つラベルの表示または非表示を有効にするには、テーマ・ラベル・スケールのパラメータであるlabel_min_scaleおよびlabel_max_scaleを使用して、テーマ・ラベルのスケール値も割り当てます。これらのパラメータはmin_scaleおよびmax_scaleパラメータと似ていますが、ラベルはマップ・スケールがlabel_min_scaleとlabel_max_scaleで定義された表示可能な範囲内にある場合に表示されます。(min_scaleおよびmax_scaleで定義された参照可能なスケール範囲内にテーマがない場合、ラベル・スケール値は無視されます。)次に示すのは、ラベル・スケール値が指定されているテーマ定義です。この場合、ラベルはマップ・スケールが5と2の間であるときに表示されますが、テーマ地物はマップ・スケールが10と0の間であるときに表示されます。

<theme name="theme_us_states" min_scale="10" max_scale="0"
label_min_scale="5" label_max_scale="2"/>

MapViewerによって返されるマップの現在のマップ・スケールを決定するには、まずマップ・サイズ、つまりマップ・データに関連付けられた座標系におけるマップの高さ(垂直範囲)を調べます。たとえば、高さが10(マイル、メートル、度(10進)など、データに関連付けられた測定単位)のマップがリクエストされ、サイズが500×350ピクセル(350が高さ)のデバイスにマップが描画されるとします。MapViewerでは、一般的な画面解像度として96dpiが使用されます。96ピクセルは1インチであるため、返されるマップの高さは3.646インチ(350/96 = 3.646)です。この例では、マップのサイズは10であるため、マップ・スケールはおよそ2.743 (10/3.646 = 2.743)となります。

また、scale_modeテーマ属性値をratioとして指定すれば、単位を指定することなく、1:50000のスケールを表す50000のようなマップ・スケール値を使用してマップをリクエストできます。(scale_modeテーマ属性値がscreen_inchの場合、スケールは単位を表します。)単位なしで定義されているスケールを使用するには、中心および比率スケールを指定してマップをリクエストします。

比率スケールに相当するMapViewerの画面インチ・スケールを見つけるには、次の手順を実行します。

1. 1画面ピクセルが何メートルに相当するのかを求めます。たとえば、画面解像度が96dpi(dots per inch)の場合、1画面ピクセルは画面上で0.000265(= 0.0254/96)メートルに相当します。

2. 次のようにして、1画面ピクセルのマップ・スケール(mapdotScaleの値)を求めます。

- 投影データ(メートル)の場合は、ステップ1の結果に比率スケールを掛けます。たとえば、比率スケールが50000で画面解像度が96dpiの場合、結果は1ピクセル当たり13.25(= 50000 * 0.000265)メートルになります。

- 測地データ(度)の場合は、ステップ1の結果に1度当たりのメートル数(地球の表面上)を掛けます。(この数値は、データに関連付けられている座標系によって異なります。)たとえば、1度が111195メートルで、画面解像度が96dpiの場合、結果は1ピクセル当たり29.466675(= 111195 * 0.000265)メートルになります。

- 他の単位を使用するデータの場合は、メートルを使用する投影データのアプローチを使用します。

3. MapViewerのスケールは画面ピクセル単位ではなく画面インチ単位なので、ステップ2の結果にdpi値を掛けます。たとえば、ステップ2の結果が13.25メートル(96dpi時)の場合、1画面インチは1272(= 13.25 * 96)メートルになります。

2.4.2 マップ凡例

マップ凡例は、マップの上に描画される挿入図であり、様々な色、記号、線、パターンなどが表す内容を説明したものです。凡例の内容および外観を柔軟に指定できます。次のことが可能です。

- バックグラウンド、枠線スタイルおよびフォントのカスタマイズ

- 凡例における1つ以上の列の使用

- 凡例エントリを区切る空白の追加

- 凡例エントリのインデント

- 拡張スタイルを含む任意のMapViewerスタイルの使用

例2-50は、凡例を含むリクエストからの抜粋です。

例2-50 マップ・リクエストに含まれる凡例

<?xml version="1.0" standalone="yes"?>
<map_request
basemap="density_map"
datasource = "mvdemo"
width="640"
height="480"
bgcolor="#a6cae0"
antialiase="false"
format="PNG_STREAM">
<center size="4.2">
<geoFeature render_style="m.image134_bw">
<geometricProperty typeName="center">
<Point srsName="SDO:8307">
<coordinates>-121.2615, 37.5266</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>

<legend bgstyle="fill:#ffffff;fill-opacity:100;stroke:#a3a3a3" profile="MEDIUM" position="SOUTH_WEST">
<column>
<entry text="Legend" is_title="true" />
<entry style="M.IMAGE134_BW" text="Center" />
<entry style="M.ALL_CITY_L2" text="Cities" />
<entry is_separator="true" />
<entry style="L.S04_ROAD_INTERSTATE" text="Interstates" />
<entry text="County population:" />
<entry style="V.COUNTY_POP_DENSITY_8" tab="1" />
</column>
</legend>

<!--
<themes>

</themes>
-->

</map_request>

図2-13は、例2-50で指定した凡例を含むマップを示しています。

図2-13 凡例付きのマップ

例2-50および図2-13に関する注意は次のとおりです。

- この例は、単一列を使用した凡例を示していますが、凡例には複数の列を作成できます。

- 列定義内の各エントリでは、ラベル・テキストおよびそのテキストが凡例のタイトルである(is_title="true")かどうか、スタイル名および関連テキスト、または垂直余白を追加(この例ではcitiesエントリの後)するためのセパレータ(is_separator="true")を識別できます。

1つ以上の<column>要素に凡例のコンテンツを指定するかわりに、マップ・リクエストに基づく自動凡例をリクエストできます。自動凡例を使用し、凡例のヘッダーを指定すると、マップ領域と相互作用するテーマに基づいた凡例がMapViewerで生成されます。マップ・リクエストおよびベース・マップの各テーマが考慮されます。(ただし、テーマが問合せウィンドウと相互作用するが、マップ上に表示される地物がそのテーマに含まれていない場合など、凡例の項目によっては表示されないものもあります。)

例2-51は、(<legend>要素に<column>要素が含まれていないため)自動凡例をリクエストするマップ・リクエストです。

例2-51 自動凡例に関するマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
title="Automatic legend"
datasource = "mvdemo"
width="640"
height="480"
bgcolor="#a6cae0"
antialiase="false"
format="PNG_STREAM">
<center size="4.5">
<geoFeature >
<geometricProperty typeName="center">
<Point>
<coordinates>-122.2615, 37.5266</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>

<themes>
<theme name="THEME_COUNTIES_3397829" />
<theme name="THEME_US_ROAD1" />
<theme name="THEME_US_AIRPORT" />
</themes>

<legend bgstyle="fill:#ffffff;fill-opacity:128;stroke:#ff0000;stroke-opacity:128" profile="medium" font="Courier">
</legend>

</map_request>

例2-52に示す自動凡例のリクエストでは、<legend>要素で、凡例項目の生成に使用するテーマが指定されています。この例では、マップの結果に多くのテーマが表示された場合でも、凡例項目は、<legend>要素に指定されたTHEME_COUNTIES_3397829テーマおよびTHEME_US_AIRPORTテーマに基づきます。

例2-52 テーマが指定された自動凡例

<map_request
title="Legend with themes defined"
datasource = "mvdemo"
width="640"
height="480"
bgcolor="#a6cae0"
antialiase="false"
format="PNG_STREAM">
<center size="4.5">
<geoFeature >
<geometricProperty typeName="center">
<Point>
<coordinates>-122.2615, 37.5266</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>

<themes>
<theme name="THEME_COUNTIES_3397829" />
<theme name="THEME_US_ROAD1" />
<theme name="THEME_US_AIRPORT" />
</themes>

<legend bgstyle="fill:#ffffff;fill-opacity:128;stroke:#ff0000;stroke-opacity:128" profile="medium" font="Courier">
<themes>
<theme name="THEME_COUNTIES_3397829" />
<theme name="THEME_US_AIRPORT" />
</themes>
</legend>

</map_request>

自動凡例については、<column>要素は使用できません。<legend>要素に<column>要素が含まれている場合、列/エントリの凡例が作成されます。

MapViewerでは、自動凡例項目の作成時に、次の注意事項があります。

- 各凡例列のエントリは最大で5つです(拡張スタイルは1つのエントリとみなされます)。

- 単純なレンダリング・スタイルの凡例テキストは、テーマの説明(定義されている場合)またはテーマ名から取得されます。

- 複数のテーマで使用されているレンダリング・スタイルは、凡例で繰り返されますが、適用されるテーマに関連するテキストも付加されます。

- ラベリング・スタイルは凡例では繰り返されません。ラベリング・スタイルのスタイル・テキストは、スタイルの説明から取得されます。

- 拡張スタイルは凡例では繰り返されません。

マップ・リクエストへの凡例の追加の詳細は、3.1.2.11項を参照してください。

さらに、マップ・タイトル、注釈またはロゴ(あるいはその組合せ)を指定する場合は、凡例およびその他の地物の位置が異なるようにしてください。(マップ・タイトル、注釈およびロゴについては、1.6.2.5項を参照してください。)凡例のデフォルト位置はSOUTH_WESTです。

2.5 データ・ソース

データソースは、データベースのスキーマまたはユーザーに対応します。データベース・スキーマ内で空間データを描画するには、まずそのスキーマ用のデータソースを永続的または動的に定義(作成)する必要があります。

- MapViewer構成ファイル(mapViewerConfig.xml)で接続情報およびユーザー・ログイン資格証明を指定すると、データソースを永続的に定義できます。

- MapViewer管理(Admin)ページを使用すると、データソースを動的に定義または変更できます。

各マップ・リクエストでは、マスター・データソースを指定する必要があります。ただし、マップ・リクエストに追加された個々のテーマには異なるデータソースを指定できます。これにより、異なるデータベース・スキーマに格納されているデータの集約が容易になります。データソースが指定されていないテーマは、マスター・データソースに関連付けられます。ベース・マップ(したがって、それに含まれるテーマ)は、常にマスター・データソースに関連付けられます。テーマを処理する際、定義で参照されるスタイルと同様に、基礎となるデータはすべてそのテーマに関連付けられたデータソースからアクセス可能であることが必要です。

各データソースには、関連付けられたレンダラ(マッパーまたはマップ・メーカーとも呼ばれる)があります。その数は、<map_data_source>要素のnumber_of_mappers属性で定義されています。この属性(第1.6.2.15項を参照)は、マップ・リクエストの処理時に、データソースごとに作成されるデータベース接続数に影響を与えます。データソースで指定されたレンダラの数は、そのデータソースに対して処理可能な同時リクエストの最大数でもあります。各追加レンダラに必要なメモリーの量はわずかですが、多数(100など)のレンダラを指定すると、処理が認められたマップ・リクエスト数が多すぎる場合に基礎となるCPUリソースに負荷がかかり、MapViewerサーバー全体のパフォーマンスに影響を及ぼすという不都合が生じる可能性があります。

各データソースには、独自の内部メタデータ・キャッシュがあります。メタデータ・キャッシュには、そのデータソースから作成されたすべての事前定義済テーマやアクセス済の全スタイルの定義が保持されています。これにより、必要なときにスタイルや事前定義済テーマを繰り返しデータベースに問い合せる必要がなくなります。

関連項目:

- カタログ・データ・ソース

2.5.1 カタログ・データ・ソース

カタログ・データ・ソースは、すべてのデータをローカル・ファイルから取得します。データ・ファイルが保存されているローカル・ディレクトリは、mapViewerConfig.xmlファイルが保存されている場所を基準とします。別の観点から考えると、カタログ・データ・ソースにはOracleデータベースが必要ないことになります。これは、必要なデータのすべて(空間ジオメトリ・データとその属性、およびスタイルやテーマなど、空間データをレンダリングする方法についてのメタデータ)が、ローカル・ファイルに保存されているためです。

カタログ・データ・ソースを作成および使用するための一般的な手順は、次のとおりです。

1. Oracleデータベースからの必要なメタデータのエクスポート

2. 必要な空間表のエクスポート

3. カタログ・データ・ソースを追加するためのMapViewer構成ファイルの編集

4. MapViewerサーバーの再起動

2.5.1.1 Oracleデータベースからの必要なメタデータのエクスポート

カタログ・データ・ソースを作成する前に、Map Builderを使用して、USER_SDO_CACHED_MAPS.xmlファイル、USER_SDO_THEMES.xmlファイル、およびUSER_SDO_STYLES.xmlファイルをエクスポートする必要があります。適用される考慮点は次のとおりです。

- カタログ・データ・ソースでは、外部タイル・レイヤーのみがサポートされます。そのため、USER_SDO_CACHED_MAPS.xmlにエクスポートしたタイル・レイヤーは、Bing MapsやOracle eLocationマップ・サービスなどの外部タイル・レイヤーであることが必要になります。

- USER_SDO_THEMES.xmlで必要になるすべてのスタイルが、USER_SDO_STYLES.xmlファイルにエクスポートされている必要があります。

- エクスポートしたすべてのテーマで使用する必須の空間データ表のすべて(空間データをフェッチしたテーマの実表)をメモしておいて、それぞれの実表をGeoJSONファイル(「必要な空間表のエクスポート」を参照)にエクスポートできるようにする必要があります。

1. Map Builderユーティリティで、「ツール」、「メタデータをXMLにエクスポート」の順に選択します。

2. メタデータを保存するための一時ディレクトリを選択します。

3. 表名のデフォルトの接頭辞(USER_SDO_)をそのまま使用します。

4. エクスポートするタイル・レイヤー、テーマ、およびスタイルを選択します。(目的のテーマに必要なスタイルが不明確な場合は、すべてのスタイルをエクスポートしてください)。

5. 「OK」をクリックして、エクスポート操作を実行します。
指定したディレクトリにUSER_SDO_CACHED_MAPS.xmlファイル、USER_SDO_THEMES.xmlファイル、およびUSER_SDO_STYLES.xmlファイルが作成されます。

2.5.1.2 必要な空間表のエクスポート

カタログ・データ・ソースの場合、空間データのセットはGeoJSONファイルに保存されています。1つのGeoJSONファイルは、データベース内の1つの空間表に対応します。空間表をエクスポートする場合は、MapViewerサーバーにリクエストを送信します。

たとえば、OBIEE_COUNTRYという空間表がUSER_SDO_THEMES.xmlファイル内のカタログ・データ・ソースのテーマで必要な場合は、この空間表を1つのGeoJSONファイルとしてエクスポートする必要があります(このテーマは、OBIEE_COUNTRYと呼ばれることがあると仮定します)。慣例として、これには空間表の名前と同じ名前を付けてください。この場合は、OBIEE_CONTRY.jsonという名前を付けます。

1. USER_SDO_THEMES.xmlファイルのテーマの定義を確認します。たとえば、OBIEE_COUNTRYという名前のテーマがOBIEE_COUNTRY空間表を使用している場合は、その空間表をエクスポートする必要があります。表の列と予測される名前は特定されている必要があり、列名はテーマ定義のname属性と同じになります。次の例では、ISO_COUNTRY_CODE列がCountry Codeとしてマップされています。

<theme>
<name>OBIEE_COUNTRY</name>
<description><![CDATA[OBIEE Country]]></description>
<base_table>OBIEE_COUNTRY</base_table>
<geometry_column>GEOMETRY</geometry_column>
<styling_rules><![CDATA[<?xml version="1.0" standalone="yes"?><styling_rules>
<hidden_info>
<field column="ISO_COUNTRY_CODE" name="Country Code"/>
<field column="NAME" name="Country Name"/>
<field column="NAME_INIT" name="Country Name (Init)"/>
</hidden_info>
<rule>
<features style="C.AIRPORTS"> </features>
<label column="NAME_LABEL" style="T.COUNTRY_NAME_10"> 1 </label>
</rule>
</styling_rules>]]></styling_rules>
</theme>
. . .

2. 空間表の列を特定します。次の例では、GEOMETRYという名前の空間ジオメトリ列が実表OBIEE_COUNTRYに含まれています。

SQL> describe obiee_country
Name                          Null?    Type
----------------------------- -------- ----------------------------
NAME                                   VARCHAR2(255 CHAR)
NAME_INIT                              VARCHAR2(1020 CHAR)
OBIEE_LOWER                            VARCHAR2(1020 CHAR)
ISO_COUNTRY_CODE                       VARCHAR2(5)
SQKM                                   NUMBER(11)
NAME_LABEL                             VARCHAR2(255 CHAR)
GEOMETRY                               MDSYS.SDO_GEOMETRY

3. MapViewerデータ・サーバーへのリクエスト文字列を作成します。たとえば、実表がOBIEE_COUNTRYであり、MapViewerがlocalhost:8080で実行しているときに、空間データの取得が有効化されているデータ・ソースの名前がmy_ds_nameだとすると、次に示すようなリクエストを送信することになります。

http://localhost:8080/ mapviewer/dataserver/my_ds_name?t=obiee_country&sql=select iso_country_code as id, iso_country_code as "country Code", name as "Country Name", name_init as "Country Name (Init)", name_label, geometry from obiee_country&id_col=id&simplify=true&threshold=90&include_label_box=true

データセットは、この例ではOBIEE_COUNTRY.jsonという名前で一時フォルダに保存できます。この一時フォルダは、エクスポートしたメタデータ(USER_SDO_CACHED_MAPS.xmlファイル、USER_SDO_THEMES.xmlファイル、およびUSER_SDO_STYLES.xmlファイル)が保存されているフォルダです。

2.5.1.3 カタログ・データ・ソースを追加するためのMapViewer構成ファイルの編集

mapViewerConfig.xmlファイルを編集して、カタログ・データ・ソースを追加します。次に例を示します。

<map_data_source name="catalogds1"
catalog_dir="../catalogs/datafolder1"
private="true"
number_of_mappers="3"
allow_jdbc_theme_based_foi="true"
editable="false"/>

前述のカタログ・データ・ソース定義の場合は、mapViewerConfig.xmlファイルが保存されている場所を基準として指定されるcatalog_dirフォルダを作成して、そのフォルダにすべてのデータ・ファイルをコピーする必要があります。つまり、エクスポートした3つのメタデータ・ファイル(USER_SDO_CACHED_MAPS.xml、USER_SDO_THEMES.xml、およびUSER_SDO_STYLES.xml)と、エクスポートしたすべてのGeoJSONファイル(この例では、OBIEE_COUNTRY.jsonなど)をコピーします。

2.5.1.4 MapViewerサーバーの再起動

MapViewerサーバーを再起動します。

MapViewerサーバーの再起動後、エクスポートしたすべてのタイル・レイヤーとテーマに、このカタログ・データ・ソースからアクセスできるようになります。たとえば、次のようなマップ・リクエストを送信すると、マップ画像を確認できます。

http://localhost:8080/mapviewer/omserver?xml_request= <?xml version="1.0" standalone="yes"?> <map_request  datasource = "catalogds1" width="1024" height="768" format="PNG_STREAM"> <center size="200"> <geoFeature><geometricProperty typeName="center"> <Point> <coordinates>0, 0</coordinates> </Point> </geometricProperty></geoFeature> </center> <themes> <theme name="OBIEE_COUNTRY"> </theme> </themes> </map_request>

2.6 マップの生成方法

マップ・リクエストがMapViewerサーバーに着信すると、サーバーではリクエスト内のマスター・データソースに関連付けられたレンダラから使用されていないものを選択します。この項では、MapViewerサーバーでマップを生成する際のプロセスについて説明します。つまり、MapViewerでは次の手順が実行されます。

1. 受信XML mapリクエストを解析し、処理します。

2. テーマごとにデータを準備します(同時に実行)。

3. 各テーマをレンダリングし、ラベルを付けます。

4. 最終的な画像またはファイルを生成します。

MapViewerにより生成された各マップは、有効なXMLマップ・リクエストを受信した結果です。(JavaBeanベースのAPIを使用する場合、リクエストは自動的にXML文書に変換され、MapViewerサーバーに渡されます。)XMLマップ・リクエストは解析され、その内容が検証されます。次に、MapViewerではXMLリクエストで指定されている動的スタイルを作成します。ベース・マップに含まれるすべてのテーマ(ベース・マップが指定されている場合)と、指定された事前定義済テーマやJDBCテーマから、テーマ・リストが作成されます。リクエストで指定されている個々の地物は、すべて1つの一時テーマにまとめられます。つまり、受信リクエストの解析後、マップで表示されるデータはすべて、テーマのリストの形でMapViewerレンダリング・エンジンに提示されます。

リスト内でのテーマの順序付けは、テーマのレンダリングの順序を決定するため重要です。ベース・マップ(存在する場合)に含まれるすべてのテーマがまずリストに追加され、次に指定されたすべてのテーマ(事前定義済またはJDBC)が追加されます。個々の地物をすべて含むテーマは最後のテーマとして追加されます。リクエストされたマップのその他の地物(凡例、マップのタイトル、脚注など)が作成され、後でレンダリングするために保存されます。

MapViewerでは、リクエスト内のテーマごとにデータを準備するための別々の実行スレッドが作成され、テーマの準備が同時に行われます。事前定義済テーマの場合は、テーマの定義とその他の情報(現行のマップ・リクエスト・ウィンドウなど)に基づいて問合せを作成することを意味します。この問合せは実行のためデータベースに送信され、結果セットが返されます。MapViewerでは結果セットに基づき、レンダリング可能な個々のオブジェクトを作成します。

- 完全にキャッシュされている事前定義済テーマの場合は、すべてのレンダリング可能なオブジェクトがすぐに使用可能であるため、データベースに問合せを送信しません。

- JDBCテーマの場合、ユーザーが指定した問合せは、そのまま実行されるか(JDBCテーマの定義でasis属性値がTRUEである場合)、空間フィルタ副問合せが自動的に適用されて実行されます。空間フィルタの部分は、ユーザーの問合せの結果を現行のリクエスト・ウィンドウ内の結果に制限するために使用されます。

- すでにレンダリング可能な地物があるテーマ(リクエストに個々の地物がすべて含まれているテーマなど)の場合は、レンダリング可能なオブジェクトを作成する必要はありません。

マップ・リクエストのすべてのテーマを準備し、必要なデータをすべて収集すると、MapViewerはマップのレンダリングを開始します。結果のマップを保持するために空の新しいメモリー内画像を作成し、必要なバックグラウンド(色または画像)を描画します。次にテーマ・リスト内のすべてのテーマをレンダリングします。

注意:
すべての画像テーマまたはGeoRasterテーマは、テーマ・リスト内での位置には関係なく、常に最初にレンダリングされます。しかし、その他のすべてのテーマは、テーマ・リスト内での出現順にレンダリングされます。

テーマごとに、MapViewerの内部で決定された順序で地物がレンダリングされます。各地物のレンダリングには、レンダリング・スタイルの描画メソッドを起動する必要があります。すべてのテーマがレンダリングされると、ラベリング・プロセスが開始します。地物にテキストでラベルを付ける必要のある各テーマに対して、MapViewerは地物のタイプ(ポリゴンまたは線など)に応じてラベル付けのための特定のアルゴリズムを起動します。

すべてのテーマをレンダリングし、(必要に応じて)ラベルを付けると、MapViewerは内部のマップ画像上にその他のマップ地物(凡例など)を描画します。次に、その画像を元のマップ・リクエストで指定されている形式(PNGまたはGIFなど)に変換します。ただし、SVGマップの場合は、内部画像を使用するかわりにまず空のSVGマップ・オブジェクトを作成し、レンダリング・プロセスの結果としてSVG文書を作成し、それをマップ・オブジェクトに挿入します。

2.7 スキーマ間のマップ・リクエスト

データベース・ユーザーは、他のデータソース・ユーザーがアクセスを許可されている表のデータを選択するために、別のデータベース・ユーザーに関連付けられたデータを使用するテーマを指定したマップ・リクエストを発行できます。たとえば、ユーザーSCOTTが、ユーザーMVDEMOに関連付けられたデータを使用するマップ・リクエストを発行するとします。通常、ユーザーSCOTTは、ユーザーMVDEMOが所有する関連する表に対するSELECTアクセス権が付与されていることが必要で、一般に<theme>要素にはschema-name.table-nameの形式で表を指定する必要があります。ここでは、次の使用例を示します。

- ジオメトリ表の場合、MVDEMOのジオメトリ表に対するSELECT権限をSCOTTに付与します(例2-53を参照)。

- GeoRaster表の場合、MVDEMOのGeoRaster表およびラスター・データ表に対するSELECT権限をSCOTTに付与します(例2-54を参照)。

- トポロジ・データ・モデル表の場合、MVDEMOのトポロジ表、トポロジ列の索引表および関連するトポロジ情報の表(topology-name_EDGE$、topology-name_NODE$、topology-name_FACE$、topology-name_RELATION$)に対するSELECT権限をSCOTTに付与します(例2-55を参照)。

- ネットワーク・データ・モデル表の場合、MVDEMOのネットワーク・リンク、ノード、パスおよびパスリンクの表に対するSELECT権限をSCOTTに付与します(例2-56を参照)。

例2-53は、SCOTTユーザーで定義されたデータソースからジオメトリ表MVDEMO.STATESにアクセスする動的テーマを示しています。

例2-53 スキーマ間のアクセス: ジオメトリ表

SQL> grant select on STATES to SCOTT;
. . .
<themes>
<theme name="theme1">
<jdbc_query
datasource="scottds"
spatial_column="geom"
render_style="MVDEMO:C.COUNTIES"
jdbc_srid="8265"
>SELECT geom from MVDEMO.STATES</jdbc_query>
</theme>
</themes>

例2-54は、SCOTTユーザーで定義されたデータソースからGeoRaster表MVDEMO.GEORASTER_TABLEおよびそのRDTにアクセスする動的テーマを示しています。実表(GeoRaster表)はschema-name.table-nameの形式で指定します。

例2-54 スキーマ間のアクセス: GeoRaster表

SQL> grant select on GEORASTER_TABLE to SCOTT;
SQL> grant select on RDT_GEOR1 to SCOTT;
. . .
<themes>
<theme name="georaster_theme">
<jdbc_georaster_query
georaster_table="MVDEMO.georaster_table"
georaster_column="georaster"
raster_table="rdt_geor1"
raster_id="1"
jdbc_srid="8307"
datasource="scottds"
asis="false">
</jdbc_georaster_query>
</theme>
</themes>

例2-55は、SCOTTユーザーで定義されたデータソースから、トポロジ表MVDEMO.LAND_PARCELSおよびCITY_DATAトポロジの関連情報の表にアクセスする動的テーマを示しています。地物表および対象のトポロジが、データソースに関連付けられたスキーマとは別のスキーマで所有されている場合は、これらをschema-name.object-nameの形式で指定します。

例2-55 スキーマ間のアクセス: トポロジ地物表

SQL> grant select on CITY_DATA_FACE$ to SCOTT;
SQL> grant select on CITY_DATA_EDGE$ to SCOTT;
SQL> grant select on CITY_DATA_NODE$ to SCOTT;
SQL> grant select on CITY_DATA_RELATION$ to SCOTT;
SQL> grant select on LAND_PARCELS to SCOTT;
SQL> grant select on <topology-column-index-table-name> to SCOTT;
. . .
<themes>
<theme name="topo_theme" >
<jdbc_topology_query
topology_name="MVDEMO.CITY_DATA"
feature_table="MVDEMO.LAND_PARCELS"
spatial_column="FEATURE"
render_style="MVDEMO:C.COUNTIES"
jdbc_srid="0"
datasource="scottds"
asis="false">select feature from MVDEMO.land_parcels
</jdbc_topology_query>
</theme>
</themes>

例2-55では、トポロジ列の索引表名(<topology-column-index-table-name>)に対するSELECTを付与する必要があります。これは、地物表のトポロジ列に関連付けられた空間索引表が、トポロジ問合せでMapViewerによって使用されるためです。トポロジ列の索引表名は、次のように特定できます。次の情報を前提とします。

- トポロジ地物表の所有者: MVDEMO

- トポロジ地物表の名前: LAND_PARCELS

- トポロジ地物表のトポロジ列の名前: FEATURE

次の問合せでは、索引表名(この例ではMDTP_14E60$)が返されます。

SQL> select sdo_index_table from all_sdo_index_info
where table_owner = 'MVDEMO'
and table_name = 'LAND_PARCELS'
and column_name = 'FEATURE'

SDO_INDEX_TABLE
--------------------------------
MDTP_14E60$

その後、「例2-55 スキーマ間のアクセス: トポロジ地物表」にある最後のGRANTステートメントを変更して、<topology-column-index-table-name>を指定します。この場合は、次のようになります。

SQL> grant select on MDTP_14E60$ to SCOTT;

例2-56は、MVDEMO.BI_TESTネットワーク表およびそのリンク、ノード、パスおよびパスリンクの各表にアクセスする動的テーマを示しています。ネットワーク名はschema-name.network-nameの形式で指定します。

例2-56 スキーマ間のアクセス: ネットワーク表

SQL> grant select on BI_TEST_LINK$ to SCOTT;
SQL> grant select on BI_TEST_NODE$ to SCOTT;
SQL> grant select on BI_TEST_PATH$ to SCOTT;
SQL> grant select on BI_TEST_PLINK$ to SCOTT;
. . .
<themes>
<theme name="net_theme" >
<jdbc_network_query
network_name="MVDEMO.BI_TEST"
network_level="1"
jdbc_srid="0"
datasource="scottds"
link_style="MVDEMO:C.RED"
node_style="MVDEMO:M.CIRCLE"
node_markersize="5"
asis="false">
</jdbc_network_query>
</theme>
</themes>

2.8 MapViewerでのWorkspace Managerのサポート

Workspace Managerは、データベース内の1つ以上の表をバージョン対応表にできるOracle Databaseの機能です。表がバージョン対応表の場合、作業領域のユーザーには、自動的に対象のデータベース行の正しいバージョンが表示されます。Workspace Managerの詳細は、『Oracle Database Workspace Manager開発者ガイド』を参照してください。

特定の作業領域から、作業領域の特定のセーブポイントで、あるいは作業領域の特定の日付に近いポイントで、マップをリクエストできます。Workspace Managerのサポートに関連する<theme>要素の属性は、次のとおりです。

- workspace_name属性: マップ・データの取得先の作業領域名を指定します。

- workspace_savepoint属性: 指定した作業領域での移動先のセーブポイント名を指定します。

- workspace_date属性: 指定した作業領域での移動先の日付(つまり、指定した日付またはそれに近いポイント)を指定します。

- workspace_date_format属性: 日付の書式を指定します。デフォルトは、mmddyyyyhh24missです。この属性は、workspace_date属性を指定した場合にのみ適用されます。

- workspace_date_nlsparam属性: グローバリゼーション・サポートのオプションを指定します。オプションとデフォルトは、日付変換用のTO_CHAR関数のnlsparam引数と同じです(『Oracle Database SQL言語リファレンス』を参照)。

- workspace_date_tswtz属性: ブール値を指定します。TRUEは、入力日付がタイムゾーン書式のタイムスタンプであることを意味します。FALSE(デフォルト)は、入力日付が日付文字列であることを意味します。

workspace_name属性は、MapViewerでWorkspace Managerサポートを使用するために必要です。

workspace_savepoint属性もworkspace_date属性も指定しない場合、MapViewerは定義されている作業領域の最新のバージョンに移動します。workspace_savepoint属性とworkspace_date属性の両方を指定すると、セーブポイント名のかわりに指定した日付がMapViewerによって使用されます。

例2-57は、Workspace Managerサポート関連の属性(太字で表示)を使用する動的テーマの定義を示しています。この例では、セーブポイントsp1での作業領域wsp_1に関連するデータがレンダリングされます。

例2-57 マップ・リクエストのWorkspace Manager関連の属性

<?xml version="1.0" standalone="yes"?>
<map_request
. . .
<themes>
<theme name="wmtheme" user_clickable="false"
workspace_name="wsp_1" workspace_savepoint="sp1" >
<jdbc_query
spatial_column="GEOM"
render_style="stylename"
jdbc_srid="8307"
datasource="mvdemo"
asis="false"> select GEOM,ATTR from GEOM_TABLE
</jdbc_query>
</theme>
</themes>
. . .
</map_request>

MapViewerの事前定義済テーマのキャッシング(2.3.1.6項を参照)およびWorkspace Manager関連のMapViewer属性の使用についての考慮事項は次のとおりです。

- テーマの<styling_rules>要素のcaching属性がALLに設定されている場合、事前定義済テーマではWorkspace Manager関連の属性は無視されます。

- workspace_name属性を指定した場合、キャッシュ・データは考慮されません。

MapViewer管理リクエスト(第5章を参照)でのWorkspace Managerサポート関連の要素は次のとおりです。

- <list_workspace_name>

- <list_workspace_session>

<list_workspace_name>要素は、最新のマップ・リクエストのworkspace_name属性で指定されている現行作業領域名を返します。作業領域が指定されていない場合(つまり、現行のMapViewerセッションのマップ・リクエストでworkspace_name属性が指定されていない場合)またはLIVE作業領域が指定されている場合には、LIVE作業領域が返されます。Workspace Managerが現在のOracle Databaseにインストールされていない場合、リクエストは失敗します。

例2-58では、管理リクエストに<list_workspace_name>要素を使用しています。

例2-58 管理リクエスト内の<list_workspace_name>要素

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<list_workspace_name data_source="mvdemo"/>
</non_map_request>

wsp_1が現行作業領域である場合、例2-58のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
<workspace_name succeed="true" name="wsp_1"/>
</non_map_response>

作業領域が指定されていない場合や、LIVE作業領域が指定されている場合、例2-58のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
<workspace_name succeed="true" name="LIVE"/>
</non_map_response>

Workspace Managerが現在のOracle Databaseにインストールされていない場合、例2-58のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
<workspace_name succeed="false"/>
</non_map_response>

<list_workspace_session>要素は、現行作業領域名と現行コンテキスト名を返します。作業領域が指定されていない場合(つまり、現行のMapViewerセッションのマップ・リクエストでworkspace_name属性が指定されていない場合)またはLIVE作業領域が指定されている場合には、LIVE作業領域に関する情報が返されます。Workspace Managerが現在のOracle Databaseにインストールされていない場合、リクエストは失敗します。

例2-59では、管理リクエストに<list_workspace_session>要素を使用しています。

例2-59 管理リクエスト内の<list_workspace_session>要素

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<list_workspace_session data_source="mvdemo"/>
</non_map_request>

wsp_1が現行作業領域であり、コンテキストがLATESTである場合、例2-59のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
<workspace_session succeed="true" name="wsp_1" context="LATEST"
context_type="LATEST"/>
</non_map_response>

作業領域が指定されていない場合や、LIVE作業領域が指定されている場合、またコンテキストがLATESTである場合、例2-59のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
<workspace_session succeed="true" name="LIVE" context="LATEST"
context_type="LATEST"/>
</non_map_response>

Workspace Managerが現在のOracle Databaseにインストールされていない場合、例2-59のレスポンスは次のようになります。

<?xml version="1.0" ?>
<non_map_response>
<workspace_session succeed="false"/>
</non_map_response>

2.9 MapViewerのメタデータ・ビュー

ベース・マップ、テーマおよびスタイルを説明するマッピング・メタデータは、MDSYSが所有するグローバル表のSDO_MAPS_TABLE、SDO_THEMES_TABLEおよびSDO_STYLES_TABLEに格納されています。ただし、これらの表を直接更新しないでください。MapViewerの各ユーザーには、そのユーザーに関連付けられたスキーマで使用可能な次のビューがあります。

- USER_SDO_STYLESおよびALL_SDO_STYLESには、スタイルの情報が含まれています。これらのビューの詳細は、2.9.1項を参照してください。

- USER_SDO_THEMESおよびALL_SDO_THEMESには、テーマの情報が含まれています。これらのビューの詳細は、2.9.2項を参照してください。

- USER_SDO_MAPSおよびALL_SDO_MAPSには、ベース・マップの情報が含まれています。これらのビューの詳細は、2.9.3項を参照してください。

- USER_SDO_CACHED_MAPSとALL_SDO_CACHED_MAPSには、マップ・タイル・レイヤーの構成設定に関する情報が含まれます。これらのビューの詳細は、2.9.4項を参照してください。

注意:
Map Builderツール(第7章を参照)を使用すると、ほとんどのマッピング・メタデータを管理できます。ただし、一部の地物については、MapViewerメタデータ・ビューを更新するためにSQL文を使用する必要があります。

USER_SDO_xxxビューには、ユーザー(スキーマ)が所有するマッピング要素(スタイル、テーマ、ベース・マップ、キャッシュされたマップ)に関するメタデータ情報が含まれ、ALL_SDO_xxxビューには、ユーザーがSELECT権限を持つマッピング要素に関するメタデータ情報が含まれます。

ALL_SDO_xxxビューには、オブジェクト所有者のスキーマを識別するOWNER列が含まれます。USER_SDO_xxxビューに、OWNER列は含まれません。

データベースで定義されたすべてのスタイルは、すべてのユーザーが、自分のテーマ、テキスト・スタイルを含むマーカーまたは拡張スタイルを定義するために参照できます。ただし、テーマおよびベース・マップはユーザー間で共有されないため、たとえば、自分が作成したベース・マップで別のユーザーのテーマは参照できません。

マッピング・メタデータへのアクセスには、次のルールが適用されます。

- メタデータを追加、削除または変更する場合、USER_SDO_xxxビューを使用して操作を実行する必要があります。ALL_SDO_xxxビューは、USER_SDO_xxxビューに加えた変更を反映するために自動的に更新されます。

- すべてのスタイルに関するメタデータへの読取りアクセスのみが必要な場合は、ALL_SDO_STYLESビューを使用する必要があります。主キーはOWNER列およびNAME列で構成されるため、スタイルを指定する場合はOWNERおよびNAMEの両方を必ず含めてください。

前述のMapViewerメタデータ・ビューは、次のファイルで定義されます。

$ORACLE_HOME/lbs/admin/mapdefinition.sql

MapViewerは、他のファイルで定義可能な他のメタデータ・ビューもいくつか使用します。これらのビューの内容は決して変更しないでください。これには以下が含まれます。

- MDSYS.USER_SDO_TILE_ADMIN_TASKSには、マップ・タイル管理に関連する長時間のタスクについての情報が含まれています。プリフェッチに続いてタスクを再開するなど、長時間のマップ・タイル層のタスクを停止する場合、MapViewerは最初からやり直すのではなく、USER_SDO_TILE_ADMIN_TASKSビューの情報を使用してタスクを再開します。

2.9.1 xxx_SDO_STYLESビュー

USER_SDO_STYLESビューおよびALL_SDO_STYLESビューには、表2-3に示す列があります。

表2-3 xxx_SDO_STYLESビュー

列名

データ型

説明

OWNER

VARCHAR2

スタイルを所有するスキーマ(ALL_SDO_STYLESのみ)

NAME

VARCHAR2

スタイルに関連付ける一意の名前

TYPE

VARCHAR2

COLOR、MARKER、LINE、AREA、TEXTまたはADVANCEDのいずれかの値

DESCRIPTION

VARCHAR2

スタイルに関するオプションの記述テキスト

DEFINITION

CLOB

スタイルのXML定義

IMAGE

BLOB

画像ベースの記号(マーカーの場合)または充填文字(領域の場合)を使用するマーカー・スタイルまたは領域スタイルの画像内容(airport.gifなど)

GEOMETRY

SDO_GEOMETRY

(今後使用予定)

Oracle Databaseのリリースに応じて、ALL_SDO_STYLESビューに、MDSYSスキーマが所有するサンプル・スタイルが含まれる場合があります。これらのスタイルがシステムで定義されている場合にはテーマ定義およびマップ・リクエストで指定できます。また、独自スタイルの定義に使用するアイデアのためのXML定義を検査できます。

現行ユーザー以外のスキーマが所有しているスタイル(または他のタイプのMapViewerオブジェクト)を指定するには、スキーマ名を指定し、スキーマ名とオブジェクト名の間にピリオドではなくコロン(:)を使用する必要があります。次の<jdbc_query>要素からの抜粋は、MDSYSスキーマが所有するC.REDというスタイルを参照します。

<jdbc_query . . . render_style="MDSYS:C.RED">
. . .
</jdbc_query>

例2-60では、MDSYSスキーマが所有し、現在定義されているすべてのスタイルの名前を検索して、そのいずれかのスタイルのタイプ、説明およびXML定義を表示します。(出力結果の例は、読みやすいようにリフォーマットされています。)

例2-60 MDSYSスキーマ所有のスタイルの検索

SELECT owner, name FROM all_sdo_styles
WHERE owner = 'MDSYS';

OWNER                            NAME
-------------------------------- --------------------------------
MDSYS                            C.BLACK
MDSYS                            C.BLACK GRAY
MDSYS                            C.BLUE
MDSYS                            C.COUNTIES
MDSYS                            C.FACILITY
. . .
MDSYS                            L.MAJOR STREET
MDSYS                            L.MAJOR TOLL ROAD
MDSYS                            L.MQ_ROAD2
MDSYS                            L.PH
MDSYS                            L.POOR_ROADS
MDSYS                            L.PTH
MDSYS                            L.RAILROAD
MDSYS                            L.RAMP
MDSYS                            L.SH
MDSYS                            L.STATE BOUNDARY
. . .
MDSYS                            M.REDSQ
MDSYS                            M.SMALL TRIANGLE
MDSYS                            M.STAR
MDSYS                            M.TOWN HALL
MDSYS                            M.TRIANGLE
MDSYS                            T.AIRPORT NAME
MDSYS                            T.CITY NAME
MDSYS                            T.MAP TITLE
MDSYS                            T.PARK NAME
MDSYS                            T.RED STREET
MDSYS                            T.ROAD NAME
MDSYS                            T.SHIELD1
MDSYS                            T.SHIELD2
MDSYS                            T.STATE NAME
MDSYS                            T.STREET NAME
. . .

-- Display the type, description, and XML definition of one style.
SET LONG 4000;
SELECT owner, name, type, description, definition
FROM all_sdo_styles WHERE name = 'L.PH';

OWNER   NAME     TYPE       DESCRIPTION
------  -----    ------     ------------------
MDSYS   L.PH     LINE       Primary highways

DEFINITION
---------------------------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
<g class="line" style="fill:#33a9ff;stroke-width:4">
<line class="parallel" style="fill:#aa55cc;stroke-width:1.0"/>
</g>
</svg>

2.9.2 xxx_SDO_THEMESビュー

USER_SDO_THEMESビューおよびALL_SDO_THEMESビューには、表2-4に示す列があります。

表2-4 xxx_SDO_THEMESビュー

列名

データ型

説明

OWNER

VARCHAR2

テーマを所有するスキーマ(ALL_SDO_THEMESのみ)

NAME

VARCHAR2

テーマに関連付ける一意の名前

DESCRIPTION

VARCHAR2

テーマに関するオプションの記述テキスト

BASE_TABLE

VARCHAR2

空間ジオメトリ列が含まれる表またはビュー

GEOMETRY_COLUMN

VARCHAR2

空間ジオメトリ列(SDO_GEOMETRY型)の名前

STYLING_RULES

CLOB

テーマに関連付けるスタイリング・ルールのXML定義

2.9.3 xxx_SDO_MAPSビュー

USER_SDO_MAPSビューおよびALL_SDO_MAPSビューには、表2-5に示す列があります。

表2-5 xxx_SDO_MAPSビュー

列名

データ型

説明

OWNER

VARCHAR2

ベース・マップを所有するスキーマ(ALL_SDO_MAPSのみ)

NAME

VARCHAR2

ベース・マップに関連付ける一意の名前

DESCRIPTION

VARCHAR2

ベース・マップに関するオプションの記述テキスト

DEFINITION

CLOB

ベース・マップに関連付ける、テーマおよびテーマのスケール値範囲情報のリストのXML定義

2.9.4 xxx_SDO_CACHED_MAPSビュー

USER_SDO_MAPSビューおよびALL_SDO_MAPSビューには、表2-6に示す列があります。

表2-6 xxx_SDO_CACHED_MAPSビュー

列名

データ型

説明

NAME

VARCHAR2

キャッシング対象マップ・ソースの一意な名前

DESCRIPTION

VARCHAR2

キャッシング対象マップ・ソースのオプションの記述テキスト

TILES_TABLE

VARCHAR2

(現在は未使用)

IS_ONLINE

VARCHAR2

マップ・タイル層がオンラインの場合はYES、マップ・タイル層がオフラインの場合はNO。キャッシュでタイルが見つからず、マップ・タイル層がオンラインの場合、マップ・タイル・サーバーは該当するタイルをフェッチし、フェッチしたタイルをクライアントに返す。タイルが見つからず、マップ・タイル層がオフラインの場合、マップ・タイル・サーバーは該当するタイルをフェッチせず、ブランク画像をクライアントに返す。

IS_INTERNAL

VARCHAR2

マップ・ソースが内部マップ・ソースの場合はYES、マップ・ソースが外部マップ・ソースの場合はNO

DEFINITION

CLOB

マップ・タイル層のXML定義(この項で後述)。

BASE_MAP

VARCHAR2

キャッシング対象のMapViewerベース・マップの名前(マップ・ソースが内部マップ・ソースの場合)

MAP_ADAPTER

BLOB

外部マップ・サービス・プロバイダのアダプタJavaクラスが含まれるjarファイル(この項で後述)。

USER_SDO_CACHED_MAPSビューの使用方法の詳細は、3.3.2項「マップ・タイル・サーバーの構成」を参照してください。

2.10 Oracle Maps

Oracle Mapsは、Webベースの高性能な対話型マッピング・アプリケーションを開発するための一連のテクノロジの名前です。これは、サーバー側コンポーネントとクライアント側コンポーネントで構成されています。

次の内容について説明します。

- Oracle Mapsの概要

- Oracle Mapsアプリケーションのアーキテクチャ

2.10.1 Oracle Mapsの概要

Oracle Mapsは、次の主要なコンポーネントから構成されています。

- マップ・タイル・サーバー。マップ画像タイルのリクエスト時に、事前生成されたマップ画像タイルをキャッシュして提供します。

- マップ・サーバー。クライアントのマップ画像リクエスト時に、空間データからマッピング・クライアントのためにマップを生成します。

- マップ・データ・サーバー。空間データ・プロバイダからマッピング・クライアントのために空間データをフェッチします。

- AjaxベースのJavaScriptマッピング・クライアント。(Ajaxは、asynchronous JavaScript and XMLの頭字語です。)このクライアントは、マップの閲覧および操作に適した機能と、柔軟なApplication Program Interface (API)を提供します。

マップ・タイル・サーバー(マップ画像キャッシング・エンジン、3.3項「マップ・タイル・サーバー」を参照)は、Oracle MapViewerなどのWeb対応マップ・プロバイダによってレンダリングされたマップ画像タイルのフェッチとキャッシングを自動的に実行します。また、キャッシングされたマップ画像タイルをクライアント(Oracle MapsクライアントAPIを使用して開発されたWebアプリケーション)に提供します。提供されたクライアントはその後、複数のマップ画像タイルをまとめ、1つのシームレスで大きなマップを自動的に作成します。マップ画像タイルは、通常、事前に生成されキャッシュされるため、アプリケーション・ユーザーにはマップが高速に表示されます。

JavaScriptマッピング・クライアントは、ブラウザ側マップ表示エンジンであり、サーバーからマップ・コンテンツをフェッチしてクライアント・アプリケーションに表示します。次の機能があります。

- MapViewerサーバー、サード・パーティのマップ・サービス・プロバイダ、またはローカル・ディスク記憶域からマップ画像タイルをフェッチします。

- MapViewerサーバー、サード・パーティの空間データ・プロバイダ、またはローカル・ディスク記憶域から空間データを取得して、それ自体がクライアント側で空間データをマップ画像にレンダリングします。

- マップのドラッグやクリックなど、マップ関連のカスタマイズ可能なユーザー操作コントロールをアプリケーションに提供します。

- マップ・コンテンツとマップ・レイアウトのデザインをカスタマイズするための、その他の組込み機能とユーティリティを提供します。

JavaScriptマッピング・クライアントは、任意のWebアプリケーションまたはポータルと簡単に統合できます。

2.10.2 Oracle Mapsアプリケーションのアーキテクチャ

Oracle Mapsを使用して開発したWebマッピング・アプリケーションのアーキテクチャを、図2-14に示します。

図2-14 Oracle Mapsアプリケーションのアーキテクチャ

アプリケーションは、Oracle Mapsアーキテクチャと次のようにやり取りします(図2-14を参照)。

- アプリケーションは、JavaScriptを使用して開発され、WebブラウザのJavaScriptエンジン内で動作します。

- アプリケーションは、JavaScriptマップ・クライアントを起動してマップ・タイル・サーバーからマップ画像タイルをフェッチし、Webブラウザにマップを表示します。

- アプリケーションは、JavaScriptマップ・クライアントを起動してサーバーから別の形式のマップ・サービス(WMSやWMTSなど)のマップ画像をフェッチし、マップ画像を表示します。

- アプリケーションは、JavaScriptマップ・クライアントを起動してマップ・データ・サーバーから空間データをフェッチし、マップ画像を表示します。

- JavaScriptマップ・クライアントが、アプリケーションに代わってユーザーとのマップ関連の対話を制御します。

- MapViewerサーバーがマップ画像リクエストを受信した場合、そのリクエストはサーバーがサポートする複数のタイプ(マップ・タイル・サーバーに向けられるマップ画像タイル・リクエスト、マップ・サーバーに向けられるマップ画像リクエスト、WMSサーバーに向けられるWMSマップ・リクエスト、WMTSサーバーに向けられるWMTSマップ画像タイル・リクエスト)のいずれかに含めることができます。それぞれのリクエストは、サーバーによって適切に処理されます。
例1: マップ・タイル・サーバーは、マップ画像タイル・リクエストを受信すると、まず、リクエストされたタイルがキャッシング済であるかどうかをチェックします。すでにタイルがキャッシュされている場合は、キャッシュされているタイルがクライアントに返されます。タイルがキャッシュされていない場合、タイル・サーバーはタイルをキャッシュにフェッチして、そのタイルをクライアントに返します。タイルは、MapViewerのマップ・レンダリング・エンジンまたは外部Webマップ・サービス・プロバイダから直接フェッチできます。

例2: マップ・タイル・リクエストのかわりに、マップ・サーバーへのマップ画像リクエストをサーバーが受信すると、マップ・サーバーは画像をレンダリングしてクライアントに返します。マップ・タイル・サーバーとは異なり、マップ・サーバーは、指定されたデータ範囲に応じてマップを生成し、指定されたディメンションでデータを画像にレンダリングしますが、マップ画像をキャッシュしません。

- マップ・データ・サーバーはマップ・データ・リクエストを受信すると、空間データを取得して、マップ画像ではなく空間データをクライアントに返します。

3 MapViewerサーバー

MapViewerには、Java Enterprise Editionパッケージの1セットとして、マッピング・サービスを提供するサーバーのコレクションが含まれています。これらのサーバーには、マップ・サーバー、マップ・データ・サーバー、マップ・タイル・サーバー、WMSサーバー(「付録E」を参照)、WMTSサーバー(「付録F」を参照)などがあります。Oracle Mapsアプリケーションの開発時には、Oracle Maps APIとMapViewerサーバーによって、必要とされるサービスが識別され、適切なサーバーに向けてマップ・サービス・リクエストが発行されます。通常、マップ・アプリケーションで明示的にサービス・リクエストを送信する必要はありません。ただし、この章で説明するMapViewerサーバーの詳しい知識があると、アプリケーションのデバッグや最適化が必要になったときに役立ちます。

主なトピック:

- MapViewerマップ・サーバー

- MapViewerマップ・データ・サーバー

- マップ・タイル・サーバー

3.1 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について詳しく説明します。

- mapリクエストのDTD

- 情報リクエストのDTD

- mapレスポンスのDTD

- MapViewerの例外DTD

- ジオメトリDTD(OGC)

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

この項では、マップ・リクエストの例を示します。ここでは、概念、要素および属性(詳細は3.1.2項を参照)について述べています。次の例を示す項で構成されています。

- 3.1.1.1項「単純なマップ・リクエスト」

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

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

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

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

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

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

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

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

- 3.1.1.15項「MapViewerを使用したJavaプログラム」

- 3.1.1.16項「MapViewerを使用したPL/SQLプログラム」

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

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

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

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

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

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

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

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

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

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

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

<?xml version="1.0" encoding="UTF-8" ?>
<map_request datasource="lbs_data" title="LBS CUSTOMER MAP"
basemap="us_base" width="500" height="375"
bgcolor="#a6cae0" format="GIF_URL">
<center size="1">
<geoFeature typeName="mapcenter" label="Motel 1" text_style="T.MOTEL"
render_style="M.MOTEL" radius="300">
<geometricProperty>
<Point>
<coordinates>-122.2615, 37.5266</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>
<srs>SDO:8265</srs>
<themes>
<theme name="poi_theme_us_restaurants"/>
</themes>
</map_request>

例3-3に関する注意は、次のとおりです。

- basemapが指定されているため、MapViewerは、指定されたテーマ(poi_theme_us_restaurants)を描画する前に、そのベース・マップのすべての事前定義済テーマを最初に描画します。

- M.MOTELスタイルのマーカーおよびT.MOTELスタイルのラベルMotel 1によって中心が描画されます。

- この中心を囲んで半径300mの円が描画されます。

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

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

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

<?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.1.1.5 属性値および動的に定義される可変マーカー・スタイルを含むポイント地物のマップ・リクエスト

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

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

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

<style name="mkcircle">
<svg>
<g class="marker" style="stroke:blue;fill:red;">
<circle r="20"/>
</g>
</svg>
</style>

</styles>
</map_request>

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

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

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

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

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

1. MapViewerは、現在のマップ・ウィンドウ・コンテキストでユーザー指定の問合せ(SELECT image, img_extent, image_id FROM my_images)を実行し、画像データを取得します。

2. MapViewerは、すべての登録済イメージ・レンダラの内部リストで、ECW形式(image_format="ECW")をサポートするレンダラがあるかどうかをチェックします。Oracleが提供するMapViewerはECW形式をサポートしていないため、付録Cで説明するように、この形式をサポートするカスタム・イメージ・レンダラを実装し、登録する必要があります。

3. MapViewerはrenderImagesメソッドをコールし、ユーザー指定の問合せから取得された画像データが、パラメータの1つとしてこのメソッドに渡されます。

4. MapViewerは、リクエストされたベクター・データを取得し、レンダリングされた画像の上にそのデータをレンダリングします。

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

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

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

<?xml version="1.0" standalone="yes"?>
<map_request
datasource = "mvdemo"
format="PNG_URL">

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

</map_request>

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

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

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

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

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

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

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

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

基本的な手順は次のとおりです。

1. 使用する円グラフの特性を定義する拡張スタイルを作成します。次の例では、V.PIECHART1という拡張スタイルを作成します。

INSERT INTO user_sdo_styles VALUES (
'V.PIECHART1', 'ADVANCED', null,
'<?xml version="1.0" ?>
<AdvancedStyle>
<PieChartStyle pieradius="10">
<PieSlice name="low"   color="#ff0000"/>
<PieSlice name="medium"  color="#ffff00"/>
<PieSlice name="high" color="#00ff00"/>
</PieChartStyle>
</AdvancedStyle>',  null, null);

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

2. 次の例のように、作成したスタイルを使用した新規テーマを作成します。

INSERT INTO user_sdo_themes VALUES (
'THEME_PIE_CHART', null, 'COUNTIES', 'GEOM',
'<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule column="INC_LOW,INC_MED,INC_HIGH">
<features style="C.US MAP YELLOW">  </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. 作成したテーマを使用したマップ・リクエストを発行します。例3-9では、ステップ2で作成したTHEME_PIE_CHARTテーマを使用したマップをリクエストしています。

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

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

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

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

マップ・リクエストを発行する際に、動的(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.1.1.10 比率スケールおよび複数テーマ・スケール・モードを使用したマップ・リクエスト

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

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

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

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

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

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

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

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

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

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

<?xml version="1.0" standalone="yes"?>
<map_request
title="Binding Parameters and STRING_ARRAY type"
datasource = "mvdemo"
width="640"
height="480"
bgcolor="#a6cae0"
antialiase="false"
format="PNG_STREAM">

<themes>
<theme name="COUNTIES_BY_STATES" >
<binding_parameters>
<parameter value="FL,ME,CA,OH" type="STRING_ARRAY"/>
</binding_parameters>
</theme>
</themes>

</map_request>

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

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

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

<?xml version="1.0" standalone="yes"?>
<map_request
title="Cross advanced styles"
datasource="mvdemo"
width="640"
height="480"
bgcolor="#a6caf0"
antialiase="false"
format="PNG_STREAM"
>
<center size="7.7">
<geoFeature>
<geometricProperty typeName="center">
<Point>
<coordinates>-72.96,41.25</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>

<themes>
<theme name="cities">
<jdbc_query
label_column="city"
spatial_column="location"
label_style="T.CITY NAME"
jdbc_srid="8265"
datasource="mvdemo"
asis="false">select location,city,pop90,rank90 from cities
</jdbc_query>
<rendering>
<style name="POPVMK" value_columns="POP90">
<substyle name="EQRBRANK" value_columns="RANK90" changes="FILL_COLOR"/>
</style>
</rendering>
</theme>
</themes>

<styles>
<style name="STAR_TRANSP">
<svg width="1in" height="1in">
<desc/>
<g class="marker" style="stroke:#000000;fill:#FF0000;fill-opacity:0;width:15;height:15;font-family:Dialog;font-size:12;font-fill:#FF0000">
<polyline points="138.0,123.0,161.0,198.0,100.0,152.0,38.0,198.0,61.0,123.0,0.0,76.0,76.0,76.0,100.0,0.0,123.0,76.0,199.0,76.0"/>
</g>
</svg>
</style>

<style name="POPVMK">
<AdvancedStyle>
<VariableMarkerStyle basemarker="STAR_TRANSP" startsize="7" increment="5">
<Buckets>
<RangedBucket seq="0" label="100217 - 1905803.75" low="100217" high="1905803.75"/>
<RangedBucket seq="1" label="1905803.75 - 3711390.5" low="1905803.75" high="3711390.5"/>
<RangedBucket seq="2" label="3711390.5 - 5516977.25" low="3711390.5" high="5516977.25"/>
<RangedBucket seq="3" label="5516977.25 - 7322564" low="5516977.25" high="7322565"/>
</Buckets>
</VariableMarkerStyle>
</AdvancedStyle>
</style>

<style name="EQRBRANK">
<AdvancedStyle>
<BucketStyle>
<Buckets low="1" high="196" nbuckets="4" styles="C.RED,C.RB13_1,C.RB13_6,C.SEQ6_01"/>
</BucketStyle>
</AdvancedStyle>
</style>
</styles>

<legend bgstyle="fill:#ffffff;fill-opacity:50;stroke:#ff0000" profile="SMALL" position="SOUTH_EAST">
<column>
<entry text="Map Legend" is_title="true" />
<entry text="POP90:" />
<entry style="POPVMK" tab="1" />
<entry text="RANK90:" />
<entry style="EQRBRANK" tab="1" />
</column>
</legend>
</map_request>

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

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

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

<?xml version="1.0" standalone="yes"?>
<map_request
title="Theme with Stacked Styles"
datasource="mvdemo"
width="600"
height="450"
bgcolor="#a6caf0"
antialiase="true"
format="PNG_STREAM"
>
<center size="18">
<geoFeature>
<geometricProperty typeName="center">
<Point>
<coordinates>-122.729,40.423</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>
<themes>
<theme name="STACKEDSTYLES">
<jdbc_query
label_column="state"
spatial_column="geom"
label_style="T.STATE NAME"
jdbc_srid="8265"
datasource="mvdemo"
asis="false">select geom,state,HHI0_10,HHI10_15,HHI100UP,HHI15_25,HHI25_35 from states
</jdbc_query>
<rendering>
<style name="C.COUNTIES"/>
<style name="PIECHART1" value_columns="HHI0_10,HHI10_15,HHI100UP,HHI15_25,HHI25_35"/>
</rendering>
</theme>
</themes>

<styles>
<style name="piechart1">
<AdvancedStyle>
<PieChartStyle pieradius="10">
<PieSlice name="A" color="#FFFF00"/>
<PieSlice name="B" color="#000000"/>
<PieSlice name="H" color="#FF00FF"/>
<PieSlice name="I" color="#0000FF"/>
<PieSlice name="W" color="#FFFFFF"/>
</PieChartStyle>
</AdvancedStyle>
</style>
</styles>

</map_request>

3.1.1.14 WFSマップ・リクエスト

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

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

INSERT INTO user_sdo_themes  VALUES (
'BC_MUNICIPALITY',
'WFS theme',
'BC_MUNICIPALITY',
'THE_GEOM',
'<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wfs" service_url="http://www.refractions.net:8080/geoserver/wfs/GetCapabilities?" srs="EPSG:3005">
<rule>
<features style="C.BLUE"> </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.1.1.15 MapViewerを使用したJavaプログラム

例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.1.1.16 MapViewerを使用したPL/SQLプログラム

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

例3-19 MapViewerと対話するPL/SQLプログラム

set serverout on size 1000000;

--
--  Author: Clarke Colombo
--
declare

l_http_req   utl_http.req;
l_http_resp  utl_http.resp;
l_url        varchar2(4000):=  'http://my_corp.com:8888/mapviewer/omserver';

l_value      varchar2(4000);
img_url      varchar2(4000);
response     sys.xmltype;

output       varchar2(255);

map_req      varchar2(4000);

begin

utl_http.set_persistent_conn_support(TRUE);

map_req := '<?xml version="1.0" standalone="yes"?>
<map_request  title="MapViewer Demonstration"
datasource="mvdemo"
basemap="course_map"
width="500"
height="375"
bgcolor="#a6cae0"
antialiasing="false"
format="GIF_URL">
<center size="5">
<geoFeature>
<geometricProperty>
<Point>
<coordinates>-122.2615, 37.5266</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>
</map_request>';

l_http_req := utl_http.begin_request(l_url, 'POST', 'HTTP/1.0');

--
-- Sets up proper HTTP headers.
--
utl_http.set_header(l_http_req, 'Content-Type', 'application/x-www-form-urlencoded');
utl_http.set_header(l_http_req, 'Content-Length', length('xml_request=' || map_req));
utl_http.set_header(l_http_req, 'Host', 'my_corp.com');
utl_http.set_header(l_http_req, 'Port', '8888');
utl_http.write_text(l_http_req, 'xml_request=' || map_req);
--
l_http_resp := utl_http.get_response(l_http_req);

utl_http.read_text(l_http_resp, l_value);

response := sys.xmltype.createxml (l_value);

utl_http.end_response(l_http_resp);

img_url := response.extract('/map_response/map_image/map_content/@url').getstringval();

dbms_output.put_line(img_url);

end;
/

3.1.2 mapリクエストのDTD

mapリクエストの完全な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項で説明しています。残りの関連要素については、この後の項で要素名のアルファベット順に説明しています。

- 3.1.2.2項「bounding_themes要素」

- 3.1.2.3項「box要素」

- 3.1.2.4項「center要素」

- 3.1.2.5項「geoFeature要素」

- 3.1.2.6項「jdbc_georaster_query要素」

- 3.1.2.7項「jdbc_image_query要素」

- 3.1.2.8項「jdbc_network_query要素」

- 3.1.2.9項「jdbc_query要素」

- 3.1.2.10項「jdbc_topology_query要素」

- 3.1.2.11項「legend要素」

- 3.1.2.12項「map_tile_theme要素」

- 3.1.2.13項「north_arrow要素」

- 3.1.2.14項「operation要素」

- 3.1.2.15項「operations要素」

- 3.1.2.16項「parameter要素」

- 3.1.2.17項「scale_bar要素」

- 3.1.2.18項「style要素」

- 3.1.2.19項「styles要素」

- 3.1.2.20項「theme要素」

- 3.1.2.21項「themes要素」

3.1.2.1 map_request要素

<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要素が描画されます。

3.1.2.1.1 map_request属性

ルート要素の<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のキャッシュから得られるベース・マップを使用するリクエストに対して、回転はサポートされません。

3.1.2.2 bounding_themes要素

<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は、前述の例の表示を示しています。

図3-2 枠テーマ

3.1.2.3 box要素

<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に設定されていると、結果のマップ画像の変形を防ぐため、縦横比を保つように枠ボックスが変更されます。

3.1.2.4 center要素

<center>要素には、次の定義が含まれます。

<!ELEMENT center (geoFeature)>
<!ATTLIST center
size CDATA #REQUIRED
>

<center>要素は、結果のマップの中心の指定に使用します。これにはsizeという必須属性が含まれ、元のデータ単位でマップの垂直範囲を指定します。たとえば、ユーザーのデータが10進表記の度数で示されている場合、size属性は、10進表記の緯度を指定します。ユーザーのデータがメートル単位で投影されている場合、MapViewerではサイズがメートルで解釈されます。

中心自体には、3.1.2.5項で指定される<geoFeature>要素が埋め込まれる必要があります。

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軸から左回り)の方位ベクターを示しています。(方位を特定の角度により正確に一致させるには、三角法のテキストにある表のコタンジェント値またはタンジェント値を参照してください。)

図3-3 方位ベクトル

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つの同心円で囲まれた赤い星型マーカーで表されます。

図3-4 2つの同心円を示す<geoFeature>要素を含むマップ

3.1.2.6 jdbc_georaster_query要素

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項を参照してください。

3.1.2.7 jdbc_image_query要素

イメージ・テーマ(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を参照してください。

3.1.2.8 jdbc_network_query要素

ネットワーク・テーマの定義に使用される<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項を参照してください。

3.1.2.9 jdbc_query要素

<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を参照してください。

3.1.2.10 jdbc_topology_query要素

トポロジ・テーマの定義に使用される<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項を参照してください。

3.1.2.11 legend要素

<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つの凡例を示しています。

図3-5 列が2つのmap凡例

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:という説明テキストと区別しやすいものになります。

3.1.2.12 map_tile_theme要素

<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つに適合するように調整されます。

3.1.2.13 north_arrow要素

<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の北向き矢印の定義を示します。

例3-20 北向き矢印

<north_arrow>
<style> m.image41_bw </style>
<location> 35,35 </location>
<size> 16,32 </size>
</north_arrow>

3.1.2.14 operation要素

<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>値

正規化

normalize

(該当せず)

均等化

equalize

(該当せず)

線形伸長

linearstretch

name=autostretch(自動)

name=lowstretch(低伸長)

name=highstretch(高伸長)

区分線形伸長

piecewiselinearstretch

(該当せず)

輝度

brightness

value=[number]

コントラスト

contrast

value=[number]

しきい値の変更

changethreshold

name=threshold(しきい値)

name=lowsthreshold(低しきい値)

name=highthreshold(高しきい値)

3.1.2.15 operations要素

<operations>要素は1つ以上の<operation>要素(3.1.2.14項を参照)を指定します。<operations>要素には、次の定義が含まれます。

<!ELEMENT operations (oepration+) >

事前定義済GeoRasterテーマの場合、<operations>要素は、スタイリング・ルール定義の一部になります。例3-21は、正規化オペレーションを使用するGeoRasterテーマのスタイリング・ルールを示しています。

例3-22 GeoRasterテーマにおける正規化オペレーションのスタイリング・ルール

<styling_rules theme_type="georaster" raster_table="RDT_DEM"
raster_id="1">
<operations>
<operation name="normalize"/>
</operations>
</styling_rules>

3.1.2.16 parameter要素

<parameter>要素では、テーマに適用されるオペレーションで使用される値を定義します。(オペレーションは、<operations>要素(3.1.2.14項を参照)で指定します。)<parameter>要素には、次の定義が含まれます。

<!ELEMENT parameter >
<!ATTLIST parameter
name   CDATA #REQUIRED
value  CDATA #REQUIRED
>

どのパラメータも、名前とそれに関連する値を持つ必要があります。

3.1.2.17 scale_bar要素

<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)のデフォルト値、color2_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では、スケール・バーを定義します。

例3-23 スケール・バー

<scale_bar
position="SOUTH_WEST"
mode="US_MODE"
color1="#ff0000"
color1_opacity="128"
color2="#00ffff"
label_font_family="Dialog"
label_font_size="15"
label_font_style="italic"
label_font_weight="bold"
label_halo_size="2.8"
label_position="bottom"
offset_y="5"
/>

3.1.2.18 style要素

<style>要素には、次の定義が含まれます。

<!ELEMENT style (svg | AdvancedStyle)?>
<!ATTLIST style
name  CDATA #REQUIRED
>

<style>要素により、動的に定義されるスタイルを指定できます。スタイルは次のいずれかです。

- 色、線、マーカー、領域またはテキスト・スタイルを表すSVG記述

- バケット、カラー・スキームまたは可変マーカー・スタイルを表す拡張スタイル定義(A.6項を参照)

name属性は、スタイル名を識別します。

次の例では、mapリクエストに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>

3.1.2.19 styles要素

<styles>要素には、次の定義が含まれます。

<!ELEMENT styles (style+) >

<styles>要素は1つ以上の<style>要素(3.1.2.18項を参照)を指定します。

3.1.2.20 theme要素

<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サーバーへの接続を待機するミリ秒数を指定するオプション属性です。

3.1.2.21 themes要素

<themes>要素には、次の定義が含まれます。

<!ELEMENT themes (theme+) >

<themes>要素は、1つ以上の<theme>要素(3.1.2.20項を参照)を指定します。ベース・マップ(map_request要素のbasemap属性)を指定した場合、<themes>要素に指定したテーマは、ベース・マップに定義されたテーマの後に表示されます。ベース・マップを指定していない場合、指定されたテーマのみがレンダリングされます。

この<themes>要素の中には、1つ以上の子要素<theme>が含まれる必要があります。これらの子要素は、表示されている順序でレンダリングされます。

3.1.2.22 theme_modifiers要素

<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.3 情報リクエストのDTD

マップ・リクエスト(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>

3.1.4 マップ・レスポンスのDTD

マップ・リクエストの通常の処理から生成されるマップ・レスポンスの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>

3.1.5 MapViewer例外DTD

次のDTDは、mapリクエストの処理中に例外または回復不能なエラーが発生した場合、出力XMLで使用されます。

<!ELEMENT oms_error (#PCDATA)>

この要素には、例外またはエラー・メッセージが埋め込まれます。

3.1.6 ジオメトリDTD(OGC)

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)>

3.2 MapViewerマップ・データ・サーバー

MapViewerマップ・データ・サーバーは、データベースからクライアントへのライブ・データのストリーミング・サービスを提供します。このデータは、Oracle Maps JavaScript V2 APIクライアントで利用できます。また、V2 API編集ユーティリティで編集することもできます。さらに、データ同期タスクを処理するための、中間層コンポーネントとして使用されることもあります。

最も簡単に説明すると、クライアントはテーマの名前とオプションの枠ボックスを指定したリクエストをマップ・データ・サーバーに送信します。サーバーは、圧縮されたGeoJSON形式でライブ・データを返します(このデータには、ジオメトリと属性の両方が含まれています)。

次の内容について説明します。

- ドメインとマップ・データ・サーバーURLのパターン

- マップ・データ・サーバー・リクエストのパラメータ

- マップ・データ・サーバーから返されたデータの解釈

- マップ・データ・サーバー・エラーの処理

3.2.1 ドメインとマップ・データ・サーバーURLのパターン

マップ・データ・サーバーは、複数のドメインを使用します。それぞれのドメインが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パスは、このヘルプ・リクエストの場合にも必要とされます)。

3.2.2 マップ・データ・サーバー・リクエストのパラメータ

データを取得するマップ・データ・サーバー・リクエストでは、URLに適切な問合せパラメータが含まれている必要があります。データは、MapViewer事前定義済ジオメトリ・テーマかJDBCテーマからのものになります。

- 事前定義済ジオメトリ・テーマからのデータの取得

- JDBCテーマからのデータの取得

- JDBCテーマからの注釈テキストの取得

- トポロジ・データの取得

3.2.2.1 事前定義済ジオメトリ・テーマからのデータの取得

次のパラメータは、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

3.2.2.2 JDBCテーマからのデータの取得

次のパラメータは、動的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

3.2.2.3 JDBCテーマからの注釈テキストの取得

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"}}
]}

3.2.2.4 トポロジ・データの取得

トポロジ・セットは、トポロジ・プリミティブのセット(フェイス、エッジ、およびノード)で定義されます。それぞれのトポロジ地物は、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"}}
]}

3.2.3 マップ・データ・サーバーから返されたデータの解釈

マップ・データ・サーバーは、圧縮された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_という名前の疑似プロパティとして、常にプロパティ・リストに含まれている点に注意してください。

3.2.4 マップ・データ・サーバー・エラーの処理

マップ・データ・サーバーは、データ・リクエストを処理できない場合に、エラー・オブジェクトを含むJSONレスポンスを送信します。このJSONエラー・オブジェクトは、次のようなものになります。

{"error":
{"code": "ora-500",
"message": "Table requested does not exist",
"details": "maybe a stack trace here..."
}
}

前述のJSONオブジェクトでは、codeはマップ・データ・サーバーのみが理解するエラー・コードになり、messageには警告ダイアログでユーザーに表示できる短いメッセージが含まれています。また、detailsは、詳細を含めることができるオプションのフィールドです(これが含まれている場合は、スタック・トレースなどになります)。

3.3 マップ・タイル・サーバー

マップ・タイル・サーバーは、事前に生成される固定サイズのマップ画像タイルをフェッチ、キャッシュおよび提供するマップ画像キャッシング・エンジンです。これは、MapViewerサーバーの一部であるJavaサーブレットとして実装されます。マップ・タイル・サーバーは、タイルのズーム・レベルおよびタイル位置(メッシュ・コード)によって指定されたマップ画像タイルを要求するリクエストを受け付け、リクエストされたタイルをクライアントに返送します。

マップ・タイル・サーバーの基本的なワークフローを、図3-6に示します。

図3-6 マップ・タイル・サーバーのワークフロー

図3-6のように、マップ・タイル・サーバーは、マップ・タイルを求めるリクエストを受信すると、該当するタイルをキャッシュ・ストレージ・システム内で検索します。該当するタイルがキャッシュされていると、マップ・タイル・サーバーはそのタイルをクライアントに送信します。該当するタイルがキャッシュされていない場合は、該当するタイルをフェッチしてキャッシュに保存した後、クライアントに送信します。

MapViewer管理ツールを使用すると、マップ・タイル・サーバーを管理できます。

関連項目:

- 3.3.1項「マップ・タイル・サーバーの概念」

- 3.3.2項「マップ・タイル・サーバーの構成」

- 3.3.3項「マップ・キャッシュの自動更新」

- 3.3.4項「マップ・タイルのUTFGrid: 地物に関するテキスト情報を含める」

- 3.3.5項「外部マップ・ソース・アダプタ」

3.3.1 マップ・タイル・サーバーの概念

この項では、Oracle Mapsを効果的に使用するために知っておくべき、マップ・タイル・サーバーに関する概念について説明します。

関連項目:

- 3.3.1.1項「マップ・タイル層とマップ・タイル・ソース」

- 3.3.1.2項「マップ画像タイルのストレージ」

- 3.3.1.3項「マップ・タイルの座標系」

- 3.3.1.4項「タイル・メッシュ・コード」

- 3.3.1.5項「マップ・タイル・リクエスト」

- 3.3.1.6項「タイル処理ルール」

- 3.3.1.7項「タイルの背景色と範囲外の色」

3.3.1.1 マップ・タイル層とマップ・タイル・ソース

マップ・タイル層はすべてマップ・タイル・サーバーで管理されます。マップ・タイル・サーバーは、マップ・タイル層に属するマップ画像タイルのフェッチおよび格納を実行した後、マップ画像タイルをクライアントに返します。マップ・タイル・サーバーでは複数のマップ・タイル層を管理できます。

どのマップ・タイル層にも、事前定義済のズーム・レベルを複数持たせることができます。各ズーム・レベルに、0からn-1 (nはズーム・レベルの総数)のズーム・レベル番号のうち1つが割り当てられます。ズーム・レベル0は最もズーム・アウトしたレベル、ズーム・レベルn-1は最もズーム・インしたレベルです。

マップは、ズーム・レベルごとに、同一サイズの小さな一連のマップ画像タイルに均等に分割されています。クライアントは、そのズーム・レベルおよびタイル・メッシュ・コードによってマップ・タイルを指定します。

マップ・タイル層は、次の2つのタイプのソースから得られます。

- MapViewer内部のベース・マップ(MapViewerマップ・レンダリング・エンジンによってレンダリングされる)。MapViewerベース・マップは、事前定義済の一連のテーマから構成され、データベース・ビューUSER_SDO_MAPS内で事前定義済である必要があります。

- 外部Webマップ・サービス・プロバイダによってレンダリングされたマップ。外部Webマップ・サービス・プロバイダは、Webを介したクライアント・リクエストに対してマップのレンダリングおよび表示を実行するサーバーです。外部マップ・サービス・プロバイダからマップをフェッチできるアダプタを正しく構成すると、マップ・タイル・サーバーは該当する外部マップ・サービス・プロバイダによって生成された一連のマップ・タイルをフェッチして表示できるようになります。(マップ・タイル・サーバーが内部で動作しているMapViewer以外のMapViewerインスタンスも、外部マップ・サービス・プロバイダとみなされます。)

3.3.1.2 マップ画像タイルのストレージ

Oracle Mapsには、マップ画像タイルのストレージのための3つのオプションがあります。

- ローカル・ファイル・システムを使用してタイルを保存する。
ローカル・ファイル・システムをキャッシュに使用する場合、このストレージに使用するパスをマップ・タイル・サーバーの構成設定の一部としてカスタマイズできます。

- データベース表にタイルを保存する。
データベース表をキャッシュに使用する場合は、データベース表を作成し、USER_SDO_CACHED_MAPSビューで、タイル層のTILES_TABLE列をこの表に設定する必要があります。

- タイルを保存せずに直接ストリーミングする。
画像タイルをキャッシュしない場合は、それをタイル層の定義に示す必要があります。

3.3.1.2.1 ローカル・ファイル・システムを使用してタイルを保存

ファイル・システムには各タイル層の独自のストレージ・ルート・ディレクトリがあり、タイル層定義では<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)の値を持ちます。

3.3.1.2.2 データベース表にタイルを保存

画像タイルは、データベース表に保存できます。その手順は次のとおりです。

1. 画像タイルを保存する表を作成します。次に例を示します。

CREATE TABLE tile_dbt (
tile_layer varchar2(64),
zoom_level number,
x number,
y number,
modified TIMESTAMP,
data BLOB);
COMMIT;

2. 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';

3. MapViewerサーバーを再起動して、変更を有効にします。

この例を使用すると、タイル層DEMP_MAPのマップ画像タイルはデータベース表TILE_DBTに保存されます。

3.3.1.2.3 タイルを保存せずに直接ストリーミングを行う

タイルの内容が常に変更される可能性がある場合(雲量のリアルタイム衛星画像マップなど)、または画像タイルを保存しない場合は、タイルを保存せずに直接にストリーミングできます。

このオプションを選択するには、タイル層の定義で<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;

3.3.1.3 マップ・タイルの座標系

マップ・タイル・サーバーでは、同一サイズの小さな矩形のイメージ・タイルとして一連のマップ画像をキャッシュし、管理します。タイル処理は現在、任意の2次元のデカルト座標系でサポートされています。測地座標系も、デカルト座標系であるかのようにマッピングされる場合(図3-7のように経度および緯度が単に2つの直交軸として取り扱われる場合)はサポートされています。

図3-7 経度/緯度座標系を使用したタイル処理

ズーム・レベルごとに、マップ・タイルはマップ座標系全体を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)も指定する必要があります。

3.3.1.4 タイル・メッシュ・コード

各マップ・タイルは、(Mx, My)という整数のペアとして定義されるメッシュ・コードによって指定します(MxはタイルのXディメンション・インデックス、MyはタイルのYディメンション・インデックスを指定する)。タイルがXminから始まるXディメンション上のi番目のタイルである場合、Mxはi-1になります。タイルがYminから始まるYディメンション上のj番目のタイルである場合、Myはj-1になります。マップ上のタイルのメッシュ・コードを、図3-8に示します。

図3-8 タイルのメッシュ・コード

JavaScriptマップ・クライアントは、Webブラウザにマップを表示するのに必要なタイルを自動的に計算し、メッシュ・コードを指定したリクエストをサーバーに送信します。メッシュ・コードはアプリケーションにとって透過的であり、アプリケーションの開発者はメッシュ・コードを直接取り扱う必要がありません。

3.3.1.5 マップ・タイル・リクエスト

マップ・タイル・サーバーは、マップ・タイル・リクエストを処理します。マップ・タイル・リクエストは、キー/値ペア形式または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.

3.3.1.6 タイル処理ルール

マップの分割方法およびタイルの作成方法を決めるタイル処理ルールを作成する必要があります。マップ・タイル・サーバーは、そのようなタイル処理ルールを使用してマップを小さなマップ画像タイルに分割し、タイル・ストレージ・システムに格納します。そのようなルールは、JavaScriptマップ・クライアントも使用します。

1つのズーム・レベルに対応するタイルはすべて同じサイズなので、マップ・タイル・サーバーはタイルの分割を実行するために次の情報を必要とします。

- 画面ピクセルで指定したマップ・タイル画像のサイズ(幅と高さ)。これは、タイル画像の物理サイズです。

- マップ座標系に従って指定されたタイル・サイズ。たとえば、マップで測地座標系を使用する場合、タイルの幅と高さは度の単位で指定します。このサイズは、タイルの幅と高さを使用して明示的に指定することもできますし、マップ・スケールを使用して暗黙的に指定することもできます。(マップ・スケールとタイル画像のサイズから、マップ座標系に従ってタイルの幅と高さを求めることができます。)

先の情報が、ズーム・レベルに対応するタイル処理ルールになります。どのズーム・レベルも、独自のタイル処理ルールを持つ必要があります。マップ・タイル・サーバーに対して構成設定を指定する場合は、3.3.2項で示すように、タイル処理ルールを定義する必要があります。

3.3.1.7 タイルの背景色と範囲外の色

タイル層メタデータ定義には、タイルの色に影響を与える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ページの背景色によって置換されます。

3.3.2 マップ・タイル・サーバーの構成

マップ・タイル・サーバーの構成設定は、ローカルな構成ファイルおよびデータベース・ビューに格納されています。それらの設定は、カスタマイズが可能です。

関連項目:

- 3.3.2.1項「マップ・タイル・サーバーのグローバル構成」

- 3.3.2.2項「マップ・タイル層の構成」

- 3.3.2.3項「マップ・タイルのストレージ・スキーム: 内部メッシュ・コードまたはXYZ」

- 3.3.2.4項「外部Webマップ・ソースによるマップ・タイル層の作成」

3.3.2.1 マップ・タイル・サーバーのグローバル構成

ロギング・オプションやデフォルトのキャッシュ・ストレージ・ディレクトリといったマップ・タイル・サーバーのグローバル設定は、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つ作成され、マップ・タイル層用に使用されます。このサブディレクトリの名前は、マップ・タイル層の名前と同じになります。

3.3.2.2 マップ・タイル層の構成

マップ・タイル層の構成設定は、メタデータ・ビュー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が最後のレベル(最も多いマップ詳細が含まれる)です。

3.3.2.3 マップ・タイルのストレージ・スキーム: 内部メッシュ・コードまたはXYZ

<file_storage>要素(3.3.2.2項を参照)のxyz_storage_scheme属性では、マップ・タイルのディレクトリ構造がディスク・キャッシュで編成される方法を制御します。デフォルトのスキームでは、MapViewerの内部メッシュ・コードが使用されますが、XYZストレージ・スキームをかわりに選択することもできます。

図3-9は、両方のストレージ・スキームを示しています。

図3-9 内部メッシュ・コード・スキームとXYZマップ・タイル・ストレージ・スキーム

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)を示しています。

3.3.2.4 外部Webマップ・ソースによるマップ・タイル層の作成

外部Webマップ・ソースを使用してマップ・タイル層を作成するには、次のようにします。

1. MapViewer管理コンソールにログインします。

2. 「タイル層の作成」をクリックします。

3. このタイル層のマップ画像ソースとして「外部」を選択し、「続行」をクリックします。

4. 外部マップ・ソースのマップ・タイル層の作成 ページで、適切な情報を入力します。
名前:タイル層の名前。例: 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

5. 「送信」をクリックして、タイル層を作成します。
情報: 新しいマップ・タイル層が正常に作成されましたというメッセージが表示されます。

作成された層を確認するには、左側の「タイル層の管理」をクリックし、タイル層を選択し、「マップの表示」→「タイルの管理」をクリックしてマップをプレビューします。

3.3.3 マップ・キャッシュの自動更新

マップ・キャッシュの自動更新機能は、ダーティになったキャッシュ・マップ・タイルを定期的に更新します。キャッシュ・マップ・タイルは、更新、挿入または削除操作によって実表内のデータが変更されるとダーティになります。それは、このような変更が、すでにキャッシュされているマップ・タイルの図形、注釈またはレンダリング・スタイルの選択に影響を与える可能性があるからです。ダーティ・タイルの更新は、次のいずれかの操作を呼び出します: a)リフレッシュ:キャッシュされたダーティ・タイルを削除した後、それらを再フェッチ。または、b)クリア:キャッシュされたダーティ・タイルの削除のみ。タイル層の自動更新を有効にするには、次の主要手順を実行します。

1. mapViewerConfig.xml構成ファイルへの<dirty_tile_auto_update>要素の追加。

2. タイル層定義への<auto_update>要素の追加。

3. ダーティなMBR表、実表のログ表およびトリガーの作成。

タイルの自動更新をテストする場合は、3.3.3.4項「MapViewerサーバーの起動およびマップ・キャッシュの自動更新機能のテスト」の説明を参照してください。

3.3.3.1 mapViewerConfig.xml構成ファイルへの<dirty_tile_auto_update>要素の追加

<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>要素がロードされ、そのサーバーのすべてのタイル層に適用されます。この要素が見つからない場合、サーバーのタイル層の自動更新機能は無効になります。

3.3.3.2 タイル層定義への<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項の例を参照)。

3.3.3.3 ダーティなMBR表、実表のログ表およびトリガーの作成

この項では、ダーティなMBR表、実表のログ表およびトリガーを作成するための処理の例を全体的に示します。この例のセグメントは、DEMO_MAPというベース・マップがすでに定義されており、スキーマにアクセスするMVDEMOという1つのデータソースが存在することを前提としています。

例のコード・セグメントには説明のコメントが含まれており、次の処理を実行します。

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;

2. ダーティな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;
/

3. ログ表を作成します。
実表のログ表には、タイル層の実表で変更された行が記録されます。各タイル層はマップ・タイルの生成時にその実表内のデータに依存するため、実表に対する変更は(ジオメトリの変更や属性値に対する変更など)、対応するマップ・タイルの表示に影響する場合があります。このような変更は、実表に作成されたトリガーを通じて変更ログ表に記録されます。

次の文は、ログ表およびシーケンスを作成し、シーケンスを使用して一意の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;
/

4. ログ表に変更を挿入するために各実表上のトリガーを作成します。
実表のトリガーでは、ログ表に挿入されたジオメトリはタイル層と同じ空間参照システム(座標系)に変換されます。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;

3.3.3.4 MapViewerサーバーの起動およびマップ・キャッシュの自動更新機能のテスト

タイルの自動更新をテストするには、MapViewerサーバーを起動し、実表内の1つ以上の行を変更します。

1. 実表内の行を変更します。次に例を示します。

update cities set city='Worcester' where city='Worcester' and state_abrv='MA';

2. ログ表を確認します。次に例を示します。

select * from log_mcau_tl;

実表のトリガーによって挿入された行が結果に含まれている必要があります。

3. しばらく待って1つの間隔が経過したころに(この例では1分)、ダーティなMBR表を確認します。次に例を示します。

select count(*) from mbr_mcau_tl;

サーバーによって挿入されたダーティなMBR行が結果に含まれている必要があります。

また、ダーティなMBR表のrefresh_status列の変化を見ることもできます。行が最初に挿入されると、ステータスは未処理を表すnに設定されます。その後、処理が実行されると保留中を表すpに、更新が完了すると処理済を表すyに変更されます。また、サーバーでは、タイルがサーバーによって更新されたことを確認できます(最も詳細なログ情報を表示するには、サーバーのロガーをfinestに設定する必要があります)。

3.3.4 マップ・タイルのUTFGrid: 地物に関するテキスト情報を含める

タイル層のUTFGridが有効になっていると、UTFGridという名前のデータセットは画像タイルの「コンパニオン」になります。コンパニオンは、画像タイル内の地物に関するテキスト情報を含んでいます。このテキスト情報は、マウス・イベント(マップ地物上でマウスをクリックするなど)への応答時にブラウザで表示できます。

UTFGridデータセットは、JSON形式で保存されます。また、2つのコンポーネント(a)コンパニオン画像タイルをミラーするグリッド・データセットと、(b)すべてのグリッド・セルの属性が含まれています。各グリッド・セルの値は、画像タイル・セルとその属性をリンクするためのキーの役割を果たします。マップ上の各画像ピクセルは、UTFGridグリッド・セルに関連付けられていて、そのセルの値は属性(テキスト文字列)が取得できる場所を示しています。ストレージを効果的に使用するために、各グリッド・セルの値は改訂されたUTF-8コード体系でエンコードされます。

次の内容について説明します。

- タイル層のUTFGridオプションの有効化

- キーのエンコードとグリッド・セルの値のデコード

- UTFGridテスト・ケースの作成

3.3.4.1 タイル層のUTFGridオプションの有効化

マップ・タイル層の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オプションは、現時点では、画像タイルがデータベース表に保存されていて(「データベース表にタイルを保存」を参照)、タイル層のディスク・キャッシュが無効化されている(「タイルを保存せずに直接ストリーミングを行う」を参照)ときにはサポートされません。

3.3.4.2 キーのエンコードとグリッド・セルの値のデコード

1つのタイル層には複数のデータ層またはテーマを含めることができます。それぞれのテーマが独自のグリッド・データセットを保持し、1つのUTFGrid JSONオブジェクトには複数のグリッド・データセットが含まれている可能性があります。各テーマのグリッドでは、その画像タイルに示される地物も各地物のレンダリングするためのスタイルを使用して描画されます。それに関連付けられた画像タイルについては、地物がキーを使用して描画されます。また、キーは各地物に割り当てられた序数になります。この数値は、セルの値にUTF-8エンコードされた値を割り当てるために使用されます。

画像タイル内の地物でマウス・イベントがトリガーされると、画像ピクセルの対応するグリッド・セルが特定できるようになるため、セルの値(UTF-8エンコードされた値)を取得できます。このUTF-8エンコードされた値は、キー(序数)を導出するためにデコードされます。このキーを使用すると、保存されている属性を取得できます。(「UTFGridテスト・ケースの作成」の後半にあるサンプルを参照)。

3.3.4.3 UTFGridテスト・ケースの作成

このテスト・ケースは、サーバー側に焦点を合わせています。重要な手順は2つあります。1つはUTFGrid対応のタイル層を作成すること、もう1つはハードコード化された複数の要求をサーバーに送信することです。(実際のアプリケーションでは、タイル層を使用するためのクライアント側マップ・アプリケーションを用意する必要があります)。

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;

2. マップ画像とそのUTFGridオブジェクトをリクエストします。
実際のアプリケーションでは、マップ画像タイルとそのコンパニオンUTFGrid JSONファイルのリクエストは、MapViewer HTML5 V2 APIで処理されます。ただし、説明のために、ここではハードコード化された要求による2つの副手順を示します。

1. サーバーからの画像タイルをリクエストします。次に例を示します。
http://localhost:8080/mapviewer/mcserver?request=gettile&format=png&zoomlevel=8&mapcache=MVDEMO.UTFGRID_TL&mx=77&my=94

サーバーのレスポンスは、次のとおりです。

2. サーバーからの画像タイルのコンパニオン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>要素が定義されていないため、そのテーマに関するものはレスポンスにリストされません)。

3.3.5 外部マップ・ソース・アダプタ

外部マップ・ソース・アダプタは、マップ・タイル・サーバーと外部マップ・サービス・プロバイダの間のインタフェースです。外部マップ・サービス・プロバイダからマップ画像タイルをフェッチする必要がある場合、マップ・タイル・サーバーはタイルのズーム・レベル、サイズおよび位置に関する情報を指定して、外部マップ・ソース・アダプタをコールします。外部マップ・ソース・アダプタはその後、プロバイダに固有のリクエストを作成した後、そのリクエストを外部マップ・サービス・プロバイダに送信し、得られたイメージ・タイルをマップ・タイル・サーバーに返します。

外部マップ・ソース・アダプタは、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;
}
}
}

4 MapViewerのJavaBeanベースAPI

この章では、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サービスへ送信することです。

この章の主な項目は、次のとおりです。

- 4.1項「MapViewerのJavaBeanベースAPIの使用モデル」

- 4.2項「MapViewerのJavaBeanベースAPIを使用する前に」

- 4.3項「MapViewer Beanの使用方法」

4.1 MapViewerのJavaBeanベースAPIの使用モデル

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の使用例

図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項を参照してください。

4.2 MapViewerのJavaBeanベースAPIを使用する前に

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に進みます。

4.3 MapViewer Beanの使用方法

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項を参照)を参照してください。

4.3.1 MapViewer Beanの作成

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要素および属性の説明を参照してください。

4.3.2 現行mapリクエストのパラメータの設定

第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を設定します。

- setSize(double size)は、ユーザー・データ領域で生成されるマップの高さ(サイズ)を設定します。

- 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です。

- setSVGZoomLevels(int zlevels)は、SVGマップのズーム・レベルの数値を設定します。

- setSVGZoomRatio(double s)は、SVGマップが最初にロードされるときに使用されるズーム係数を設定します。デフォルト値は1で、これが元のマップ・サイズ(ズーム・レベル0)です。ズーム比を大きくするとマップはズームイン表示され、値を小さくするとズームアウト表示されます。

- setWebProxy(java.lang.String proxyHost, java.lang.String proxyPort)は、MapViewerサービスに接続する際に使用されるWebプロキシを設定します。このメソッドは、WebサービスとこのBean間にファイアウォールが存在する場合にのみ必要です。

deleteMapLegendメソッドをコールすると、現行マップ・リクエストからマップ凡例を削除できます。

4.3.3 現行mapリクエストへのテーマまたは地物の追加

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が格納されている必要があります。拡張スタイルで使用するために、ポイント地物に属性値を割り当てられます。向きのあるポイント地物の場合は、方向パラメータを指定できます。追加できるポイント地物の数は無制限です。

- addPredefinedThemeおよびその変種は、現行マップ・リクエストに事前定義済テーマを追加します。

- addShortestPathおよびその変種は、ネットワーク・テーマを現行マップ・リクエストに追加します。追加されるテーマは、ネットワーク・データの最短パス分析の結果となります。最短パス・アルゴリズムに必要なパラメータを指定する必要があります。

- addThemesFromBaseMap(java.lang.String basemap)は、指定されたベース・マップ内のすべての事前定義済テーマを現行マップ・リクエストに追加します。このメソッドは、現行マップ・リクエストのテーマを操作できるという点で、setBaseMapName(4.3.5項を参照)よりも便利です。

- addTopologyDebugThemeおよびその変種は、トポロジ・データ構造をトポロジ・デバッグモード・テーマとして現行マップ・リクエストに追加します。輪郭、ノードおよび表面のレンダリング・スタイルを指定する必要があります。(デバッグ・モードなどのトポロジ・テーマの詳細は、2.3.6項を参照してください。)

- addTopologyThemeは、トポロジ地物をトポロジ・テーマとして現行マップ・リクエストに追加します。問合せ文字列を指定する必要があります。(トポロジ・テーマの詳細は、2.3.6項を参照してください。)

追加したポイント地物および線形地物をすべて削除するには、それぞれremoveAllPointFeaturesメソッドおよびremoveAllLinearFeaturesメソッドをコールします。

4.3.4 マップ・リクエストへの動的に定義されたスタイルの追加

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メソッドをコールして、すべての動的に定義されたスタイルを現行マップ・リクエストから削除したりできます。

4.3.5 現行mapリクエストにおけるテーマの操作

addで始まるメソッドを使用してテーマを追加した後、テーマ名のリスト表示などの処理の実行、現行リクエストにおけるレンダリング順序でのテーマの順序変更、およびテーマの無効化や無効化されたテーマの有効化といった操作が可能です。ただし、(setBaseMapNameメソッドを使用して)ベース・マップを設定したときに暗黙的に含まれたテーマは操作できません。これは、MapViewerサービスがリクエストを処理するまで、ベース・マップ内のテーマのリストは実際に含められないためです。

現行mapリクエストのテーマを操作するメソッドには、次のようなものがあります。

- deleteAllThemesは、追加されたすべてのテーマを現行マップ・リクエストから削除します。

- deleteTheme(java.lang.String name)は、明示的に追加されたテーマを現行マップ・リクエストから削除します。

- enableThemes(java.lang.String[] themes)は、名前が指定リストに含まれるすべてのテーマを有効化します。

- getActiveTheme(double currentScale)は、アクティブなテーマ、つまり、現行の表示マップ上の最上部のテーマの名前を取得します。

- getEnabledThemesは、現在有効であるすべてのテーマのリストを取得します。

- getThemeEnabled(java.land.String themeName)は、指定されたテーマが現在有効であるかどうかを判断します。

- getThemeNamesは、現行マップ・リクエストに明示的に追加されたテーマの名前の順序付けられたリストを返します。

- getThemePosition(java.lang.String name)は、明示的に追加されたテーマのレンダリング順序内の位置を返します。

- getThemeVisibleInSVG(java.lang.String name)は、指定されたテーマが現在SVGマップに表示されているかどうかを判断します。(テーマが表示可能でない場合は、非表示になっています。)

- hasThemesは、現行マップ・リクエストに、明示的に追加されたテーマが含まれるかどうかをチェックします。たとえば、現行リクエストでベース・マップ名のみを設定しており、いずれかのadd*Themeメソッドを使用して他のテーマを追加していない場合、このメソッドはFALSEを返します。

- moveThemeDown(int index)は、レンダリングされるテーマのリストでテーマを1つ下に移動し、レンダリングの順序を後にします。

- moveThemeUp(int index)は、レンダリングされるテーマのリストでテーマを1つ上に移動し、レンダリングの順序を先にします。

- setAllThemesEnabled(boolean v)は、すべてのテーマを有効または無効に設定します。

- 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)に設定します。非表示に設定した場合でもテーマはレンダリングされますが、表示はされません。

4.3.6 MapViewerサービスへのリクエストの送信

一般にアプリケーション開発者は、特定のユーザー入力(現在表示されているマップでのマウス・クリックなど)の結果として、またはマップ・リクエストの一部の外観(新規バックグラウンド・カラーの設定など)を変更した後に、新規マップ・リクエストを発行します。実際には、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サービスでの処理中に回復不能なエラーが発生した場合、例外をスローします。こうした例外には、リクエストを再試行したり、問題を直接ユーザーに報告するなど、適切な方法で対応する必要があります。

4.3.7 現行マップ・レスポンスからの情報の抽出

生成されたマップ画像または画像のURLなどの情報を、現行マップ・レスポンスから抽出できます。マップ・レスポンスから情報を抽出するためのメソッドには、次のようなものがあります。

- getGeneratedMapImageは、MapViewerサービスからのレスポンスに含まれる実際のマップ画像データを返します。その画像形式は、setImageFormatメソッドを使用して、FORMAT_RAW_COMPRESSEDに設定する必要があります。getGeneratedMapImageメソッドは、主にシック・クライアントで使用されますが、JavaServer Pageまたはサーブレットでも使用できます(MapViewerではサポートされていない形式で画像を保存する場合など)。

- getGeneratedMapImageURLは、アプリケーション・サーバーの、現在生成されているマップ画像に対するURLを返します。setImageFormatメソッドを使用して、画像形式をFORMAT_PNG_URLまたはFORMAT_GIF_URLに設定しておく必要があります。

- getMapMBRは、ユーザーのデータ領域における、現在生成されているマップのMBR(最小外接矩形)を返します。

- getMapResponseStringは、前回のマップ・レスポンスをXML形式で返します。

4.3.8 データソースに関する情報の取得

MapViewer Beanには、データソースに関する情報の取得に使用できるメソッドがあります。このようなメソッドには、次のようなものがあります。

- dataSourceExists(java.lang.String dsrc)は、特定のデータソースがMapViewerサービスに存在する(つまり、MapViewerサービスに認識されている)かどうかをチェックします。

- getDataSources()は、サーバー内の現在使用可能なデータソースをリストします。このメソッドは名前のみリストし、各データソースについてのその他の詳細(データベース・ホストやユーザー・ログイン情報)はリストしません。

4.3.9 現行マップ・ウィンドウでの非空間属性の問合せ

多くの場合、現行マップ画像に表示されている空間地物に関連付けられた非空間属性を問い合せる必要があります。たとえば、特定の郡または郵便番号に属するすべての顧客所在地のマップを描画するためにマップ・リクエストを発行したとします。論理上の次の手順は、結果のマップ画像に表示された各顧客に関する詳細を調べることです。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配列を返します。

4.3.10 シック・クライアントに対する最適なメソッドの使用

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)は、ユーザーがクリックした地物の非空間属性を取得します。

- getNumLiveFeaturesは、現在使用可能なライブ地物の数を返します。

- hasLiveFeaturesは、ライブ(クリッカブル)地物の有無をチェックします。

- highlightFeaturesおよびその変種は、ユーザー指定の矩形と交差しているすべてのライブ地物をハイライトします。これらのメソッドでは、ハイライトした地物のスタイルも指定できます。

- isClickable(java.lang.String themeName)は、指定したテーマがクリッカブルかどうか(つまり、ユーザーがテーマをクリックしてその属性を取得できるかどうか)をチェックします。

- setClickable(boolean v, java.lang.String themeName)は、テーマをクリッカブルに設定します(これにより、テーマの地物はライブ地物としてクライアントで使用可能になり、ユーザーがクリックしてその属性を取得できるようになります)。

一連の地物を取得し、これらをシック・クライアントでライブにしておくには、最初にsetClickableをコールし、地物をライブにするテーマを設定する必要があります。次に、現行マップ・リクエストを発行した後、BeanがMapViewerサービスからのレスポンスを処理します。このレスポンスには(成功した場合)、ベース・マップの画像およびLiveFeatureインスタンスの配列の両方が含まれます。その後、getGeneratedMapImageをコールしてベース画像を取得および描画し、drawLiveFeaturesを使用して、ベース・マップの上に一連のライブ地物をレンダリングできます。ユーザーがマップ上の特定の位置でマウスをクリックしたり動かしたりした場合、highlightFeaturesメソッドを使用して、マップ上の選択された地物をハイライトできます。また、getLiveFeatureAttrsメソッドを使用して、ハイライトされた地物に関連付けられている非空間属性を取得できます。LiveFeatureインスタンス自体には直接アクセスできません。

この項で説明したメソッドをJSPページのコンテキストでコールした場合の動作は、定義されていません。

5 MapViewer XMLリクエスト: 管理およびその他

MapViewerの主な用途は、様々なマップ・リクエストの処理です。ただし、MapViewerは、そのXML APIを通じて様々な管理(非マップ)リクエストを受け入れます。たとえば、データソースを追加するリクエストの他、使用可能なテーマ、ベース・マップおよびタイル層をリストするリクエストなど、アプリケーションの開発に役立つ(汎用)リクエストがあります。すべてのMapViewer管理リクエストは、MapViewer管理(Admin)ページへのログインを必要とし、そのためのリンクがMapViewerのメイン・ページに表示されます。汎用リクエストはログインを必要とせず、アプリケーションから送信できます。この項では、各リクエストおよびそのレスポンスの書式について説明します。

XMLリクエストはすべて<non_map_request>または<map_cache_admin_request>要素に埋め込まれ、レスポンスはすべて<non_map_response>または<map_cache_admin_response>要素にそれぞれ埋め込まれます。ただし、どのリクエストでも例外が発生する場合があり、このときのレスポンスは<oms_error>または<mcs_error>要素になります(第3.1.5項を参照)。

管理リクエストは、実行されるタスクの種類に応じた項で説明します。

- データソースの管理

- タイル層の管理

- 全マップのリスト(汎用)

- テーマのリスト(汎用)

- スタイルのリスト(汎用)

- 事前定義済テーマで使用されるスタイルのリスト(汎用)

- スタイル定義の取得(汎用)

- メモリー内キャッシュの管理

- MapViewer構成ファイルの編集(管理)

- MapViewerサーバーの再起動(管理)

各項のタイトルで、そのリクエストが管理リクエストか汎用リクエストかを判断できます。

5.1 データソースの管理

データソースを追加、削除、再定義およびリストできます。(データソースの詳細およびその定義方法は、1.6.2.15項を参照してください。)

5.1.1 データソースの追加(管理)

注意:
このリクエストは通常、開発時やテスト時にデータソースを素早く動的に追加する場合(mapViewerConfig.xmlファイルの編集が必要な永続的データソースの作成を行わない場合)に使用します。本番用、またはMapViewerの提供する完全なデータソース機能を利用する場合は、常に永続的データソースを使用する必要があります。

<add_data_source>要素には、次の定義が含まれます。

<!ELEMENT non_map_request  add_data_source>
<!ELEMENT add_data_source  EMPTY>
<!ATTLIST add_data_source
name              CDATA #REQUIRED
container_ds      CDATA #IMPLIED
jdbc_tns_name     CDATA #IMPLIED
jdbc_host         CDATA #IMPLIED
jdbc_port         CDATA #IMPLIED
jdbc_sid          CDATA #IMPLIED
jdbc_user         CDATA #IMPLIED
jdbc_password     CDATA #IMPLIED
jdbc_mode         (oci8 | thin) #IMPLIED
number_of_mappers INTEGER #REQUIRED
>

name属性は、データソース名を識別します。この名前は、MapViewerデータソース間で一意である必要があります。(データソース名は、大/小文字が区別されません。)

コンテナ・データソース名、ネット・サービス名(TNS名)または必要なすべての接続情報を指定する必要があります。つまり、次のうち1つのみの指定が必要です。

- container_ds

- jdbc_tns_name

- jdbc_host、jdbc_port、jdbc_sid、jdbc_mode、jdbc_userおよびjdbc_password

container_ds属性は、Java EEコンテナのJava Naming and Directory Interface (JNDI)名前空間で定義されているデータソース名を識別します。

jdbc_tns_name属性では、tnsnames.oraファイルで定義されているネット・サービス名を識別します。

jdbc_host属性は、データベース・ホスト・システム名を識別します。

jdbc_port属性は、TNSリスナー・ポート番号を識別します。

jdbc_sid属性は、データベースのSIDを識別します。

jdbc_user属性は、(map)に接続するユーザーを識別します。

jdbc_password属性は、jdbc_user属性で指定されているユーザーのパスワードを識別します。MapViewerによってこのパスワード文字列が変更されることはありません。大文字または小文字の変換も行われません。データベースで大/小文字を区別したパスワードが使用される場合は、指定したパスワードがデータベースのパスワードと完全に一致する必要があります。

jdbc_mode属性は、JDBC接続モード(thinまたはoci8)を識別します。oci8を指定した場合、MapViewerが動作する中間層にOracle Clientがインストールされている必要があります。すべてのデータソースにthinが使用される場合、Oracle Clientは必要ありません。

number_of_mappers属性は、該当するデータソースについて作成されるマップ・レンダラの数(つまり、MapViewerが同時に処理できるリクエスト数)を識別します。未処理のマップ・リクエストはキューに入れられ、最終的には処理されます。たとえば、この値が3の場合、MapViewerでは最大3つのマップ・リクエストを同時に処理できます。3つのリクエストの処理中に送信された4つ目のマップ・リクエストは、MapViewerが現在のリクエストのいずれかの処理を完了するまで待機します。単一データソースの最大mapper数は64です。

例5-1では、必要なすべての接続情報を指定して、mvdemoというデータソースを追加します。

例5-1 詳細な接続情報の指定によるデータソースの追加

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<add_data_source
name="mvdemo"
jdbc_host="elocation.example.com"
jdbc_port="1521"
jdbc_sid="orcl"
jdbc_user="scott"
jdbc_password="password"
jdbc_mode="thin"
number_of_mappers="5"/>
</non_map_request>

例5-2では、コンテナ・データソース名を指定して、mvdemoというデータソースを追加します。

例5-2 コンテナ・データソースの指定によるデータソースの追加

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<add_data_source
name="mvdemo"
container_ds="jdbc/OracleDS"
number_of_mappers="5"/>
</non_map_request>

add_data_sourceリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response add_data_source>
<!ELEMENT add_data_source  EMPTY>
<!ATTLIST add_data_source
succeed   (true | false) #REQUIRED
comment   CDATA #IMPLIED
>

リクエストが成功しなかった場合にのみcomment属性が表示されます。この場合は、理由がcomment属性に含まれます。次の例のsucceed="true"は、ユーザー・リクエストがサーバーに到着し、妥当性に関して例外が発生することなく処理されたことを示します。これは、リクエストに含まれるユーザーの意図したアクションがMapViewerサーバーで実際に実行されたかどうかを示すものではありません。この例では、comment属性の表示によりリクエストが失敗したことがわかり、comment属性に関連付けられた文字列("data source already exists")によって失敗の理由がわかります。

<?xml version="1.0" ?>
<non_map_response>
<add_data_source succeed="true" comment="data source already exists"/>
</non_map_response>

5.1.2 データソースの削除(管理)

<remove_data_source>要素は、永続的データソースの削除や、データソースの動的な追加に使用できます。この要素には、次の定義が含まれます。

<!ELEMENT non_map_request remove_data_source>
<!ELEMENT remove_data_source  EMPTY>
<!ATTLIST remove_data_source
data_source    CDATA #REQUIRED
jdbc_password  CDATA #REQUIRED
>

data_source属性は、削除されるデータソースの名前を識別します。

jdbc_password属性は、データソース内のデータベース・ユーザーのログイン・パスワードを識別します。jdbc_passwordはセキュリティ上の理由(MapViewerからデータソースを誤って削除してしまうのを防ぐため)から、必須になっています。

データソースを削除した場合、MapViewerが対応するデータベース・スキーマを使用できなくなるのみで、そのスキーマの内容は実際には削除されません。

例5-3では、mvdemoというデータソースを削除します。

例5-3 データソースの削除

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<remove_data_source data_source="mvdemo" jdbc_password="password"/>
</non_map_request>

remove_data_sourceリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response remove_data_source>
<!ELEMENT remove_data_source  EMPTY>
<!ATTLIST remove_data_source
succeed  (true | false) #REQUIRED
>

次に例を示します。

<?xml version="1.0" ?>
<non_map_response>
<remove_data_source succeed="true"/>
</non_map_response>

5.1.3 データソースの再定義

注意:
開発時またはテスト時にのみ使用するリクエストです。本番作業では使用しないでください。

便宜上、MapViewerではデータソースを再定義できます。具体的には、同じ名前のデータソースがすでに存在するとそのデータソースは削除され、新規の定義を使用して追加されます。その名前のデータソースが存在しない場合、新規データソースが追加されます。リクエストで指定したものと同じ名前、ホスト、ポート、SID、ユーザー名、パスワード、モードおよびmapper数のデータソースがすでに存在する場合、そのリクエストは無視されます。

<redefine_data_source>要素には、次の定義が含まれます。

<!ELEMENT non_map_request redefine_data_source>
<!ELEMENT redefine_data_source  EMPTY>
<!ATTLIST redefine_data_source
name              CDATA #REQUIRED
container_ds      CDATA #IMPLIED
jdbc_tns_name     CDATA #IMPLIED
jdbc_host         CDATA #IMPLIED
jdbc_port         CDATA #IMPLIED
jdbc_sid          CDATA #IMPLIED
jdbc_user         CDATA #IMPLIED
jdbc_password     CDATA #IMPLIED
jdbc_mode         (oci8 | thin) #IMPLIED
number_of_mappers INTEGER #REQUIRED
>

属性およびその説明は、<add_data_source>要素と同じです。5.1.1項を参照してください。

redefine_data_sourceリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response redefine_data_source>
<!ELEMENT redefine_data_source  EMPTY>
<!ATTLIST redefine_data_source
succeed  (true | false) #REQUIRED
>

次に例を示します。

<?xml version="1.0" ?>
<non_map_response>
<redefine_data_source succeed="true"/>
</non_map_response>

5.1.4 全データソースのリスト(管理または汎用)

<list_data_sources>要素は、現在実行中のMapViewerによって認識されている全データソースをリストします。これには、次の定義が含まれます。

<!ELEMENT non_map_request list_data_sources>
<!ELEMENT list_data_sources  EMPTY>

次に例を示します。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<list_data_sources/>
</non_map_request>

list_data_sourcesリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response map_data_source_list>
<!ELEMENT map_data_source_list  (map_data_source*) >
<!ATTLIST map_data_source_list
succeed      (true|false) #REQUIRED
>
<!ELEMENT map_data_source  EMPTY>
<!ATTLIST map_data_source
name         CDATA #REQUIRED
container_ds CDATA #IMPLIED
host         CDATA #IMPLIED
sid          CDATA #IMPLIED
port         CDATA #IMPLIED
user         CDATA #IMPLIED
mode         CDATA #IMPLIED
numMappers   CDATA #REQUIRED
>

各データソースについて次の情報が返されます。

- リクエストを発行するユーザーがMapViewer管理者としてログインしている場合、データベース・ユーザーのパスワードを除くすべてのデータソース情報が返されます。

- リクエストを発行するユーザーがMapViewer管理者としてログインしていない場合、データソース名のみが返されます。

次の例は、リクエストがMapViewer管理者によって発行された場合の、2つのデータソースに関する情報が含まれたレスポンスです。

<?xml version="1.0" ?>
<non_map_response>
<map_data_source_list succeed="true">
<map_data_source name="mvdemo" host="elocation.example.com"
sid="orcl" port="1521" user="scott" mode="thin" numMappers="3"/>
<map_data_source name="geomedia" host="geomedia.example.com"
sid="orcl" port="8160" user="scott" mode="oci8" numMappers="7"/>
</map_data_source_list>
</non_map_response>

次の例は、同じリクエストがMapViewer管理者以外のユーザーによって発行された場合のレスポンスです。

<?xml version="1.0" ?>
<non_map_response>
<map_data_source_list succeed="true">
<map_data_source name="mvdemo"/>
<map_data_source name="geomedia"/>
</map_data_source_list>
</non_map_response>

5.1.5 データソースの有無のチェック(汎用)

<data_source_exists>要素は、指定したデータソースが存在するかどうかを確認できます。これには、次の定義が含まれます。

<!ELEMENT non_map_request data_source_exists>
<!ELEMENT data_source_exists  EMPTY>
<!ATTLIST data_source_exists
data_source   CDATA #REQUIRED
>

次に例を示します。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<data_source_exists data_source="mvdemo"/>
</non_map_request>

data_source_existsリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response data_source_exists>
<!ELEMENT data_source_exists  EMPTY>
<!ATTLIST data_source_exists
succeed   (true | false) #REQUIRED
exists    (true | false) #REQUIRED
>

succeed属性は、リクエストが正常に処理されたかどうかを示します。

exists属性は、データソースが存在するかどうかを示します。

次に例を示します。

<?xml version="1.0" ?>
<non_map_response>
<data_source_exists succeed="true" exists="true"/>
</non_map_response>

5.2 タイル層の管理

タイル層の管理リクエストはすべて、<map_cache_admin_request>要素に埋め込まれます。これらのレスポンスは<map_tile_server_response>要素に埋め込まれますが、<get_client_config>は例外であり、そのレスポンス・ドキュメントの形式は異なる場合があります。エラーが発生した場合、レスポンスは対応するエラー・メッセージを含む<mcs_error>要素を返します。

2つのタイル層管理リクエスト<get_client_config>と<get_cache_status>は非管理モードで送信でき、この場合、管理コンソールにログインする必要はありません。

タイル層の管理タスクは次のとおりです。

- クライアント側構成の取得

- キャッシュ・ステータスの取得

- キャッシュのクリア、プリフェッチまたはリフレッシュ

- タイル・キャッシュのエクスポート

- 既存のキャッシュ管理タスクの停止、再開または削除

- 管理リクエストのステータスの取得

- キャッシュ・インスタンスの作成または再定義

- キャッシュ・インスタンスの削除

- タイル層キャッシュ・サーバーの再起動

- タイル層のオフライン化とオンライン化

5.2.1 クライアント側構成の取得

<get_client_config>要素は、指定したタイル層の構成をクライアント側から返します。これには、次の定義が含まれます。

<!ELEMENT map_cache_admin_request (get_client_config)>
<!ELEMENT get_client_config  EMPTY>
<!ATTLIST get_client_config
map_cache_names   CDATA #REQUIRED
format            (JSON|XML|OLD_JS) #IMPLIED
>

map_cache_names属性は、構成のリクエスト対象となるタイル層名をリストします。

format属性は、レスポンス内のドキュメント形式を指定します。

次の例では、1つのタイル層MVDEMO.DEMO_MAPの構成をXML形式で取得します。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<get_client_config map_cache_names="MVDEMO.DEMO_MAP" format="XML" />
/>

レスポンスは次のようになります。

<map_tile_server_response>
<map_tile_layer_config>
<map_tile_layer name="DEMO_MAP" data_source="MVDEMO" format="PNG" transparent="false">
<coordinate_system srid="8307" type="GEODETIC" distConvFactor="0.0" minX="-180.0" minY="-90.0" maxX="180.0" maxY="90.0"/>
<zoom_levels>
<zoom_level level="0" name="" scale="1.0E7" tile_width="4.285714285714286" tile_height="4.285714285714286" tile_image_width="189" tile_image_height="189"/>
<zoom_level level="1" name="" scale="3000000.0" tile_width="1.0843373493975903" tile_height="0.9608052463016623" tile_image_width="158" tile_image_height="140"/>
</zoom_levels>
</map_tile_layer>
</map_tile_layer_config>
</map_tile_server_response>

<get_client_config>リクエストは非管理モードでも機能し、このリクエストはxml_request文字列を通じて送信できます。例:

http://localhost:7001/mapviewer/mcserver?xml_request=<map_cache_admin_request><get_client_config map_cache_names="MVDEMO.DEMO_MAP" format="XML" /></map_cache_admin_request>

5.2.2 キャッシュ・ステータスの取得

<get_cache_status>要素は、サーバーにあるすべてのタイル層のステータスをリストします。これには、次の定義が含まれます。

<!ELEMENT map_cache_admin_request (get_cache_status)>
<!ELEMENT get_cache_status  EMPTY>

次の例では、サーバーにあるすべてのタイル層のステータスをリストします。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<get_cache_status/>
</map_cache_admin_request>

get_cache_statusリクエストへのレスポンスに使用するDTDの形式は次のとおりです。

<!ELEMENT map_tile_server_response (tile_server_status)>
<!ELEMENT tile_server_status  (cache_instance*)>
<!ELEMENT cache_instance EMPTY>
<!ATTLIST cache_instance
data_source  CDATA #REQUIRED
name         CDATA #REQUIRED
type         (internal|external) #REQUIRED
base_map     CDATA #REQUIRED
zoom_levels  PCDATA #REQUIRED
status       (ready|not ready) #REQUIRED
online       (true|false) #REQUIRED
>

name属性は、このデータソースに含まれるタイル層の名前を識別します。

type属性は、マップ・ソースが内部マップ・ソースまたは外部マップ・ソースのいずれであるかを示します。

zoom_levels属性は、このタイル層におけるズーム・レベルの合計を示します。

base_map属性は、タイプが内部マップ・ソースの場合に、このタイル層がマップ・タイルの生成に使用するベース・マップ名を指定します。

status属性は、タイル層の準備が完了しているかどうかを示します。

online属性は、タイル層がオンライン(true)であるかオフライン(false)であるかを示します。

次にget_cache_statusレスポンスの例を示します。

<map_tile_server_response>
<tile_server_status>
<cache_instance data_source="MVDEMO_PC" name="DEMO_MAP" type="internal" base_map="DEMO_MAP" zoom_levels="10" status="ready" online="true"/>
<cache_instance data_source="MVDEMO" name="WMTS" type="internal" base_map="WMTS" zoom_levels="15" status="ready" online="true"/>
</tile_server_status>
<map_tile_server_response>

<get_cache_status>リクエストは非管理モードでも機能し、このリクエストはxml_request文字列を通じて送信できます。例:

http://localhost:7001/mapviewer/mcserver?xml_request=<map_cache_admin_request><get_cache_status /></map_cache_admin_request>

5.2.3 キャッシュのクリア、プリフェッチまたはリフレッシュ

<tile_admin_task>要素を使用すると、キャッシュされたタイルのクリア、キャッシュするタイルのフェッチ、またはタイルのリフレッシュ(つまり、既存のすべてのファイルの削除とタイルのフェッチ)をサーバーにリクエストできます。これらの目的で、次の定義が使用されます。

<!ELEMENT map_cache_admin_request (tile_admin_task)>
<!ELEMENT tile_admin_task  (schedule?)>
<!ELEMENT schedule EMPTY>
<!ATTLIST tile_admin_task
operation   (clear_tiles|fetch_tiles|refresh_tiles) #REQUIRED
map_tile_layer CDATA #REQUIRED
zoom_levels    PCDATA #REQUIRED
bounding_box   PCDATA #REQUIRED
>
<!ATTLIST schedule
start_time       PCDATA #REQUIRED
repeat_interval  PCDATA #IMPLIED
duration         PCDATA #IMPLIED
>

operation属性は、実行する操作(clear_tiles、fetch_tilesまたはrefresh_tiles)を識別します。

map_tile_layer属性は、タイル層名を示します。データソース名を接頭辞として指定し、その後にピリオド(.)、タイル層名の順に指定します。たとえば、mvdemo.demo_mapのようになります。

zoom_levels属性は、実行する操作のズーム・レベルのリストを指定します。

bounding_box属性は、操作の実行対象となる四角形の領域を定義します。

start_time属性は、スケジュール済タスクの開始時間を示します。

repeat_interval属性は、この操作の実行頻度を分単位で示します。値が0(ゼロ)の場合、操作は1回かぎりです。

duration属性は、操作の継続時間を分単位で示します。この属性が空であるか指定されていない場合、タスクは完了するまで実行されます。

次の例では、fetch_tilesリクエストを送信します。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<tile_admin_task
operation="fetch_tiles"
map_tile_layer="mvdemo.demo_map"
zoom_levels="7,8"
bounding_box="-71.6,42.35,-71.58,42.37">
<schedule start_time="2013-03-20 9:00:00" repeat_interval="0" duration="" />
</tile_admin_task>
</map_cache_admin_request>

fetch_tilesレスポンスのDTDは次のとおりです。

<!ELEMENT map_tile_server_response (request_status, request_id, estimates)>
<!ELEMENT request_status (#CDATA)>
<!ELEMENT request_id (#CDATA)>
<!ELEMENT estimates EMPTY>
<!ATTLIST estimates
tile_remaining       CDATA #REQUIRED
time_remaining       CDATA #REQUIRED
disk_space_required  CDATA #REQUIRED
>

tile_remaining属性は、フェッチする残りのタイル数を示します。

time_remaining属性は、残りのタイルのフェッチに必要な推定時間を秒単位で示します。

disk_space_required属性は、残りのタイルの格納に必要な推定記憶領域をバイト単位で示します。

次に例を示します。

<map_tile_server_response>
<request_status>Submitted</request_status>
<request_id>62</request_id>
<estimates tile_remaining="144" time_remaining="288" disk_space_required="990576"/>
</map_tile_server_response>

5.2.4 タイル・キャッシュのエクスポート

<tile_admin_task>要素を使用して、ダウンロードするマップ・タイルが含まれたzipファイルを生成するようにサーバーにリクエストできます。リクエスト定義は、操作の属性をexport_tilesに設定する以外は、クリア、プリフェッチまたはリフレッシュのリクエストに類似しています(5.2.3項を参照)。

次の例では、export_tilesリクエストを送信します。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<tile_admin_task
operation=" export_tiles "
map_tile_layer="mvdemo.demo_map"
zoom_levels="5,6,7,8,9,10,11,12,14,14,15"
bounding_box="-71.6,42.35,-71.58,42.37">
</tile_admin_task>
</map_cache_admin_request>

レスポンスには、zipファイルをダウンロードするためのURLが含まれています。zipファイルに含まれるマップ・タイルは、そのタイル層に対するサーバーのマップ・タイル・キャッシュと同じツリー構造になっています。

export_tilesレスポンスのDTDは、5.2.3項「キャッシュのクリア、プリフェッチまたはリフレッシュ」の場合と類似していますが、1つの子要素<zipped_cache_url>が追加されています。この要素の値は、zipファイルをダウンロードするためのURL文字列です。

次の例は、このリクエストに対するレスポンスを示しています。

<map_tile_server_response>
<request_status>Submitted</request_status>
<request_id>0</request_id>
<zipped_cache_url>
http://localhost:8088/mapviewer/images/zipcache/MVDEMO.DEMO_MAP_tozip1_6.zip
</zipped_cache_url>
<estimates tile_remaining="50" time_remaining="100" disk_space_required="238250"/>
</map_tile_server_response>
<map_tile_server_response>

5.2.5 既存のキャッシュ管理タスクの停止、再開または削除

<tile_admin_task>要素を使用すると、タスクの停止、再開または削除をサーバーにリクエストできます。これらの目的で、次の定義が使用されます。

<!ELEMENT map_cache_admin_request (tile_admin_task)>
<!ELEMENT tile_admin_task  EMPTY>
<!ATTLIST tile_admin_task
operations   (stop_task|resume_task|remove_task) #REQUIRED
task_id      PCDATA #REQUIRED
>

operation属性は、実行する操作(stop_task、resume_taskまたはremove_task)を識別します。

task_id属性は、実行する操作のタスク識別子を示します。

次の例では、タスクを停止するリクエストを送信します。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<tile_admin_task
operation="stop_task"
task_id="12">
</tile_admin_task>
</map_cache_admin_request>

リクエストへのstop_taskレスポンスに使用するDTDは次のとおりです。

<!ELEMENT map_tile_server_response (#CDATA)>

次に例を示します。

<map_tile_server_response>Succeeded.</map_tile_server_response>

5.2.6 管理リクエストのステータスの取得

<get_admin_request_status>要素は、以前に送信された管理リクエストのステータスを示します。これには、次の定義が含まれます。

<!ELEMENT map_cache_admin_request (get_admin_request_status)>
<!ELEMENT get_admin_request_status  EMPTY>
<!ATTLIST  get_admin_request_status
data_source    CDATA #REQUIRED
map_tile_layer CDATA #REQUIRED
>

次の例では、指定したタイル層の管理リクエストのステータスを取得します。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<get_admin_request_status data_source="mvdemo" map_tile_layer="demo_map"/>
</map_cache_admin_request>

get_admin_request_statusリクエストへのレスポンスに使用するDTDの形式は次のとおりです。

<!ELEMENT map_cache_admin_request  (tile_admin_task)>
<!ELEMENT tile_admin_task  (bound, schedule?, task_progress)>
<!ELEMENT bound (gml:Box)>
<!ELEMENT schedule  EMPTY>
<!ELEMENT task_progress  (zoom_level+)>
<!ELEMENT zoom_level EMPTY>
<!ATTLIST tile_admin_task
id              PCDATA #REQUIRED
type            (CLEAR, PREFETCH, REFRESH) #REQUIRED
data_source     CDATA #REQUIRED
map_tile_layer  CDATA #REQUIRED
zoom_levels     PCDATA #REQUIRED
>
<!ATTLIST  schedule
start_time       PCDATA #REQUIRED
repeat_interval  PCDATA #IMPLIED
duration         PCDATA #IMPLIED
cron_string      CDATA #IMPLIED
>
<!ATTLIST  zoom_level
level                 PCDATA #REQUIRED
total_tile_number     PCDATA #REQUIRED
processed_tile_number PCDATA #REQUIRED
failed_tile_number    PCDATA #REQUIRED
tile_x                PCDATA #REQUIRED
tile_y                PCDATA #REQUIRED
>

level属性は、このタスクの現在のズーム・レベルを示します。

total_tile_number属性は、このタスクの合計タイル数を示します。

processed_tile_number属性は、すでに処理されたタイルの数を示します。

failed_tile_number属性は、操作内で失敗したタイルの数を示します。

tile_xおよびtile_y属性は、タイル・メッシュ・コード座標系における、最後に処理したタイルの座標(x, y)を示します。値が-1の場合、タスクは開始されていません。

次に例を示します。

<tile_admin_task id="67" type="PREFETCH" data_source="MVDEMO" map_tile_layer="DEMO_MAP" zoom_levels="8,9">
<bound>
<gml:Box xmlns:gml="http://www.opengis.net/gml" srsName="SDO:8307">
<gml:coordinates decimal="." cs="," ts=" ">
-71.60,42.35 -71.58,42.37
</gml:coordinates>
</gml:Box>
</bound>
<schedule repeat_interval="0" duration="0" start_time="2015-03-20 09:00:00" cron_string=""/>
<task_progress>
<zoom_level level="8" total_tile_number="144" processed_tile_number="0" failed_tile_number="0" tile_x="-1"tile_y="-1"/>
<zoom_level level="9" total_tile_number="1122" processed_tile_number="0" failed_tile_number="0" tile_x="-1"tile_y="-1"/>
</task_progress>
</tile_admin_task>

5.2.7 キャッシュ・インスタンスの作成または再定義

<tile_admin_task>要素を使用すると、キャッシュ・インスタンスの作成または再定義をタイル層サーバーにリクエストできます。これらの目的で、次の定義が使用されます。

<!ELEMENT map_cache_admin_request (create_cache_instance, redefine_cache_instance)>
<!ELEMENT create_cache_instance  (cache_instance)>
<!ELEMENT redefine_cache_instance  (cache_instance)>
<!ELEMENT cache_instance  (internal_map, cache_storage?|tile_storage?, coordinate_system, tile_image, zoom_levels)>
<!ELEMENT internal_map_source  EMPTY>
<!ELEMENT cache_storage  EMPTY>
<!ELEMENT coordinate_system  EMPTY>
<!ELEMENT tile_image  EMPTY>
<!ELEMENT zoom_levels  EMPTY>
<!ATTLIST create_cache_instance
data_source   CDATA #REQUIRED
>
<!ATTLIST  cache_instance
name   CDATA #REQUIRED
image_format (PNG|GIF|JPG)"PNG"
>
<!ATTLIST  internal_map_source
base_map   CDATA #REQUIRED
>
<!ATTLIST  cache_storage
root_path   CDATA #IMPLIED
>
<!ATTLIST  coordinate_system
srid  PCDATA #REQUIRED
minX  PCDATA #REQUIRED
maxX  PCDATA #REQUIRED
minY  PCDATA #REQUIRED
maxY  PCDATA #REQUIRED
>
<!ATTLIST  tile_image
width   PCDATA #REQUIRED
height  PCDATA #REQUIRED
>
<!ATTLIST  zoom_levels
levels     PCDATA #REQUIRED
min_scale  PCDATA #REQUIRED
max_scale  PCDATA #REQUIRED
>

srid属性は、このタイル層の投影(座標系)を指定します。

minX、maxX、minYおよびmaxY属性は、指定した投影におけるこのタイル層のデータ範囲を指定します。

widthおよびheight属性は、イメージの幅および高さを指定します。

levels属性は、このタイル層のズーム・レベルを示す数値を指定します。

min_scaleおよびmax_scale属性は、スケール分母の最小値と最大値を指定します。ズーム0には、常に最大のスケール分母が割り当てられるため、タイルに含まれる地理的領域はより大きくなり、マップの詳細は大まかになります。

5.2.8 キャッシュ・インスタンスの削除

<remove_cache_instance>要素は、タイル層インスタンスをサーバーから削除します。これには、次の定義が含まれます。

<!ELEMENT map_cache_admin_request (remove_cache_instance)>
<!ELEMENT remove_cache_instance EMPTY>
<!ATTLIST  remove_cache_instance
map_cache_name   CDATA #REQUIRED
clean_disk       (true|false) "false"
remove_permanently (true|false) "false"
>

clean_disk属性は、すでにキャッシュされているタイルを削除するかどうかを指定します。

remove_permanently属性は、タイル層をUSER_SDO_CACHED_MAPSビューから削除するかどうかを指定します。

次の例では、タイル層インスタンスをサーバーから削除します。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<remove_cache_instance
map_cache_name="mvdemo.demo_map"
clean_disk="true" remove_permanently="false"/>

remove_cache_instanceレスポンスのDTDは次のとおりです。

<!ELEMENT map_tile_server_response (#CDATA)>

次に例を示します。

<map_tile_server_response>Succeeded.</map_tile_server_response>

5.2.9 タイル層キャッシュ・サーバーの再起動

<restart_cache_server>要素は、タイル層サーバーを再起動します。これには、次の定義が含まれます。

<!ELEMENT map_cache_admin_request (restart_cache_server)>
<!ELEMENT restart_cache_server EMPTY>

次の例では、サーバーを再起動します。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<restart_cache_server />
</map_cache_admin_request>

5.2.10 タイル層のオフライン化とオンライン化

<take_cache_offline>要素は、タイル層インスタンスをサーバーに対してオフラインにし、<bring_cache_online>要素は、オフラインのタイル層インスタンスをオンラインに戻します。DTD定義は次のとおりです。

<!ELEMENT map_cache_admin_request (take_cache_offline, bring_cache_online)>
<!ELEMENT take_cache_offline  EMPTY>
<!ATTLIST take_cache_offline
map_cache_name  CDATA #REQUIRED
>
<!ATTLIST  bring_cache_online
map_cache_name  CDATA #REQUIRED
>

次の例では、タイル層インスタンスをオフラインにします。

<?xml version="1.0" standalone="yes"?>
<map_cache_admin_request>
<take_cache_offline map_cache_name="mvdemo.demo_map" />
</map_cache_admin_request>

5.3 全マップのリスト(汎用)

<list_maps>要素は、指定したデータソース内の全ベース・マップをリストします。これには、次の定義が含まれます。

<!ELEMENT non_map_request list_maps>
<!ELEMENT list_maps  EMPTY>
<!ATTLIST list_maps
data_source   CDATA #REQUIRED
>

次の例では、mvdemoというデータソース内の全ベース・マップをリストします。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<list_maps data_source="mvdemo"/>
</non_map_request>

list_mapsリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response map_list>
<!ELEMENT map_list  (map*) >
<!ATTLIST map_list
succeed   (true | false) #REQUIRED
>
<!ATTLIST map
name      CDATA #REQUIRED
>

succeed属性は、リクエストが正常に処理されたかどうかを示します。

name属性は、各マップを識別します。

例:

<?xml version="1.0" ?>
<non_map_response>
<map_list succeed="true">
<map name="DEMO_MAP"/>
<map name="DENSITY_MAP"/>
</map_list>
</non_map_response>

5.4 テーマのリスト(汎用)

<list_predefined_themes>要素は、指定のデータソースで定義されたすべてのテーマ、または指定したマップに対する指定のデータソースで定義されたすべてのテーマをリストします。

テーマに関連付けられたマップに関係なく、データソースで定義されたすべてのテーマをリクエストするためのDTDには、次の定義が含まれます。

<!ELEMENT non_map_request list_predefined_themes>
<!ELEMENT list_predefined_themes  EMPTY>
<!ATTLIST list_predefined_themes
data_source   CDATA #REQUIRED
>

次の例では、mvdemoというデータソースで定義された全テーマをリストします。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<list_predefined_themes data_source="mvdemo"/>
</non_map_request>

データソースで定義され、特定のマップに関連付けられたすべてのテーマをリクエストするためのDTDには、次の定義が含まれます。

<!ELEMENT non_map_request list_predefined_themes>
<!ELEMENT list_predefined_themes  EMPTY>
<!ATTLIST list_predefined_themes
data_source CDATA #REQUIRED
map         CDATA #REQUIRED
>

次の例では、tilsmenvというデータソースで定義され、QA_MAPというマップに関連付けられたすべてのテーマをリストします。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<list_predefined_themes data_source="tilsmenv" map="QA_MAP"/>
</non_map_request>

list_predefined_themesリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response predefined_theme_list>
<!ELEMENT predefined_theme_list  (predefined_theme*) >
<!ATTLIST predefined_theme_list
succeed   (true | false) #REQUIRED
>
<!ELEMENT predefined_theme  EMPTY>
<!ATTLIST predefined_theme
name   CDATA #REQUIRED
>

succeed属性は、リクエストが正常に処理されたかどうかを示します。

name属性は、各テーマを識別します。

例:

<?xml version="1.0" ?>
<non_map_response>
<predefined_theme_list succeed="true">
<predefined_theme name="THEME_DEMO_CITIES"/>
<predefined_theme name="THEME_DEMO_BIGCITIES"/>
<predefined_theme name="THEME_DEMO_COUNTIES"/>
<predefined_theme name="THEME_DEMO_COUNTY_POPDENSITY"/>
<predefined_theme name="THEME_DEMO_HIGHWAYS"/>
<predefined_theme name="THEME_DEMO_STATES"/>
<predefined_theme name="THEME_DEMO_STATES_LINE"/>
</predefined_theme_list>
</non_map_response>

戻されたリストにおける名前の順序は一定ではないため注意してください。

5.5 スタイルのリスト(汎用)

<list_styles>要素は、指定したデータソースに対して定義されたスタイルをリストします。これには、次の定義が含まれます。

<!ELEMENT non_map_request list_styles>
<!ELEMENT list_styles  EMPTY>
<!ATTLIST list_styles
data_source   CDATA #REQUIRED
style_type   (COLOR|LINE|MARKER|AREA|TEXT|ADVANCED)  #IMPLIED
>

style_typeに値を指定した場合、そのタイプのスタイルのみがリストされます。スタイルのタイプには、COLOR、LINE、MARKER、AREA、TEXTおよびADVANCEDがあります。style_typeを指定しない場合は、すべてのタイプの全スタイルがリストされます。

次の例では、COLORタイプのスタイルのみをリストします。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<list_styles data_source="mvdemo"  style_type="COLOR"/>
</non_map_request>

list_stylesリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response style_list>
<!ELEMENT style_list  (style*) >
<!ATTLIST style_list
succeed   (true | false) #REQUIRED
>
<!ELEMENT style  EMPTY>
<!ATTLIST style
name   CDATA #REQUIRED
>

次の例は、COLORタイプのスタイルに関するリクエストへのレスポンスを示しています。

<?xml version="1.0" ?>
<non_map_response>
<style_list succeed="true">
<style name="SCOTT:C.BLACK"/>
<style name="SCOTT:C.BLACK GRAY"/>
<style name="SCOTT:C.BLUE"/>
<style name="SCOTT:C.CRM_ADMIN_AREAS"/>
<style name="SCOTT:C.CRM_AIRPORTS"/>
</style_list>
</non_map_response>

レスポンス内の各スタイル名の書式はOWNER:NAME(例: SCOTT:C.BLACK)で、OWNERはスタイルを所有するスキーマ・ユーザーです。

5.6 事前定義済テーマで使用されるスタイルのリスト(汎用)

<list_theme_styles>要素は、事前定義済テーマで参照されるレンダリング・スタイルをすべてリストします。この要素は、テーマ用に独自の凡例を作成する場合に、そのテーマで実際に使用されているスタイルを確認する際に特に便利です。この要素には、次の定義が含まれます。

<!ELEMENT non_map_request list_theme_styles>
<!ELEMENT list_theme_styles  EMPTY>
<!ATTLIST list_styles
data_source   CDATA #REQUIRED
theme CDATA #REQUIRED
>

次の例は、事前定義済テーマTHEME_DEMO_STATESで使用されているスタイルをリクエストします。

<non_map_request>
<list_theme_styles data_source="mvdemo" theme="THEME_DEMO_STATES"  />
</non_map_request>

次の例に、このリクエストに対するレスポンスを示します。

<non_map_response>
<theme_style name="C.US MAP YELLOW" type="COLOR" render="true" label="false"
highlight="false" description="Primary color for US maps."/>
<theme_style name="T.STATE NAME" type="TEXT" render="false" label="true"
highlight="false" description="name for states"/>
</non_map_response>

list_theme_stylesリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response (theme_style*)>
<!ELEMENT theme_style EMPTY>
<!ATTLIST theme_style
name CDATA #REQUIRED
type   CDATA (COLOR|LINE|MARKER|AREA|TEXT|ADVANCED)  #REQUIRED
render CDATA (true|false)  #REQUIRED
label CDATA (true|false)  #REQUIRED
highlight CDATA (true|false) #REQUIRED
description CDATA #IMPLIED
>

このDTDの内容は、次のとおりです。

- name属性は、スタイル名を識別します。

- type属性は、MapViewerのスタイル・タイプを識別します。

- render属性は、そのスタイルがテーマによってレンダリング・スタイルとして使用されるかどうかを示します。

- label属性は、そのスタイルがラベリング・スタイルとして使用されるかどうかを示します。

- highlight属性は、そのスタイルがハイライト・スタイルとしてのみ使用されるかどうかを示します。

- description要素は、スタイル定義で指定されている説明を識別します。

5.7 スタイル定義の取得(汎用)

<get_style_definition>要素は、データソースのスタイル定義を返します。この要素には、次の定義が含まれます。

<!ELEMENT non_map_request get_style_definition>
<!ELEMENT get_style_definition EMPTY>
<!ATTLIST get_style_definition
data_source  CDATA #REQUIRED
style        CDATA #REQUIRED
>

次の例は、mvdemoデータソースのM.AIRPORTスタイルの定義を返します。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<get_style_definition data_source="mvdemo" style="M.AIRPORT"/>
</non_map_request>

次の例に、このリクエストに対するレスポンスを示します。

<non_map_response>
<style name="M.AIRPORT">
<svg width="1in" height="1in">
<desc/>
<g class="marker" style="width:23;height:15;font-family:Dialog;font-size:12;font-fill:#FFFFFF">
<image x="0" y="0" width="1" height="1" markerType="gif" href="dummy.gif"/>
</g>
</svg>
</style>
</non_map_response>

5.8 メモリー内キャッシュの管理

MapViewerでは2種類のメモリー内キャッシュが使用されます。

- スタイル、テーマ、ベース・マップ定義といったマッピング・メタデータや、キャッシュ内のテーブルにあるSDO_GEOMETRY列のSRID値に対応するメタデータ・キャッシュ

- 事前定義済テーマ(マップの生成に使用されるジオメトリ・データおよび画像データ)に対応する空間データ・キャッシュ

これらのキャッシュを使用すると、キャッシュされた情報についてはMapViewerがデータベースにアクセスしないため、パフォーマンスが向上します。ただし、その情報がキャッシュに格納された後にデータベース内で変更された場合、MapViewerの表示に古い情報が反映されることがあります。

MapViewerを再起動せずに最新情報を使用するには、これらのキャッシュのいずれかまたは両方の内容を消去(無効化)します。キャッシュが消去された場合、次のMapViewerリクエストでは必要な情報がデータベースから取得され、適切なキャッシュに情報が格納されます。

5.8.1 データソースのメタデータ・キャッシュの消去(管理)

ユーザーがデータソースのマップをリクエストすると、MapViewerではデータソースのスタイル、テーマおよびベース・マップ定義といったマッピング・メタデータや、テーブル内にあるSDO_GEOMETRY列のSRID値がキャッシュされます(テーマを最初にレンダリングする場合など)。これによって、MapViewerがマッピング・メタデータをフェッチする際に、データベースに不必要にアクセスすることを防止できます。ただし、Map Builderツールなどを使用してマッピング・メタデータを変更しても、MapViewerを再起動するまでは反映されません。

MapViewerを再起動せずに変更済の定義を使用するには、MapViewerに対し、指定のデータソースについてキャッシュされたすべてのマッピング・メタデータおよびSRID値を消去(つまり、キャッシュから削除)するようにリクエストできます。メタデータ・キャッシュを消去すると、MapViewerは必ずデータベースにアクセスして最新のマッピング・メタデータを取得します。

<clear_cache>要素は、MapViewerメタデータ・キャッシュを消去します。これには、次の定義が含まれます。

<!ELEMENT non_map_request clear_cache>
<!ELEMENT clear_cache  EMPTY>
<!ATTLIST clear_cache
data_source  CDATA #REQUIRED
>

data_source属性は、MapViewerメタデータ・キャッシュから削除されるメタデータを含むデータソースの名前を指定します。

次の例では、MapViewerメタデータ・キャッシュからデータソースmvdemoのメタデータを消去します。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<clear_cache data_source="mvdemo"/>
</non_map_request>

clear_cacheリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response clear_cache>
<!ELEMENT clear_cache  EMPTY>
<!ATTLIST clear_cache
succeed   (true | false) #REQUIRED
>

例:

<?xml version="1.0" ?>
<non_map_response>
<clear_cache succeed="true"/>
</non_map_response>

5.8.2 テーマに関する空間データ・キャッシュの消去(管理)

MapViewerでは、レンダリング用にデータベースからメモリーにデータをロードする際に、キャッシュしないように指定されている場合を除き、事前定義済テーマの空間データ(ジオメトリまたは地理参照画像)をキャッシュします。(MapViewerは動的テーマまたはJDBCテーマのデータはキャッシュしません。)したがって、事前定義済テーマが頻繁にアクセスされている場合は、データの大部分がキャッシュに格納されていると考えられます。ただし、テーマの空間データがデータベースで変更されている場合、その変更はマップ上に表示されません。これは、MapViewerが引き続きキャッシュのデータ・コピーを使用しているためです。MapViewerを再起動せずに変更済のテーマ・データを表示するには、まずそのテーマのキャッシュ・データを消去する必要があります。

<clear_theme_cache>要素は、事前定義済テーマのキャッシュ・データを消去します。これには、次の定義が含まれます。

<!ELEMENT non_map_request clear_theme_cache>
<!ELEMENT clear_theme_cache  EMPTY>
<!ATTLIST clear_theme_cache
data_source CDATA #REQUIRED
theme       CDATA #REQUIRED
>

data_source属性は、データソースの名前を指定します。theme属性は、そのデータソース内の事前定義済テーマの名前を指定します。

次の例では、データソースmvdemo内のSTATESという事前定義済テーマのキャッシュされた空間データを消去します。

<?xml version="1.0" standalone="yes"?>
<non_map_request>
<clear_theme_cache data_source="mvdemo" theme="STATES"/>
</non_map_request>

clear_theme_cacheリクエストに対するレスポンスのDTDは、次のような書式になります。

<!ELEMENT non_map_response clear_theme_cache>
<!ELEMENT clear_theme_cache  EMPTY>
<!ATTLIST clear_theme_cache
succeed  (true | false) #REQUIRED
>

例:

<?xml version="1.0" ?>
<non_map_response>
<clear_theme_cache succeed="true"/>
</non_map_response>

5.9 MapViewer構成ファイルの編集(管理)

<edit_config_file>要素を使用すると、MapViewer構成ファイル(mapViewerConfig.xml)を編集できます。これには、次の定義が含まれます。

<!ELEMENT non_map_request edit_config_file>
<!ELEMENT edit_config_file  EMPTY>

注意:
<edit_config_file>要素は、MapViewerをスタンドアロンのJava EEコンテナで実行しているか、起動しているプロセスが1つのみのクラスタ化されていないWebLogic Serverインスタンスで実行している場合にのみ使用します。それ以外の場合、加えた変更が1つのMapViewerインスタンスにのみ適用され、一貫性がそこなわれる可能性があります。

リクエストを次のように指定します。

<?xml version="1.0" standalone="yes">
<non_map_request>
<edit_config_file/>
</non_map_request>

リクエストを発行すると、MapViewer構成ファイルの現在のコンテンツを含むHTMLフォームが表示されます。フォームを編集してコンテンツを変更し、「保存」ボタンをクリックして変更をコミットします。ただし、MapViewerサーバーを再起動するまで、変更は有効になりません(5.10項を参照)。

5.10 MapViewerサーバーの再起動(管理)

通常、MapViewerサーバーを最も安全に再起動するには、含まれているインスタンスを再起動します。ただし、スタンドアロンの環境でMapViewerを実行している場合や、インスタンスがクラスタ化されておらず、起動しているJavaプロセスが1つのみの場合は、インスタンス全体を再起動しなくても、<restart>要素を使用して素早くMapViewerを再起動できます。<restart>要素には、次の定義が含まれます。

<!ELEMENT non_map_request edit_config_file>
<!ELEMENT restart  EMPTY>

リクエストを次のように指定します。

<?xml version="1.0" standalone="yes">
<non_map_request>
<restart/>
</non_map_request>

6 Oracle Maps

Oracle Mapsは、Webベースの高性能な対話型マッピング・アプリケーションを開発するための一連のテクノロジの名前です。Oracle Mapsは、MapViewerに同梱されています。

この章の主な項目は、次のとおりです。

- 6.1項「対象地物(FOI)サーバー」

- 6.2項「Oracle Maps JavaScript API」

- 6.3項「Oracle Mapsアプリケーションの開発」

- 第6.4項「Google MapsとBing Mapsの使用」

- 6.5項「Spherical Mercator座標系へのデータ変換」

- 第6.6項「外部タイル層の動的な表示」

6.1 対象地物(FOI)サーバー

対象地物(FOI)とは、Webブラウザ内で動作するJavaScriptマップ・クライアントを使用して操作できるビジネス・エンティティまたは地理的地物のことです。FOIデータは、動的に表示され、マップ・タイル層の一部ではありません。FOIにはポイント、線文字列、ポリゴンなどの任意の空間ジオメトリ・タイプを使用できます。FOIの検索、参照、検査および操作機能は、位置ベースのサービスにとって必要不可欠です。

FOIサーバーは、MapViewer内で動作するJavaサーブレットです。これは、データベースに対する問合せ、FOI画像のレンダリング、およびクライアントに対するFOI画像とFOI属性データの送信を実行することにより、JavaScriptマップ・クライアントから受け取るFOIリクエストに応答します。JavaScriptマップ・クライアントは、FOI画像をエンド・ユーザーに表示し、画像を操作する機能を提供します。

FOIサーバーは、テーマベースおよびユーザー定義という2つのタイプのFOIリクエストを受け付けます。いずれのタイプのFOIリクエストも、リクエストのタイプに適したデータ層を戻します。

関連項目:

- 6.1.1項「テーマベースFOI層」

- 6.1.2項「ユーザー定義のFOIリクエスト」

6.1.1 テーマベースFOI層

テーマベースFOI層は、類似した特性を備えデータベースに格納される空間地物の集合です。クライアントは、テーマベースFOI層リクエストをFOIサーバーに送信することにより、テーマベースFOI層をフェッチします。このリクエストの結果として、特定の問合せ基準を満たす一連のFOIデータ・エントリが得られます。各FOIデータ・エントリは、該当するFOI画像と、クライアント側の双方向性をJavaScriptマップ・クライアントがインプリメントする際に使用できる一連のFOI属性から構成されます。

テーマベースFOI層は、事前定義済のMapViewerテーマ(6.1.1.1項を参照)または動的JDBC問合せテーマ(6.1.1.3項を参照)に基づいており、FOIデータのレンダリングに必要なすべての情報を定義します。この情報には、ジオメトリ地物の格納先の表、データベース問合せ時に使用される基準、FOIデータの一部である属性およびFOI画像のレンダリング時に使用されるスタイルが含まれます。事前定義済テーマの定義および構成は、Map Builderツール(第7章を参照)を使用して行えます。

関連項目:

- 6.1.1.1項「事前定義済テーマベースFOI層」

- 6.1.1.2項「テンプレート付き事前定義済テーマ」

- 6.1.1.3項「動的JDBC問合せのテーマベースFOI層」

6.1.1.1 事前定義済テーマベースFOI層

クライアントは、事前定義済テーマベースFOIリクエストを使用してFOIデータをリクエストする場合、事前定義済テーマの名前、地物画像のスケール、およびジオメトリ地物に対する問合せの際に使用する問合せウィンドウを指定する必要があります。テーマの名前はアプリケーションが定義する必要がありますが、地物画像のスケールおよび問合せウィンドウはJavaScriptマップ・クライアントによって自動的に計算されます。

たとえば、次のような定義を持つCUSTOMERSという名前の表上では、CUSTOMERSという事前定義済テーマを定義できます。

SQL> DESCRIBE CUSTOMERS
Name                              Null?  Type
--------------------------------- ------ ----------------------------
NAME                                      VARCHAR2(64 CHAR)
CITY                                      VARCHAR2(64 CHAR)
COUNTY                                    VARCHAR2(64 CHAR)
STATE                                       VARCHAR2(64 CHAR)
LOCATION                                  SDO_GEOMETRY
SALES                                     NUMBER

LOCATION列は、顧客マーカーのレンダリングに使用される空間列です。

CUSTOMERSテーマのXMLスタイリング・ルールを、例6-1に示します。

例6-1 FOI層用事前定義済テーマのXMLスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<hidden_info>
<field column="CITY" name="City"/>
<field column="SALES" name="Sales"/>
</hidden_info>
<rule>
<features style="M.CIRCLE"> </features>
<label column="NAME" style="T.TEXT"> 1 </label>
</rule>
</styling_rules>

例6-1のスタイリング・ルールでは、次の事柄を指定しています。これらの指定がマップの表示に及ぼす影響については、[図は別の場所に移動]を参照してください。

- マーカー・スタイルM.CIRCLEは、顧客のレンダリングに使用。

- NAME列は、ラベル付け用属性として使用(label column="NAME")。NAME列の値(顧客の名前)は、ユーザーがマウスを顧客マーカーの上に移動したときにJavaScriptマップ・クライアントが表示する情報ウィンドウに含まれる。

- 情報ウィンドウには、該当する顧客の<hidden_info>要素(この例ではCITYおよびSALES)で指定されている列の値も含まれる。各<field>要素では、2つの属性を指定する。つまり、columnではデータベース列を指定し、nameでは情報ウィンドウで使用されるテキスト文字列を指定する。

6.1.1.2 テンプレート付き事前定義済テーマ

標準の事前定義済テーマまたはテンプレート付き事前定義済テーマを、MapViewerの事前定義済テーマとすることができます。いずれのタイプの事前定義済テーマも、USER_SDO_THEMESビューを使用して定義します。ただし、標準の事前定義済テーマの問合せ条件は固定ですが、テンプレート付き事前定義済テーマの問合せ条件は動的なバインディング変数を含むことができ、それらの値はテーマ・リクエストの発行時に変更が可能です。

バインディング変数を2つ使用するテンプレート付き事前定義済テーマのXMLスタイリング・ルールを、例6-2に示します(該当するテキストは<features>要素内の太字部)。

例6-2 テンプレート付き事前定義済テーマのXMLスタイリング・ルール

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<hidden_info>
<field column="NAME" name="Name"/>
<field column="CITY" name="City"/>
<field column="SALES" name="Sales"/>
</hidden_info>
<rule>
<features style="M.CIRCLE">(city=:1 and sales>:2)</features>
<label column="NAME" style="T.TEXT"> 1 </label>
</rule>
</styling_rules>

例6-2では、必要条件を満たす地物が存在する都市の名前をバインディング変数:1、必要条件を満たす地物の最低売上高をバインディング変数:2で指定しています。(つまり、指定した都市で特定の最低値を超える売上高を持つ顧客のみに、店舗マーカーが表示されます。)これら2つのバインディング変数の値は、テーマの定義時には確定されず、クライアントがサーバーに送信するリクエストの中で与えられます。

6.1.1.3 動的JDBC問合せのテーマベースFOI層

クライアントは、動的JDBCテーマベースFOIリクエストを使用してFOIデータをリクエストする際、JDBCテーマの完全な定義を指定する必要があります。テーマの定義では、すべてのジオメトリ属性および非ジオメトリ属性を含め、レンダリング・スタイルと、FOIデータの問合せに使用されるSQL問合せを指定する必要があります。

例6-3は、各顧客位置の周りにバッファを表示するFOI層を作成するためのJavaScriptクライアント・コードを示しています。

例6-3 動的JDBC問合せのテーマ

var theme = '<themes><theme name="JDBC_THEME" >' +
'<jdbc_query asis="true" spatial_column="location"
jdbc_srid="8307" render_style="C.RED"
datasource="mvdemo">' +
'select sdo_geom.sdo_buffer(A.location,1,0.005,'+
'\'unit=mile arc_tolerance=0.005\') location '+
' from customers A' +
'</jdbc_query></theme></themes>' ;
buffertheme = new MVThemeBasedFOI('buffertheme',theme);

6.1.2 ユーザー定義のFOIリクエスト

ユーザー定義FOIとは、クライアント側で定義される地物のことです。地物の集合としてレンダリングされるテーマベースFOI層とは異なり、ユーザー定義FOIの場合はリクエストとレンダリングが個々に実行されます。

ジオメトリの表現やレンダリング・スタイルも含め、ユーザー定義FOIの属性はすべて、アプリケーションで提供する必要があります。JavaScriptマップ・クライアントでは、ジオメトリ表現およびレンダリング・スタイルに関する情報を指定したリクエストを、FOIサーバーに送信します。FOIサーバーは、FOI画像をレンダリングし、クライアントに戻します。レンダリング・スタイルは、USER_SDO_STYLESビュー内で事前定義済である必要があります。

6.2 Oracle Maps JavaScript API

Oracle Maps JavaScriptクライアントは、ブラウザベースのマップ視覚化エンジンであり、マップ・タイル・サーバーおよびFOIサーバーの上位で動作します。次の機能が実装されています。

- マップ・タイル・サーバーからマップ・タイルをフェッチし、マップ・タイル層としてWebブラウザに表示する機能。

- FOIリクエストをFOIサーバーに送信し、ユーザー定義の地物およびOracle Spatial and Graph問合せベースの地物をマップ・タイル層の上にオーバーレイ表示する機能。

- マップ・ナビゲーション用のドラッグ、FOIのクリック、矩形の描画、レッドライニングなどのユーザー操作を制御する。
矩形の描画とは、アプリケーション・ユーザーが矩形の1つの隅をクリックした後、マウス・ボタンを押したままマウスを対角の隅までドラッグし、マウス・ボタンを離して矩形を作成することです。

レッドライニングとは、アプリケーション・ユーザーがマウス・ボタンをクリックした後、マウスを移動しクリックを複数回実行する(各クリックにより、まっすぐな線分を使用してレッドラインを伸ばす)ことにより、ポリゴンまたはポリラインを作成することです。(多くの場合レッドラインの描画は赤色でレンダリングされますが、任意の色を使用する線スタイルも指定できます。)

これらの機能にアクセスするには、JavaScript API (いくつかのJavaScriptクラスから構成される)を使用します。JavaScript APIには、次に示す2つのバージョンがあります。

- 従来のAPIとして現在もサポートされているバージョン1 (V1)。第6.2.1項「JavaScript API V1」を参照してください。

- リリース11.1.1.7で導入された新しいAPIであるバージョン2 (V2)。6.2.2項「JavaScript API V2」を参照してください。

Oracle Maps JavaScript API (V1およびV2)内の全クラスの詳細は、Javadocスタイルのリファレンス・ドキュメント(mvdemo.earファイルに同梱されており、次の場所で利用可能)を参照してください。

http://host:port/mvdemo/api/oracle_maps_api.jsp (V1)

http://host:port/mvdemo/api/oracle_maps_html5_api.jsp (V2)

V1 APIおよびV2 APIのチュートリアルとデモは、ルート・コンテキスト・パス/mvdemoで、スタンドアロンのパッケージ・アプリケーションとして提供されます。このチュートリアルでは、まず基本事項(マップ・タイル層の表示、ナビゲーション・パネルの追加、インタラクティブな地物と情報ウィンドウの表示)について説明した後、より複雑なトピック(イベント・リスナーの登録、プログラムによるスタイルの作成と使用、空間フィルタ処理など)に移ります。

すべてのチュートリアルは、MVDEMOサンプル・データセット(Oracle Technology NetworkのMapViewerページから入手可能)に基づいており、mvdemoという名前のデータソースを前提としています。チュートリアル・ページには、3つのパネルがあります。左にはサンプル・コード(デモ)のタイトルがリストされます。いずれかをクリックすると、マップ(そのサンプル・コードの実行結果)が右上のパネルに表示されます。下のパネルには「JavaScript」および「HTML」というタブがあり、それぞれのタブに、選択したデモのJavaScriptおよびHTMLコードが表示されます。

6.2.1 JavaScript API V1

Oracle Maps JavaScriptクライアントの機能にアクセスするには、次のものを含むいくつかのJavaScriptクラスから構成される、JavaScript APIバージョン1 (V1)を使用します。

- MVMapViewクラスは、該当APIのメインのエントリ・ポイントです。ほとんどのマップ制御インタフェースが実装されています。

- MVMapTileLayerクラス(以前の名称はMVBaseMapクラス)は、マップ・タイル・サーバーによってレンダリングされたマップ・タイルを表示するマップ・タイル層を定義します。

- MVThemeBasedFOIクラスでは、テーマベースFOI層の定義および制御を実行します。

- FOIクラスでは、ユーザー定義FOIの定義と制御を実行します。

- MVSdoGeometryクラスでは、ジオメトリ・オブジェクトを定義します。ジオメトリには、Oracle Spatial and Graphでサポートされている任意のジオメトリ・タイプを使用できます。

- MVRedLineToolクラスでは、レッドライン・ユーティリティの定義および制御を実行します。

- MVRectangleToolクラスでは、矩形ツールの定義および制御を実行します。

- MVOverviewMapクラスでは、メイン・マップが小さな矩形としてミニチュア表示される概要マップ(自体は矩形ツール内にあるマップ)の定義および制御を実行します。

- MVMapDecorationクラスでは、マップ装飾の定義および制御を実行します。

MVMapViewは、Webブラウザ内の全マップ操作におけるメインのエントリ・クラスです。ユーザーのWebマッピング・アプリケーションにロジックを追加するための必須のインタフェースはすべて、MVMapViewなどのクラスによって提供されます。そのような論理的インタフェースには、次のようなものがあります。

- マップ・クライアント・インスタンスを作成し、それをWebページ内で作成したマップ・コンテナDIVオブジェクトと関連付ける。

- マップの中心やズーム・レベルなどのマップ・パラメータを構成する。

- マップ・タイル層を作成し、操作するもの。

- テーマベースFOI層を作成し、操作する。

- ユーザー定義の各FOIを作成し、操作する。

- マップ上に情報ウィンドウを表示する。

- マップ・タイトル、カスタムな著作権表示、コントロール・ボタンなどの固定のマップ装飾を作成する。

- ナビゲーション・バー、スケール・バー、矩形ツール、レッドライン・ツール、概要マップなどの組込みユーティリティにアクセスする。

- イベント・リスナーを使用してイベント処理をカスタマイズするもの。適切なAPIメソッドを使用すると、イベント・リスナーをMVMapViewクラス、MVThemeBasedFOIクラスおよびMVFOIクラスに追加できます。

6.2.2 JavaScript API V2

Oracle Maps JavaScript APIバージョン2 (V2)は、最新のブラウザの機能を利用します。次のような機能があります。

- maps.oracle.com、Nokia Maps、Bing Maps、OpenStreet Mapsなどのマッピング・サービス・プロバイダをはじめとする、様々なサード・パーティのマップ・タイル・サービスに対する組込みのサポート

- レンダリング・スタイルおよび効果(グラデーション、アニメーション、ドロップ・シャドウなど)のオンザフライ適用による、クライアント側での地理空間データの優れたレンダリング

- 多くのポイントの自動クラスタリングとクライアント側でのヒート・マップの生成

- 属性値と空間述語(問合せウィンドウ)に基づく、クライアント側での地物のフィルタ処理

- 優れた一連の組込みコントロールおよびツール(カスタマイズ可能なナビゲーション・バーと情報ウィンドウ、構成可能な層コントロール、レッドライン・ツール、距離測定ツールなど)

V2 APIには、既存のOracle Maps JavaScript V1 APIアプリケーションとの後方互換性はありません。V2固有の地物を既存のV1アプリケーション(つまり、MVThemeBasedFOIなどのクラスを使用する、V1 APIで記述されたアプリケーション)で使用する場合は、まずそれらのアプリケーションを移行する必要があります。

ただし、既存のサーバー側の事前定義済スタイルおよびテーマは、V2 APIと連携して動作しません。たとえば、次のコード・スニペットでは、関連する事前定義済スタイルを持つ事前定義済テーマmvdemo.customersに基づいて、インタラクティブなベクター層を作成します。

var baseURL  = "http://"+document.location.host+"/mapviewer";
var layer = new OM.layer.VectorLayer("layer1",
{
def:{
type:OM.layer.VectorLayer.TYPE_PREDEFINED,
dataSource:"mvdemo",
theme:"customers",
url: baseURL
}
});

V2 APIには、次の最上位クラスおよびサブパッケージがあり、これらはすべてネームスペースOMに含まれています。

- Mapクラスは、このAPIのメイン・クラスです。

- Featureクラスは、個々の地理的地物(V1ではFOIとして知られている)を表します。

- MapContextクラスは、現在のマップの中心点やズーム・レベルなど、いくつかの重要なコンテキスト情報をカプセル化した最上位クラスです。通常はイベント・リスナーに渡されます。

- controlパッケージには、ナビゲーション・バーや概要マップなど、すべてのマップ・コントロールが含まれています。

- eventパッケージには、すべてのマップおよび層イベント・クラスが含まれています。

- filterパッケージには、表示したベクター層の地物を選択またはサブセット化するためのすべてのクライアント側フィルタ(空間またはリレーショナル)が含まれています。

- geometryパッケージには、様々なジオメトリ・クラスが含まれています。

- layerパッケージには、様々なタイルおよびベクター層クラスが含まれています。タイル層クラスには、Oracle、Nokia、Bing、OpenStreetMapなど、いくつかのオンライン・マップ・サービスへのアクセスが含まれています。ベクター層は、インタラクティブな地物層であり、V1のMVThemeBasedFOIおよびMVFOIクラスに対応しています。

- infowindowパッケージには、カスタマイズ可能な情報ウィンドウと、それらのスタイルが含まれています。

- styleパッケージには、クライアント側のベクター・データに適用できるスタイルが含まれています。また、アニメーション、グラデーション、ドロップ・シャドウなどのビジュアル効果も含まれています。

- toolパッケージには、距離測定ツール、レッドライン・ツール、ジオメトリ描画ツールなど、様々なマップ・ツールが含まれています。

- universeパッケージには、組込み(事前定義済)マップ汎用が含まれています。マップ汎用は、マップ・コンテンツの枠ボックスと一連のズーム・レベル定義を定義します。これは、V1 APIのタイル層の構成と似ています。

- utilパッケージには、様々なユーティリティ・クラスが含まれています。

- visualfilterパッケージでは、グラデーションやドロップ・シャドウなど、様々なビジュアル効果を実現するためのインタフェースが提供されます。

OM.Mapは、Webブラウザ内の全マップ操作におけるメインのエントリ・クラスです。このクラスや他のクラスにより、アプリケーション固有のロジック、操作および双方向性をWebマッピング・アプリケーションに追加するためのインタフェースが提供されます。次のようなアプリケーション・ロジックおよび操作があります。

- マップ・クライアント・インスタンスを作成し、それをWebページ内で作成したマップ・コンテナDIVオブジェクトと関連付ける。

- マップの中心やズーム・レベルなどのマップ・パラメータを構成するもの。

- マップ・タイル層を作成し、操作する(オプション)。V1の場合と異なり、V2ではマップ・タイル層は必須ではありません。アプリケーションに含めることができるのは、ズーム・レベルとスケールをプログラムによって定義するカスタム汎用を使用する、インタラクティブなベクター層のみです。

- ベクター層(V1ではFOIとして知られている)を作成し、操作する。

- マップ上に情報ウィンドウを表示するもの。

- マップ・タイトル、著作権表示、マップ・コントロールなどの固定のマップ装飾を作成する。

- ナビゲーション・パネル、矩形ツール、円形ツール、スケール・バー、概要マップ・パネルなどの組込みユーティリティにアクセスする。

- イベント・リスナーを使用してイベント処理を(したがって、マップの相互作用も)カスタマイズする。

V2 APIを使用したアプリケーションの開発の詳細は、第6.3.2項「V2 APIの使用」とOracle提供のチュートリアルおよびデモを参照してください。

6.2.3 V1 APIとV2 APIの類似点と相違点

V1 APIとV2 APIの主な類似点は次のとおりです。

- これらには、同じアーキテクチャとコンテンツの組織があります。([以前は図6-1、現在は変更]と[以前は図6-4、現在は変更]は、両方のバージョンに適用されます。)

- Oracle Spatial and GraphまたはLocatorを使用して、空間分析(近接性、包含、最も近い隣接物および距離に関する問合せ)および座標系のサポート(SRIDと変換)を行います。

ただし、大きな相違点がいくつかあります。

- V2を使用した、クライアント側でのインタラクティブな地物のレンダリング(つまり、HTML5 CanvasまたはSVGを使用)により、クライアントの双方向性とユーザーの操作性が向上します。

- V1の「FOIサーバー」に対応するV2のデータ・サーバーは、地物のベクター・ジオメトリと属性をクライアントにストリーミングして、ローカルでレンダリングを実行できるようにします。このため、V1の「FOI層」はV2ではベクター層と呼ばれます。

- V2では、インタラクティブなベクター層を表示するために、バックグラウンド・マップ・タイル層は必要ありません。このため、たとえばV2では、アプリケーションがバックグラウンド・タイル層を使用することなく、州のテーマ・マップを(人口の五分位値別に色分けするなどして)表示することが可能です。

- V2 APIはJQueryおよびJQueryUIに依存し、これらをインクルードします。このため、oraclemapsv2.jsはjquery-1.7.2.min.jsおよびjquery-ui-1.8.16.min.jsをインクルードします。アプリケーションでもJQueryとJQueryUIを使用し、これらをすでにインクルードしている場合は、Oracle Maps V2ライブラリをロードするかわりに、ファイルoraclemapsv2_core.jsを<script>タグ内で使用します。つまり、次を使用します。
<script src="/mapviewer/jslib/v2/oraclemapsv2_core.js"></script>

次は使用しません。

<script src="/mapviewer/jslib/v2/oraclemapsv2.js"></script>

表6-1に、V1とV1のクラス間の一般的な対応関係を示します。この関係は常に一対一ではありません。

表6-1 V1とV2のAPIクラス間の対応関係

V1 APIクラス

V2 APIクラス

MVMapView

OM.Map

MVMapTileLayer、MVBingTileLayer、組込みタイル層

OM.layer.TileLayer、OM.layer.BingTileLayer、ElocationTileLayer、NokiaTileLayer、OSMTileLayer

MVCustomMapTileLayer

カスタム・タイル層は、現在のリリースのV2では直接サポートされていません。ただし、OM.layer.TileLayerを拡張し、getTileURLコールバック関数を提供することによって、カスタム・タイル層を使用できます。

MVThemeBasedFOI

OM.layer.VectorLayer

MVFOI

OM.Feature

MVSdoGeometry

OM.geometryとそのサブクラス

MVEvent

OM.eventとそのサブクラス

MVInfoWindowTab

OM.infowindow.MVInfoWindowTab

スタイル(MVStyleColor、MVXMLStyle、MVBucketStyle、MVBarChartStyleなど)

OM.styleとそのサブクラス

ツール(MVToolbar、MVDistanceTool、MVCircleToolなど)

OM.toolとそのサブクラス

装飾とコントロール(MVNavigationPanel、MVMapDecoration、MVScaleBarなど)

OM.controlとそのサブクラス

6.3 Oracle Mapsアプリケーションの開発

すべてのマップ・データがOracleデータベースに格納されており、Oracle Fusion MiddlewareにMapViewerがデプロイされている場合は、使用しているAPIバージョンに関連する項の手順に従ってOracle Mapsを使用すれば、Webベースのマッピング・アプリケーションを開発できます。

- V1 APIの使用

- V2 APIの使用

6.3.1 V1 APIの使用

バージョン1 (V1) APIを使用してOracle Mapsアプリケーションを開発するには、次の項の手順に従います。

- 1つまたは複数のマップ・タイル層の作成

- FOIメタデータの定義

- V1 APIを使用したクライアント・アプリケーションの作成

6.3.1.1 1つまたは複数のマップ・タイル層の作成

MapViewerがサービスを提供するクライアント側に表示される各マップ・タイル層について、対応するマップ・タイル層をMapViewerサーバー側に作成する必要があります。たとえば、[以前は6.1.2項、現在は変更]で説明したサンプル・アプリケーションの場合、クライアント側にマップ・タイル層として海、郡の境界線、都市および高速道路を表示するには、サーバー側にマップ・タイル層を作成する必要があります。ただし、タイル層がカスタムまたは組込み外部タイル層の場合、サーバー側にタイル層を定義する必要はありません。

マップ・タイル層を作成する場合は、マップ・タイル画像のレンダリング元となるマップ・ソースが使用可能な状態にあることを事前に確認する必要があります。データベースに格納されているマップ・データに基づいてマップ・タイル画像をレンダリングする場合は、事前定義済の一連のテーマから構成されるMapViewerベース・マップを作成する必要があります。(ベース・マップの作成は、第7章で説明するMap Builderツールを使用して行えます。)外部マップ・プロバイダを使用してマップ・タイル画像をレンダリングする場合は、マップ・タイル・サーバーによって指定されているタイル画像の定義を使用して外部サーバーからマップ画像をフェッチできるマップ・ソース・アダプタを作成する必要があります。

マップ・ソースが使用可能な状態にある場合は、1.6.3項で説明したように、MapViewer管理ページを使用して、マップ・タイル層を作成できます。マップ・タイル層を作成する場合は、適切な座標系の定義、マップ・ソースの定義(内部または外部)およびズーム・レベルの定義(ズーム・レベルの数とマップ・スケール)を指定する必要があります。

マップ・タイル層は、作成し終わったら、MapViewerに同梱されているJavaServer Page (JSP)デモ・アプリケーションを使用してテストできます。JSPデモ・アプリケーションには、http://host:port/mapviewer/fsmc/omaps.jspでアクセスできます。このアプリケーションでは、ユーザーの入力に基づいて、MapViewerインスタンスで定義されている任意のマップ・タイル層によって表示されるマップを表示できます。

6.3.1.2 FOIメタデータの定義

データベース問合せの結果に基づきアプリケーションで動的地物をテーマベースFOI層として表示する必要がある場合は、テーマベースFOI層ごとに、事前定義済のMapViewerテーマを作成する必要があります。個々の動的地物をアプリケーションでユーザー定義FOIとして表示する必要がある場合は、FOIサーバーによって使用されるレンダリング・スタイル(複数可)を定義してFOI画像をレンダリングする必要があります。事前定義済のテーマおよびレンダリング・スタイルを作成するには、Map Builderツール(第7章を参照)を使用します。

6.3.1.3 V1 APIを使用したクライアント・アプリケーションの作成

Webブラウザ内で動作するOracle Mapsクライアント・アプリケーションは、プラグインを必要としない純粋なHTMLページおよびJavaScriptページです。そのため、そのようなアプリケーションは、純粋なHTMとしてコンテンツを配信する任意のWebテクノロジを使用して作成できます。そのようなテクノロジには、JavaServer Pages、Javaサーブレット、ASP、.NET C#などがあります。この項では純粋なHTML形式を使用したクライアント・アプリケーションの開発についてのみ説明しますが、それは他のWebテクノロジにも簡単に適用できます。

[以前は例6-1、現在は変更]に示すように、一般的にOracle Mapsアプリケーションのソース・コードはHTMLページにパッケージされますが、それは次の部分から構成されます。

- <script>要素: Oracle Mapsクライアント・ライブラリをブラウザのJavaScriptエンジンにロードします。[以前は例6-1、現在は変更]の場合、この要素は次のとおりです。

<script language="Javascript" src="jslib/oraclemaps.js"></script>

- HTML DIV要素 - Webページ内でマップ・コンテナとして使用されます。DIV要素のサイズと位置は、ユーザーのニーズに合わせてカスタマイズできます。[以前は例6-1、現在は変更]の場合、この要素は次のとおりです。

<div id="map" style="left:10; top:60;width: 600px; height: 500px"></div>

- JavaScriptコード: マップ・クライアント・インスタンスの作成および初期化を実行します。マップ・クライアント・インスタンスの作成、初期マップ・コンテンツ(マップ・タイル層、FOI層など)の設定、初期マップの中心とズーム・レベルの設定、アプリケーションに固有なロジックの実装、マップの表示、およびその他のアプリケーションに固有なロジックの実装が実行されます。
このコードは、JavaScript関数(サーバーからクライアントWebブラウザにHTMLページがロードされたときに実行される)の中にパッケージします。[以前は例6-1、現在は変更]の場合、この関数はon_load_mapviewという名前です。

function on_load_mapview()
{
var baseURL  = "http://"+document.location.host+"/mapviewer";
// Create an MVMapView instance to display the map
var mapview = new MVMapView(document.getElementById("map"), baseURL);
// Add a map tile layer as background.
mapview.addMapTileLayer(new MVMapTileLayer("mvdemo.demo_map"));
// Add a theme-based FOI layer to display customers on the map
var themebasedfoi = new MVThemeBasedFOI('themebasedfoi1','mvdemo.customers');
themebasedfoi.setBringToTopOnMouseOver(true);
mapview.addThemeBasedFOI(themebasedfoi);
// Set the initial map center and zoom level
mapview.setCenter(MVSdoGeometry.createPoint(-122.45,37.7706,8307));
mapview.setZoomLevel(4);
// Add a navigation panel on the right side of the map
mapview.addNavigationPanel('east');
// Add a scale bar
mapview.addScaleBar();
// Display the map.
mapview.display();
}

この関数は、<body>要素のonload属性で指定するため、Webページがロードされた後に実行されます。[以前は例6-1、現在は変更]の場合、このコードは次のとおりです。

<body onload= JavaScript:on_load_mapview() >

- その他のHTML要素およびJavaScriptコード: アプリケーションに固有なその他のユーザー・インタフェースおよび制御ロジックを実装します。[以前は例6-1、現在は変更]の[以前は例6-1、現在は変更]の場合、JavaScript関数setLayerVisibleは、ユーザーが顧客の表示チェック・ボックスを選択または選択解除したときにテーマベースFOI層を表示または非表示にするために実装されています。setLayerVisible関数のコードは、次のとおりです。

function setLayerVisible(checkBox)
{
// Show the theme-based FOI layer if the check box is checked
// and hide the theme-based FOI layer otherwise.
if(checkBox.checked)
themebasedfoi.setVisible(true) ;
else
themebasedfoi.setVisible(false);
}

この関数は、チェック・ボックスを定義する<INPUT>要素のonclick属性で指定されているので、該当するチェック・ボックスをユーザーがクリックするたびに実行されます。[以前は例6-1、現在は変更]の場合、このコードは次のとおりです。

<INPUT TYPE="checkbox" onclick="setLayerVisible(this)" checked/>Show customers

6.3.2 V2 APIの使用

V2 APIを使用したアプリケーションの開発は、V1 APIのプロセスと似ています。ベース・マップ、マップ・タイル層およびインタラクティブな層またはテーマに使用するすべての空間データがOracleデータベースに格納されている場合、Map Builderツールを使用したマップ作成プロセスは、どちらのAPIでも同じです。

基礎となるベース・マップおよび層をOracleデータベース内で管理する場合、クライアント・アプリケーションに表示される各マップ・タイル層は、対応するデータベース・メタデータ・エントリをUSER_SDO_CACHED_MAPSメタデータ・ビュー内に保持している必要があります(第2.9.4項を参照)。同様に、インタラクティブな層がデータベース・コンテンツに基づいている場合、その層はメタデータ・エントリをUSER_SDO_THEMESビュー内に保持している必要があります(第2.9項、特に第2.9.2項を参照)。このようなタイル層とインタラクティブな層、およびそれらのスタイルとスタイリング・ルールは、Map Builderツールを使用して定義できます(第7章を参照)。

バージョン2 (V2) APIを使用してOracle Mapsアプリケーションを開発するには、次の基本的な手順に従います。

1. oraclemapsv2.jsライブラリをインポートします。
このAPIは、MapViewer EARアーカイブの一部としてパッケージされた単一のJavaScriptライブラリに含まれています。

2. MapViewerをデプロイおよび起動した後、次のように<script>タグを通じてライブラリをロードします。

<script  type="text/javascript" url="http://localhost:8080/mapviewer/jslib/v2/oraclemapsv2.js"/>

3. HTMLページ内で、インタラクティブなマップを格納する<DIV>タグを作成します。(これはV1 APIの場合と同じです。)

4. すべてのマップ表示関数を処理するクライアント側マップ・インスタンスを作成します。
クラスの名前はOM.Mapであり、これがV2 APIのメインのエントリ・ポイントです。このため、V2のOM.Mapは、V1のMVMApViewと同等です。

5. マップ汎用を設定します(次のオプション手順を実行した場合は除く)。
基本的に、マップ汎用はマップ全体のエクステント、ズーム・レベルの数、およびオプションで各ズーム・レベルの解像度(ピクセル当たりのマップ単位)を定義します。V1 APIでは、この情報はタイル層の定義に含まれています。これらはV2でも引き続き機能しますが、V2ではインタラクティブなベクター層やテーマを表示するために、事前定義済タイル層は必要ありません。たとえば、地域別の売上を示すインタラクティブなテーマ・マップには、バックグラウンド・マップやタイル層は必要ありません。

6. (オプション)バックグラウンド・マップとして機能するタイル層を追加します。
タイル層には、データベースのmvdemo.demo_mapや、サポートされているNokia Mapsなどのサービスを使用できます。タイル層を追加した場合、マップ汎用も暗黙的に定義されるため、前述の手順(マップ汎用の設定)を実行する必要はありません。

7. 1つまたは複数のインタラクティブなベクター層を追加します。
OM.layer.VectorLayerは、V1 APIのMVThemeBasedFOIと同等です。主な相違点は、OM.VectorLayerがHTML5 (CanvasまたはSVG)テクノロジを使用して、すべてのデータをブラウザ内にレンダリングすることです。このため、別途指定されていないかぎり、ベクター層のすべてのコンテンツを一度ロードした後に、マップのズームまたはパン操作でデータベースへの問合せやデータのフェッチが発生することはありません。

8. 1つまたは複数のマップ・コントロール、ツールおよびその他のアプリケーション固有のUIコントロールを追加して、表示する層、スタイリングおよびビジュアル効果をユーザーが設定できるようにします。

テーマがデフォルトでストリーミングされるのを防ぐ必要がある場合は、認証の追加によって保護する必要があります。つまり、MapViewer web.xmlファイルにセキュリティ制約を追加し、様々なテーマへのアクセスを認可するmds.xmlファイルを構成します。詳細は、1.6.2.16項「HTML5 API用のマップ・データ・サーバーの構成および保護」を参照してください。

V2 APIの使用の詳細な手順と関連情報は、Oracle提供のチュートリアルとデモを参照してください。

関連項目:

- 6.3.2.1項「V2 APIを使用したクライアント・アプリケーションの作成」

6.3.2.1 V2 APIを使用したクライアント・アプリケーションの作成

Oracle Maps V2アプリケーションはWebブラウザ内で動作し、その要件はHTML5 (Canvas)のサポートとJavaScriptの有効化のみです。追加のプラグインは必要ありません。

[以前は例6-1、現在は変更]に示すように、一般的にOracle MapsアプリケーションのソースはHTMLページにパッケージされますが、それは次の部分から構成されます。

- <script>要素 - Oracle Maps V2クライアント・ライブラリをブラウザのJavaScriptエンジンにロードします。次に例を示します。

<script src="/mapviewer/jslib/v2/oraclemapsv2.js"></script>

- HTML <div>要素 - マップを格納します。次に例を示します。

<div id="map" style="width: 600px; height: 500px"></div>

- JavaScriptコード - マップ・クライアント・インスタンスを作成し、初期マップ・コンテンツ(タイルおよびベクター層)、初期マップの中心とズームおよびマップ・コントロールを設定します。このコードは、HTMLページがロードされたとき、または準備完了になったときに実行される関数の中にパッケージします。この関数は、HTMLページの<body>要素のonload属性で指定します。次に例を示します。

function on_load_mapview()
{
var baseURL  = "http://"+document.location.host+"/mapviewer";
// Create an OM.Map instance to display the map
var mapview = new OM.Map(document.getElementById("map"),
{
mapviewerURL:baseURL
});
// Add a map tile layer as background.
var tileLayer = new OM.layer.TileLayer(
"baseMap",
{
dataSource:"mvdemo",
tileLayer:"demo_map",
tileServerURL:baseURL+"/mcserver"
});
mapview.addLayer(tileLayer);
// Set the initial map center and zoom level
var mapCenterLon = -122.45;
var mapCenterLat = 37.7706;
var mapZoom = 4;
var mpoint = new OM.geometry.Point(mapCenterLon,mapCenterLat,8307);
mapview.setMapCenter(mpoint);
mapview.setMapZoomLevel(mapZoom);
// Add a theme-based FOI layer to display customers on the map
customersLayer = new OM.layer.VectorLayer("customers",
{
def:
{
type:OM.layer.VectorLayer.TYPE_PREDEFINED,
dataSource:"mvdemo", theme:"customers",
url: baseURL,
loadOnDemand: false
}
});
mapview.addLayer(customersLayer);
// Add a navigation panel on the right side of the map
var navigationPanelBar = new OM.control.NavigationPanelBar();
navigationPanelBar.setStyle(
{backgroundColor:"#FFFFFF",buttonColor:"#008000",size:12});
mapview.addMapDecoration(navigationPanelBar);
// Add a scale bar
var mapScaleBar = new OM.control.ScaleBar();
mapview.addMapDecoration(mapScaleBar);
// Display the map.
// Note: Change from V1. In V2 initialization and display is done just once
mapview.init();
}

- その他のHTML要素およびJavaScriptコード - アプリケーション固有のその他のユーザー・インタフェースおよび制御ロジックを実装します。たとえば、HTML <input>要素をJavaScript関数setLayerVisibleとともに使用して、層の表示コントロールを実装します。setLayerVisible関数のコードは、次のとおりです。

function setLayerVisible(checkBox)
{
// Show the customers vector layer if the check box is checked and
// hide it otherwise.
if(checkBox.checked)
customersLayer.setVisible(true) ;
else
customersLayer.setVisible(false);
}

この関数は、チェック・ボックスを定義する<input>要素のonclick属性で指定します。次の例では、ユーザーが「Show Customers」チェック・ボックスをクリックしたときに関数を実行します。

<INPUT TYPE="checkbox" onclick="setLayerVisible(this)" checked/>Show Customers

6.4 Google MapsとBing Mapsの使用

アプリケーションでは、Google MapsタイルまたはMicrosoft Bing Mapsタイルを組込みのマップ・タイル層として表示できます。これを行うには、MVGoogleTileLayerまたはMVBingTileLayerのインスタンスをそれぞれ作成し、マップ・ウィンドウに追加します。Oracle Mapsクライアントは、内部的に公式のGoogle MapsまたはBing Maps APIを使用して、Google MapsまたはMicrosoft Bing Mapsサーバーによって直接提供されるマップを表示します。

- Google Mapsタイルを使用するには、タイルの使用方法がGoogleによって規定されているサービス条件に適合する必要があります(https://developers.google.com/readme/termsを参照)。

- Bing Mapsタイルを使用するには、Bing Mapsアカウントを取得する必要があります。使用方法は、Microsoftが規定するライセンス要件に適合する必要があります(http://www.microsoft.com/maps/を参照)。

Google MapsまたはMicrosoft Bing Mapsタイル層の上部にユーザー独自の空間データをオーバーレイする必要がある場合は、6.5項「Spherical Mercator座標系へのデータ変換」を参照してください。

次の項では、組込みマップ・タイル層を使用する2つのオプションについて説明します。

- 第6.4.1項「クライアント側でのGoogle MapsおよびBing Mapsマップ・タイル層の定義」

- 6.4.2項「サーバー側での組込みマップ・タイル層の定義」

6.4.1 クライアント側でのGoogle MapsおよびBing Mapsマップ・タイル層の定義

組込みのマップ・タイル層をクライアント側で定義するには、MVGoogleTileLayerまたはMVBingTileLayerオブジェクトを作成し、それをMVMapViewオブジェクトに追加する必要があります。(Oracle Fusion Middlewareリリース11.1.1.6では、MVGoogleTileLayerはデフォルトでGoogle Mapsバージョン3 APIを使用し、MVBingTileLayerはデフォルトでBing Mapsバージョン7 APIを使用します。)

たとえば、Googleタイルを使用するには、マップにGoogleタイル層を追加します。

mapview = new MVMapView(document.getElementById("map"), baseURL);
tileLayer = new MVGoogleTileLayer() ;
mapview.addMapTileLayer(tileLayer);

アプリケーションで、メソッドMVGoogleTileLayer.setMapTypeまたはMVBingTileLayer.setMapTypeを起動して、マップ・タイプをマップ・プロバイダがサポートするタイプのいずれか(道路、衛星、ハイブリッドなど)に設定できます。

使用例と詳細は、JavaScript APIドキュメントのMVGoogleTileLayerとMVBingTileLayer、およびチュートリアル・デモの組込みGoogle Mapsタイル層と組込みBing Mapsタイル層を参照してください。

6.4.2 サーバー側での組込みマップ・タイル層の定義

サーバー側で定義した組込みマップ・タイル層は、クライアント側で標準のMapViewerタイル層として使用できます。サーバー側で組込みマップ・タイル層を定義するには、次の手順に従います。

1. MapViewer管理ページにログインします(1.6.1項を参照)。

2. マップ・タイル層の管理タブを選択し、「作成」をクリックします。

3. マップ・ソースのタイプを選択するように求められたら、Google MapsまたはBing Mapsを選択し、「続行」をクリックします。

4. タイル層を定義するデータソースを選択します。

5. マップ・プロバイダから取得したライセンス・キーを設定します。

6. 「送信」をクリックして、タイル層を作成します。

サーバー側で作成した組込みマップ・タイル層は、MapViewerが提供する他のタイル層のように使用できます。外部JavaScriptライブラリをロードするために、<script>タグを追加する必要はありません。

次の例は、サーバー側に定義したBing Mapsタイル層を示しています。

mapview = new MVMapView(document.getElementById("map"), baseURL);
// The Bing tile layer is defined in data source "mvdemo".
tileLayer = new MVMapTileLayer("mvdemo.BING_MAP") ;
mapview.addMapTileLayer(tileLayer);

アプリケーションで、メソッドMVMapTileLayer.setMapTypeを起動して、マップ・タイプをマップ・プロバイダがサポートするタイプのいずれか(道路、衛星、ハイブリッドなど)に設定できます。

6.5 Spherical Mercator座標系へのデータ変換

Google MapsやMicrosoft Bing Mapsのような一般的なオンライン・マップ・サービスは、地図にSpherical Mercator投射を使用します。Oracle Databaseリリース11.1.0.7より前の製品を使用し、Google MapsやMicrosoft Bing Mapsといったタイル層の上に独自の空間データをオーバーレイする必要がある場合は、タイル層の座標系と独自のデータ座標系間で座標系の変換を正しく処理できるように、データベースを設定する必要があります(2つの座標系が異なる場合)。

注意:
この項のアクションを実行するには、データベースのリリースが10.2.0.1以降である必要があります。

Google MapsはSpherical Mercator座標系(EPSG: 3785)を使用しています。これは、Yahoo! MapsやMicrosoft Bing Mapsなどの商用APIプロバイダの間でも広く使用されています。この座標系(SRID 3785)は、Oracle Spatial and Graphリリース11.1.0.7より前の製品では提供されていませんでした。独自データをこの座標系に変換するためにMapViewerおよびOracle Spatial and Graphを有効にするには、先にこの座標系定義をOracleデータベースに追加する必要があります(まだ定義されていない場合)。

この座標系が定義されているかチェックするには、以下の文を入力します。

SELECT srid FROM mdsys.cs_srs WHERE srid=3785;

この文で行が返された場合、この項のアクションを実行する必要はありません。この文で行が返されない場合は、この項のアクションを実行して、独自の空間データをタイル層の上にオーバーレイできるようにする必要があります。

次の手順を実行します。

1. DBAロールを持つユーザーなど、権限のあるユーザーとしてデータベースに接続します。

2. 次のようにcsdefinition.sqlスクリプトを実行します。($MAPVIEWER_HOMEを、MapViewerがデプロイされているWebLogic Serverインスタンスのルート・ディレクトリと置き換え、コマンドを1行で入力します。)

- Linux: $MAPVIEWER_HOME/j2ee/home/applications/mapviewer/web/WEB-INF/admin/csdefinition.sql

- Windows: $MAPVIEWER_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\admin\csdefinition.sql

3. 必要に応じて、指定の座標系からSpherical Mercator座標系に変換する際に、Oracle Spatial and Graphがデータ変換をスキップするように変換ルールを作成します。このような変換ルールを作成する必要があるかどうか判断するには、6.5.1項を参照してください。

4. パフォーマンスを向上させるために空間データを事前に変換するか、MapViewerによって実行時にデータ変換を行ってください(「オンザフライ」)。データベースのリリースが10.2.0.4より前の場合、事前に変換するしか手段はありません。

- すべてのデータをSpherical Mercator座標系に事前に変換するには、すべてのデータにSDO_CS.TRANSFORM_LAYERプロシージャを使用し、変換されたデータをマッピングに使用します。(Oracle Spatial and Graph開発者ガイドのSDO_CS.TRANSFORM_LAYERのリファレンスの項を参照してください。)

- MapViewerで実行時にデータを変換する場合、マッピングに使用する前にデータを変換しないでください。

6.5.1 データ変換をスキップするトランスフォーメーション・ルールの作成

空間データは通常、WGS84やBNGなどの楕円データに基づく座標系で使用されます。この場合、データをSpherical Mercator座標系に変換する際に、Oracle Spatial and Graphはデフォルトでデータ変換を適用します。これによって、ユーザーのデータとGoogle Mapsや他のマップ・サービス・タイルとの間で、わずかな不一致や誤差が発生します。この問題を解決するには、指定の座標系からSpherical Mercator座標系に変換する際に、Oracle Spatial and Graphがデータ変換をスキップするように変換ルールを作成します。

例6-4は、csdefinition.sqlスクリプトに含まれている、こうしたトランスフォーメーション・ルールを作成するSQL文を示します。ただし、使用する空間データの座標系が例6-4に示すルールの対象でない場合は、データの座標系がこれらのルールの対象でなければ、独自のルールを作成できます。(座標系の変換ルールの作成の詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。)

図6-4 csdefinition.sqlスクリプトに定義されたトランスフォーメーション・ルール

-- Create the tfm_plans, that is, the transformation rules.
-- Note: This will result in an incorrect conversion since it ignores a datum
-- datum between the ellipsoid and the sphere. However, the data will match
-- up better on Google Maps.

-- For wgs84 (8307)
call sdo_cs.create_pref_concatenated_op( 83073785, 'CONCATENATED OPERATION 8307 3785', TFM_PLAN(SDO_TFM_CHAIN(8307, 1000000000, 4055, 19847, 3785)), NULL);

-- For 4326, EPSG equivalent of 8307
call sdo_cs.create_pref_concatenated_op( 43263785, 'CONCATENATED_OPERATION_4326_3785', TFM_PLAN(SDO_TFM_CHAIN(4326, 1000000000, 4055, 19847, 3785)), NULL);

-- For OS BNG, Oracle SRID 81989
call sdo_cs.create_pref_concatenated_op( 819893785, 'CONCATENATED OPERATION 81989 3785', TFM_PLAN(SDO_TFM_CHAIN(81989, -19916, 2000021, 1000000000, 4055, 19847, 3785)), NULL);

-- For 27700, EPSG equivalent of 81989
call sdo_cs.create_pref_concatenated_op( 277003785, 'CONCATENATED_OPERATION_27700_3785', TFM_PLAN(SDO_TFM_CHAIN(27700, -19916, 4277, 1000000000, 4055, 19847, 3785)), NULL);
commit;

6.6 外部タイル層の動的な表示

Oracle Maps JavaScript APIでは、定義またはタイル画像がサーバー側に格納されていない場合でも、外部タイル層の動的な表示がサポートされます。基本的には、クラスMVCustomTileLayerを使用して、ESRI ArcGISタイル・サーバー、OpenStreetマップ・タイル・サーバー、その他のベンダー固有のマップ・タイル・サーバーなど、Web上にある任意の外部マップ・タイル・サーバーから直接提供されるタイル層を参照して表示できます。

これを行うには、新しいMVCustomTileLayerインスタンスの作成時に、次のことを行う必要があります。

- マップ・タイル層の構成(特に座標系、境界およびズーム・レベル)を確認する。

- Oracle Mapsからのタイル・リクエストを外部タイル・サーバーからのタイルURLに変換できる関数を提供する。

タイル層の構成にはJSONオブジェクトの形式が使用され、通常は次の例のような形式になります。

var mapConfig = {mapTileLayer:"custom_map", format:"PNG",
coordSys:{srid:8307,type:"GEODETIC",distConvFactor:0.0, minX:-180.0,minY:-90.0,maxX:180.0,maxY:90.0},
zoomLevels:
[{zoomLevel:0,name:"level0",tileWidth:15.286028158107968,tileHeight:15.286028158107968,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:1,name:"level1",tileWidth:4.961746909541633,tileHeight:4.961746909541633,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:2,name:"level2",tileWidth:1.6105512127664132,tileHeight:1.6105512127664132,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:3,name:"level3",tileWidth:0.5227742142726501,tileHeight:0.5227742142726501,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:4,name:"level4",tileWidth:0.16968897570090388,tileHeight:0.16968897570090388,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:5,name:"level5",tileWidth:0.05507983954154727,tileHeight:0.05507983954154727,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:6,name:"level6",tileWidth:0.017878538533723076,tileHeight:0.017878538533723076,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:7,name:"level7",tileWidth:0.005803187729944108,tileHeight:0.005803187729944108,tileImageWidth:256,tileImageHeight:256},
{zoomLevel:8,name:"level8",tileWidth:0.0018832386690789012,tileHeight:0.0018832386690789012,tileImageWidth:256,tileImageHeight:26},
{zoomLevel:9,name:"level9",tileWidth:6.114411263243185E-4,tileHeight:6.114411263243185E-4,tileImageWidth:256,tileImageHeight:256} ]
};

Oracle Mapsからのタイル・リクエストを外部タイル・サーバーからのタイルURLに変換できる関数を提供するには、次の例のような関数を指定します。

function getMapTileURL(minx, miny, width, height, level)
{
var x = (minx-mapConfig.coordSys.minX)/mapConfig.zoomLevels[level].tileWidth ;
var y = (miny-mapConfig.coordSys.minY)/mapConfig.zoomLevels[level].tileHeight ;
return "http://localhost:8888/mapviewer/mcserver?request=gettile&format=" + mapConfig.format + "&zoomlevel="+level+"&mapcache=mvdemo.demo_map&mx=" + Math.round(x) + "&my=" + Math.round(y) ;
}

前述の例において、アプリケーションによって実装された関数getMapTileURL()は、マップ・タイル画像を外部タイル・サーバーからフェッチし、そのマップ・タイル画像の左上隅を、Oracle Mapsクライアントによって指定されたマップ位置(minx,miny)に配置する、有効なURLを提供します。各マップ・タイル画像には、指定されたサイズ(width,height)および指定されたズーム・レベル(level)が使用されます。この特定の例で実際に返されるのは、ローカルMapViewerタイル・サーバーからのgettile URLですが、この方法はMapViewer以外のどのタイル・サーバーにも適用できます。

新しいカスタム・タイル層は、組込みのマップ・タイル層であるかのように、クライアントmapViewerに追加されます。

7 Oracle Map Builderツール

この章では、MapViewer Map Builderツール(Oracle Map Builderとも呼ばれる)について簡単に説明します。ただし、このツールのインタフェースの詳細はここでは説明しないため、これについては、Oracle Map Builderを使用する際に利用可能なオンライン・ヘルプを参照してください。

Oracle Map Builderは、スタンドアロン・アプリケーションで、データベースに格納された(スタイル、テーマおよびベース・マップに関する)マッピング・メタデータを作成および管理できます。たとえば、このツールを使用すると、スタイルを作成したり、スタイルの定義を変更したりできます。メタデータの処理以外に、このツールのインタフェースを使用すると、メタデータ(マップ上での線スタイルの表示方法を見るなど)や空間情報をプレビューすることもできます。

スタイル、テーマおよびマップに関する情報を作成、変更、削除するには、MapViewerメタデータ・ビューを直接変更せずに、可能なかぎりOracle Map Builderを使用する必要があります。SQL文を使用するなどしてOracle Map Builderの外部で変更を実行する場合は、Oracle Map Builder内でデータベース接続をリフレッシュし、最新の項目を取得してください。

Oracle Map Builderを効果的に使用するには、第2章で説明しているMapViewerの概念と、第3章のマップ・リクエストに関する説明を理解しておく必要があります。

この章の主な項目は、次のとおりです。

- 7.1項「Oracle Map Builderの実行」

- 7.2項「Oracle Map Builderのユーザー・インタフェース」

- 7.3項「Map BuilderのWebバージョン」

7.1 Oracle Map Builderの実行

Oracle Map Builderは、JARファイル(mapbuilder.jar)として出荷されています。Java Development Kit (J2SE SDK) 1.5以上の環境で、スタンドアロンのJavaアプリケーションとして、次のように実行できます。

% java –jar mapbuilder.jar [Options]

オプション:

-cache <cache_size>では、メモリー内ジオメトリ・キャッシュのサイズを指定します。Example: -cache 64M

-config <config-file>では、Map Builderの構成およびプリファレンス情報が含まれるファイルの位置を指定します。このオプションを指定しないと、Map Builderはユーザーのホーム・ディレクトリ内でoasmapbuilder.xmlという名前のファイルを探します。構成およびプリファレンス・ファイルの詳細は、1.6.2項を参照してください。

-connectによって、Map Builderの起動時に、oasmapbuilder.xmlプリファレンス・ファイルまたは-configオプションで指定されたすべてのデータソースの接続が登録され、最初に利用可能なデータソースに自動的に接続します。このオプションによって、アプリケーションの起動に必要な時間が長くなります。このオプションが定義されていない場合、起動は速くなりますが、「ファイル」メニューまたはアイコンを使用して希望する任意のデータソースに接続する必要があります(7.2項「Oracle Map Builderのユーザー・インタフェース」を参照してください)。

-helpを指定すると、利用可能なオプションに関する情報が表示されます。

7.1.1 GDALおよびTeradataでテーマを作成するためのJavaライブラリ

GDAL-OGR (バージョン1.8以降)またはTeradata (バージョン13以降)でMap Builderを使用してテーマを作成するには、それぞれのクラス・パス上のjarファイル、GDAL-OGR (gdal.jar)またはTeradata (terajdbc4.jarおよびtdgssconfig.jar)を使用してMap Builderを起動する必要があります。これらのJavaライブラリは、システムにインストールされたGDALやTeradataのWebサイトにあります。(GDALについては、GDALのWebサイトを参照してください。)

次の例のコマンドは、クラス・パスの別のライブラリでMap Builderを起動します。

Windows: java -Xmx512M -cp .\mapbuilder.jar;.\gdal.jar;.\terajdbc4.jar;.\tdgssconfig.jar oracle.mapviewer.builder.MapBuilder

Linux: java -Xmx512M -cp ./mapbuilder.jar:./gdal.jar:./terajdbc4.jar:./tdgssconfig.jar oracle.mapviewer.builder.MapBuilder

7.2 Oracle Map Builderのユーザー・インタフェース

Oracle Map Builderでは一般に、画面の左側をオブジェクトの検索や選択を行うナビゲーション用に使用し、右側を選択したオブジェクトに関する情報の表示に使用します。図7-1に示すOracle Map Builderのメイン・ウィンドウでは、メタデータのナビゲーション・ツールが画面の左側、選択した領域スタイルのディテール・ペインが右側に表示されています。

図7-1 Oracle Map Builderのメイン・ウィンドウ

最上位のメニューには、標準的なエントリの他に、Oracle Map Builderに固有な機能のエントリも含まれています。

ショートカット・キーを使用して、メニューおよびメニュー項目にアクセスできます。たとえば、[Alt]+[F]を押すと「ファイル」メニュー、[Alt]+[E]を押すと「編集」メニューにアクセスできます。また、[Alt]+[H]、[Alt]+[A]の順に押すと「ヘルプ」、「バージョン情報」の順にアクセスできます。

メニューの下のアイコンは、次のアクションを実行します。

- 「Add new connection」により、Oracle Map Builderで使用する新しいデータベース接続が作成されます。

- 「Load/Add/Remove connection」により、Oracle Map Builderで使用するデータベース接続のロードまたは追加が実行されるか、Oracle Map Builderで使用可能な接続からデータベース接続が削除されます。

- 「Create new metadata」により、新しいベース・マップ、テーマまたはスタイルが作成されます。

- 「Open」により、ベース・マップ、テーマまたはスタイルがオープンされます。

- 「Save」により、現在選択されているオブジェクトへの変更がすべて保存されます。

- 「Save All」により、オープン状態にある全オブジェクトへの変更がすべて保存されます。

Oracle Map Builderウィンドウの左側に表示されるMetadataナビゲータには、データベース接続セレクタ、アクションを実行するためのアイコン、現在選択されているデータベース接続にアクセス可能なMapViewerメタデータ・オブジェクト(オブジェクト・タイプによって分類)の階層ツリーなどが表示されます。オブジェクトを選択するには、該当するツリー・ノード(複数可)を開いた後、目的のオブジェクトをダブルクリックします。

Oracle Map Builderウィンドウの右側にあるタブおよびペインには、ユーザーが選択またはオープンしたオブジェクトの詳細が表示されます。

他のオブジェクトに切り替えるには、該当するタブをクリックします。タブを閉じるには、該当するタブのXをクリックします。オブジェクトに変更を加えてXをクリックすると、変更を保存するかどうかを尋ねられます。

「Messages」領域には、フィードバック情報(アクションの結果、エラー・メッセージ、警告メッセージなど)が適宜表示されます。

詳細なヘルプ情報は、Oracle Map Builderのインタフェースを使用して利用できます。特定のペインやダイアログ・ボックスに関する情報も含め、Oracle Map Builderの詳細はオンライン・ヘルプを参照してください。

7.3 Map BuilderのWebバージョン

MapViewer Webコンソールを使用して(右上のリンク)、Map BuilderのWebバージョンにアクセスできます。Webユーザー・インタフェースは、従来の独立型のMap Builderツールのユーザー・インタフェースをモデルにしています。Map Builderの機能および操作の詳細は、7.2項およびオンライン・ヘルプを参照してください。

このWebバージョンは、次のとおりです。

- 独立型のすべてのMap Builderツールの機能は実装していません。

- メタデータ・エディタ・ページおよびウィザードが含まれます。

- メタデータの変更の保存時に、サービス・リクエストに対して使用されるサーバーのメタデータ・キャッシュではなく、独自のメタデータ・キャッシュが使用されます。(メタデータがMapViewerサーバーのキャッシュにすでにキャッシュされている場合は、サービス・リクエストでの変更内容が有効になるようにデータソースのメタデータ・キャッシュがクリアされます。)

8 Oracle MapViewer Editor

この章では、Oracle MapViewer Editor (マップ・エディタとも呼ばれる)について説明します。基本的には、Oracle Map Editorの使用時に提供されるオンライン・ヘルプと同じ情報が含まれます。

オンライン・ヘルプを参照するには、マップ・キャンバス領域のツールバーにある「ヘルプ」(疑問符)アイコンをクリックします。

主なトピック

MapViewer Editorの概要および使用方法

MapViewer Editorのリファレンス

8.1 MapViewer Editorの概要および使用方法

「関連トピック」では、MapViewer Editorの重要な概念について説明するとともに、空間データの編集に関するスタート・ガイドとして役立つ、一般的なワークフローの例を示します。

関連トピック

MapViewer Editorについて

MapViewer Editorのメイン・ウィンドウ

編集セッション

スタート・ガイド: 一般的なワークフロー

既知の問題

参照項目

MapViewer Editorのリファレンス

8.1.1 MapViewer Editorについて

リリース12.1.3から、Oracle Map EditorはJARファイル(mapeditor.jar)として出荷されています。J2SE JDK (Java Development Kit) 1.5以上がインストールされている場合、mapeditor.jarを含むディレクトリに移動し、次のコマンドを入力して、スタンドアロンJavaアプリケーションとして実行できます。

% java –jar mapeditor.jar

MapViewer Editorは、Webベースの空間データ編集ツールです。MapViewer EARファイルの一部として配布され、MapViewerサーバーの稼働中、任意のWebブラウザからJavaアプレットとして起動できます。MapViewer Editorでは、エンタープライズ全体にまたがった、マルチユーザーおよびマルチセッションのオンライン・データ編集機能がサポートされています。

MapViewer Editorは、編集対象の空間データがSDO_GEOMETRYタイプの2次元(2D)ジオメトリから構成されていることを前提としています。方位ポイントがサポートされています。ただし、3DおよびLRS (線形参照システム)ジオメトリの編集は完全にはサポートされていないため、これらのオブジェクトに対する編集操作を実行した場合、未知の結果が発生する可能性があります(つまり、このようなデータの視覚化は可能ですが、編集操作は失敗する場合があります)。

MapViewer Editorを効果的に使用するには、Oracle Spatial and Graph開発者ガイドの空間データ型およびメタデータに関する章で説明されている概念を理解する必要があります。

8.1.2 MapViewer Editorのメイン・ウィンドウ

MapViewer Editorには、図8-1のようなメイン・ウィンドウがあります。

図8-1 MapViewer Editorのメイン・ウィンドウ

MapViewer Editorのメイン・ウィンドウには、次に示す3つの主な領域があります。

- 左側の編集セッション領域(図では、現在の編集セッション名であるSTATES_SEがラベルとして使用されています)では、セッション層とデータ層の操作や設定を指定したり、デフォルトのレンダリング・プロパティやラベル付けプロパティをオーバーライドしたりできます。「描画プロパティ」および「ラベル付けプロパティ」パネルは展開および縮小できます。

- 中央のマップ・キャンバス領域には、マップが表示されます。設定したプロパティやプリファレンス、選択したツールおよび実行したデータ編集操作は、この領域のコンテンツに反映されます。

- 右側のツール領域には、一連の縮小可能なパネルが含まれており、各パネルには、機能に応じてグループ化された一連のツールが含まれています。地物ツール、描画ツール、頂点ツール、グループ化ツール、ジオメトリ・ツールおよび変換ツールに対応するパネルが表示されます。

8.1.3 編集セッション

MapViewer Editorでは、編集セッション(または単にセッションとも呼ばれます)により、MapViewer Editorユーザーが空間データを編集できる個人用ワークスペースが定義されます。各セッションには、少なくとも次の情報が含まれます。

- セッションの名前(新しいセッションの作成時に指定します)

- データ層のリスト(バックグラウンド層や、空間ジオメトリ・データを含む編集可能な表など)

- データ表の表示スタイル

- セッションを作成したユーザー(つまりセッション所有者)の名前

セッション定義は、そのセッションの編集に使用されるデータベースに永続的に格納されます。ユーザーはどの時点でも複数の編集セッションを保持できます。

セッションごとに、通常1つ以上のバックグラウンド層(各層は、任意の事前定義済テーマ、ベース・マップまたはタイル層にすることができます)および1つ以上の編集層を追加します。編集層のソースには、通常同じMapViewerデータソース(データベース・スキーマ)またはWeb Feature Server (WFS)の公開済地物を使用します。

編集セッションはUSER_SDO_EDIT_SESSIONSビューに格納されます。MapViewer Editorを使用する前に、DBAは第8.1.4.1項「USER_SDO_EDIT_SESSIONSビューのインストール」の説明に従ってsdedefinition.sqlスクリプトを実行する必要があります。

8.1.3.1 編集モード

空間データを編集するには、単純に第8.1.4項「スタート・ガイド: 一般的なワークフロー」で説明されている特定の基本手順を実行します。そのうちの1つは、セッション編集可能層で編集モードを有効にするための手順です。

セッションでは、セッション編集可能層が編集モードになっているかどうかに応じて、編集可能なデータ表が異なる方法でレンダリングされる場合があります。セッションを作成するか再度開いたとき、層は通常、編集モードになっていません。編集モードになっていない場合、データ層はMapViewerサーバーによってレンダリングされ、エディタ・アプリケーションは、単純にそのサーバーによって生成された画像を表示します。

層のセッションを編集モードに切り替えると、編集可能なデータ表は、(引き続きサーバー側でレンダリングされる)他の層とは異なる方法でレンダリングされます。これらの表は、編集可能なライブ・ベクター地物としてレンダリングされます。表示可能な地物が多すぎる場合は、編集可能モードに設定しないことをお薦めします。これは、アプリケーションがそれらをクライアント側でロードしようとするためです。あまり多くの情報がクライアント側にロードされないように、小さい領域に対して作業を行うことをお薦めします。

セッション内で行われた変更はすべて保存できます。保存された変更はデータベース内で保持されますが、それらの変更は、セッションがLIVEワークスペースで編集されている場合を除き、同じセッション内でのみ表示されます。別のユーザーが、LIVE以外のワークスペースで、同じデータ表を操作する新しいセッションを作成した場合、そのセッションでは、最初のセッションで行われた変更は表示されません。その逆も同様です。変更が他のユーザーに表示されるのは、LIVE以外のワークスペースを使用するセッションをマージした場合のみです。

セッションをマージすると、そのセッション内で行われたすべての編集内容がライブ・データ表に公開され、その表に問い合せたすべてのユーザーに表示されます。このセッションは実質的には完了していますが、(将来の編集用に)引き続きデータベースに格納され、後からパージできます。

セッションの編集内容を保存したが、そのセッションをマージしていない場合、編集者は時間や場所を問わず、そのセッションを再度開き、編集作業を継続できます。セッションは数日間(またはそれ以上)開いたままになっているのが一般的です。

8.1.3.2 セキュリティとマルチユーザー編集に関する考慮事項

MapViewer Editorは、組織内の複数のユーザーが使用できるように設計されています。エディタ自体のユーザー管理やセキュリティは、MapViewerサーバーに依存しています。ユーザーがMapViewerホームページからエディタを起動した場合、そのユーザーはmap_edit_roleロールを持つJava EEまたはミドルウェア・ユーザーとしてサーバーにログインする必要があります。管理者は新しいユーザーをJava EEコンテナに追加でき、そのユーザーには、必要なmap_edit_roleロールを付与する必要があります。(map_admin_roleロールを持つユーザーも、MapViewer Editorへのログインとその使用が可能です。)

各ユーザーは、それぞれがデータ表を変更できる編集セッションを作成するか、再度開く必要があります。マルチユーザー環境では、すべてのユーザーが作業を調整し、明確なルールに従う場合を除き、セッション間で編集の競合が発生することは避けられません。

8.1.4 スタート・ガイド: 一般的なワークフロー

このトピックでは、MVDEMOサンプル・データ・スキーマを使用して空間データ表を編集する、一般的なワークフローの例について説明します。基本の手順は次のとおりです。

1. USER_SDO_EDIT_SESSIONSビューのインストール

2. MapViewerデータソースの編集可能化

3. マップ・データ・サーバーのデータ・ストリーミングの許可

4. MapViewer Editorの起動とログイン

5. データソースの選択と新しいセッションの作成

6. セッションへのデータ層の追加

7. データ層プロパティの変更

8. マップ内の移動と編集モードの有効化

9. 編集する地物の選択

10. セッションの編集内容の保存とマージ

これらの基本手順は、新しいセッションの作成、既存のジオメトリ表のロードおよびいくつかの編集作業を行った後、セッションを終了し、そのセッションがバージョニングされている場合は変更をライブ表にマージする、一般的なワークフローを示しています。

(または、新しいセッションの作成後、ツリー・ノードをクリックして新しいジオメトリ層を作成することによって、新しい表を作成することもできます。その後、いくつかのバックグラウンド層を追加し、新しい表に含める新しい地物をデジタル化できます。)

8.1.4.1 USER_SDO_EDIT_SESSIONSビューのインストール

この1回かぎりのタスク(DBAが実行する必要があります)により、MapViewer Editorに必要なUSER_SDO_EDIT_SESSIONSシステム・ビューがインストールされます。このインストールを実行するには、MapViewerのWEB-INF/adminディレクトリにあるSQLスクリプト・ファイルsdedefinition.sqlを実行します。

すべての編集セッションの定義は、USER_SDO_EDIT_SESSIONビューに格納されます。各セッションの属性は次のとおりです。

- name: セッションの名前。

- description: セッションの説明。

- editor: セッションの所有者の名前。この名前はユーザー・スキーマ名ではありませんが、編集者を識別する任意の名前を指定できます。

- area: セッションの領域の名前(現在は使用されていません)。

- workspace: 基礎となるOracleワークスペースの名前。このワークスペース名は、セッションの作成時に自動的に割り当てられます。セッションがバージョニングされていない場合は、LIVEという名前が割り当てられます。セッションがバージョニングされている場合、この名前は<editor-name>_<session-name>_<data-source-name>という組合せになります。

- definition: セッションの一般属性や層の説明を含む、セッションのXML記述。

8.1.4.2 MapViewerデータソースの編集可能化

MapViewer Editorは、編集可能になっているデータソースのみをロードします。データソースを編集可能にするには、MapViewer構成ファイルの<map_data_source>要素を変更して、editable="true"と指定する必要があります。例:

<map_data_source name="mvdemo"
jdbc_host="yourhost.com"
jdbc_sid="lbsmain"
jdbc_port="37407"
jdbc_user="mvdemo"
jdbc_password="!mvdemo"
jdbc_mode="thin"
number_of_mappers="3"
allow_jdbc_theme_based_foi="true"
editable="true"
/>

editable属性のデフォルト値はfalseであり、これはデータソースが編集可能でないことを意味します。

8.1.4.3 マップ・データ・サーバーのデータ・ストリーミングの許可

編集可能データは、MapViewer Map Data Serverからクライアントにストリームされます。デフォルトでは、Map Data Serverはデータソースからデータをストリームできません。データをデータソースからストリームできるようにするには、MapViewer構成ファイルの<mds_config>要素を変更し、データソース・テーマに対する値がtrueに設定された<data_source>サブ要素を定義する必要があります。例:

<mds_config>

<data_source name="mvdemo">
<allow_predefined_themes>true</allow_predefined_themes>
<allow_dynamic_themes>true</allow_dynamic_themes>
</data_source>

</mds_config>

8.1.4.4 MapViewer Editorの起動とログイン

MapViewer Editorを使用する前に、MapViewerがデプロイされ、mvdemoデータソースが定義されていることを確認します。

1. MapViewerホームページに移動します(通常はhttp://<host>:<port>/mapviewer)。

2. 右上隅の「エディタ」リンク(「管理」と「ヘルプ」の間)をクリックします。

3. アプリケーション・サーバーの管理ユーザーとしてログインします(たとえば、WebLogic Serverの場合はweblogic)。

ロード画面が、大きいJavaアイコンとともに表示されます。ロードが完了すると、MapViewer Editorのメイン・ウィンドウが表示されます。

8.1.4.5 データソースの選択と新しいセッションの作成

データソースを選択し、新しい編集セッションを作成します。

1. 編集セッション領域の左にあるセッション層とデータ層の操作用ツールバーで、「編集セッションを開きます」アイコンをクリックして、このMapViewerサーバーの編集可能なデータソースを示すダイアログ・ボックスを表示します(図8-2を参照)。

図8-2 編集セッションを開く

2. 表示された使用可能なサーバー上のデータソースをクリックして、そのデータソースを選択します。たとえば、データソース表示ツリーの「MVDEMO」の下にある「編集セッションの作成」ノードをクリックします。

3. 「編集セッションの作成」ダイアログ・ボックスで、次のように適切な情報を入力します。
名前: 編集セッションの名前。例: STATES_LIVE

説明: セッションに関する説明テキスト(オプション)。例: Edit US states data

バージョン有効化: このオプションを選択した場合、このセッション用の新しいワークスペースが作成され、後からすべての変更をマージできるようになります。このオプションを選択しなかった場合、バージョンは管理されず、セッションの編集内容が直接LIVEデータに適用されます。バージョニングされたセッション(LIVE以外)の場合、ワークスペース名の形式は<EDITOR_NAME>_<SESSION_NAME>_<DATASOURCE>になるため、バージョニングされた各セッションは独自のワークスペースを保持します。

注意:
バージョニングされたセッションでは、Oracle Workspace Managerを使用してバージョン有効化された表が必要になります。詳細は、Oracle Database Workspace Manager開発者ガイドを参照してください。

表示された使用可能なサーバーにデータソースが含まれていない場合は、「サーバーに接続」をクリックして、図8-3のようなダイアログ・ボックスを表示できます。

図8-3 データソースの選択

「データ・ソースの選択」ダイアログ・ボックスで、次のように適切な情報を入力します。

- MapViewerサーバー: データソースがあるMapViewerサーバーのURL。

- エディタ名: セッション所有者の名前(表示するセッションのフィルタ処理に使用します)。

- データ・サーバー認証(フォーム・タイプ): MapViewerサーバーが(フォーム認証を使用する)セキュアなサーバーである場合、このオプションを選択し、ユーザーおよびパスワード情報を入力します。

「OK」をクリックすると、指定されたサーバー上にある、指定されたエディタ名に関連付けられたすべての編集セッションの名前がツリーにロードされます。

8.1.4.6 セッションへのデータ層の追加

1つ以上のデータ層を編集セッションに追加します。

1. 編集セッション領域の左にあるセッション層とデータ層の操作用ツールバーで、「空間データを追加します」アイコンをクリックして、空間データの追加ダイアログ・ボックスを表示します。

2. このダイアログ・ボックス(図8-4を参照)で、目的のサーバー、ジオメトリ層、目的のデータソース(この例ではMVDEMO)、目的の層(この例ではSTATES)の順にクリックします。

図8-4 空間データの追加

各層の横にある[8307]は、その層がSRID 8307 (つまりWGS84経度-緯度座標系)に基づいていることを示しています。編集セッションで使用するすべてのデータは、同じSRIDに基づいている必要があります。

「OK」をクリックすると、MapViewer Editorは、層の表のメタデータ情報に基づいてマップの領域を設定し、データの範囲に含まれる領域を取得し、サブセット領域を現在のマップ領域として設定します。(マップ領域にデータが含まれていない場合、マップ・キャンバスに他の値(中心X、中心Y、高さ、スケールなど)を入力し、「リフレッシュ」ボタンをクリックしてマップを再描画します。)

8.1.4.7 データ層プロパティの変更

編集可能な層がOracle表に基づいている場合、「キー列」がこのデータ用に正しく設定されていること、およびその値がROWIDではないことを確認します。

編集可能な層を編集セッション領域に追加すると、MapViewer Editorは自動的にその層の表に主キーが含まれているかどうかを確認し、「キー列」プロパティをこの値に設定します。「キー列」がROWIDに設定されている場合、MapViewer Editorはデータを編集できません。この場合、「キー列」プロパティを、一意の値を含む表内の別の列に設定する必要があります。(これは表の主キーでなくてもかまいませんが、一意の値を含んでいる必要があります。)

「キー列」の値を変更するには、編集セッション領域の左にあるセッション層とデータ層の操作用ツールバーで、「セッション・プロパティを編集します」をクリックして、セッションと層のプリファレンスを編集するためのダイアログ・ボックスを表示します。

1. 編集セッション領域の左にあるセッション層とデータ層の操作用ツールバーで、「セッション・プロパティを編集します」をクリックして、セッションと層のプリファレンスを編集するためのダイアログ・ボックスを表示します。

2. ダイアログ・ボックスの「キー列」で、一意の値を含むテキスト列を選択します。たとえばSTATESの場合、キー列としてSTATE_ABRV (州の略称を表す2つの文字)を選択します。

8.1.4.8 マップ内の移動と編集モードの有効化

マップ・キャンバス領域の左上隅にあるナビゲーション・パネルを使用すると、マップをパンしたり、ズーム(マーキー・ズーム、ズーム・イン、ズーム・アウト)操作を実行したりすることができます。

左側の編集セッション領域にある「データ・レイヤー」パネルを使用すると、層の可視性の制御、層の編集可能化、編集操作を適用するターゲット層の指定または変更、および編集セッションの動作に影響を与えるその他の選択を行うことができます。

手順の例を次に示します。

1. マップ・キャンバス領域の左上隅にあるナビゲーション・パネルを使用して、編集する特定のマップ領域にパンし、必要に応じてズームします。

2. 目的のデータ層に対して、「データ・レイヤー」パネルにある「レイヤーは編集可能です」(鉛筆)アイコンのチェック・ボックスを選択して、その層を編集モードにします。
セッションがバージョニングされ、データ層が編集可能になっている場合、MapViewer Editorは、その層のベース表がOracle Workspace Managerを使用してバージョニングされているかどうかを確認します。バージョニングされていない場合、バージョニング用にその表の主キーを指定する必要があります(主キーが定義されていない場合)。

3. 目的のデータ層に対して、「データ・レイヤー」パネルにある「現在編集中のターゲット」(的)アイコンのチェック・ボックスを選択して、すべての編集内容がこの層に適用されるようにします。

4. ツール領域のツールを使用して、いくつかの編集操作を実行します。(「編集する地物の選択」も参照。)

8.1.4.9 編集する地物の選択

セッションが編集モードまたは選択モードになっている場合、マウスをマップ領域の上に移動すると、地物がハイライトされます。地物をクリックすると、その地物が選択されます(枠線がアニメーション化され、内側の領域が透明になります)。たとえば、図8-5における米国のフロリダ州のようになります。

図8-5 選択された地物

データ層のレンダリングの内容は、「描画プロパティ」パネルでの選択内容によって決まります。ラベル付けの内容は、「ラベル付けプロパティ」パネルでの選択内容によって決まります。動的スタイルは、これらのプロパティ・パネルでの選択内容に基づいて作成されます。

選択した地物(前述の図ではフロリダ)のMBR (最小外接矩形)の周りにはマニピュレータが表示され、これに含まれる9個の四角形を使用して、この地物をドラッグしたり、サイズを変更できます。また、小さい赤色の円を使用して地物を回転することもできます。

ウィンドウの右側にあるツール領域のパネルには、選択、描画、頂点の編集、グループ化およびその他の操作を実行するためのツールが表示されます。

8.1.4.10 セッションの編集内容の保存とマージ

目的の編集を行ったら、マップ・キャンバス領域のツールバーで、次のいずれかのボタンをクリックして編集内容を保存します。

- ターゲット・レイヤーの編集されたデータを保存します: 現在のターゲット層で行われた、保存されていない変更を適用します。

- すべての編集されたデータを保存します: 現在のセッションで行われた、保存されていないすべての変更を適用します。

編集モードの間は、編集内容を頻繁に保存することをお薦めします。保存をリクエストすると、編集されたデータがサーバーに返送され、コミットされます。

セッションがバージョニングされている場合、ここまでの編集内容は、バージョニングされたこのセッション内でのみ表示され、他のユーザー(またはセッション)には表示されないことに注意してください。

注意:
バージョニングされたセッションでは、Oracle Workspace Managerを使用してバージョン有効化された表が必要になります。詳細は、Oracle Database Workspace Manager開発者ガイドを参照してください。

バージョニングされたセッションを完了し、変更を公開できる状態になったら、左側の編集セッション領域の最上部近くにあるセッション層とデータ層の操作用ツールバーの「セッションの表示可能なレイヤーをマージします」アイコンをクリックして、セッションをマージする必要があります。(処理されるのはバージョニングされた層のみであるため、マージする層がセッション内に多数存在する場合は、層を個別に表示可能にして作業し、他の(表示可能でない)層は編集用に残して、後から表示可能にできます。)

編集セッションがバージョニングされている場合、一度変更を保存すると、編集可能な層のベース表をLIVEデータとマージできるようになります。マージを実行すると、編集可能な層の編集セッションのワークスペース・データが現在のLIVEデータと比較され、競合が発生した場合は「競合の解決」ダイアログ・ボックスが表示されます。たとえば、図8-6は、赤色の大きい地物がGEOMETRYおよびNAME列で競合していることを示しています。

図8-6 競合の解決

LIVEデータとして使用するバージョン属性を選択して、競合の解決方法を定義します。地物の競合は空間属性と非空間属性の両方で発生する場合があり、様々なデータから値を選択して、それらの競合を解決できます。前述の図では、STATES_V編集セッションのGEOMETRY値と、LIVEデータのNAME値を使用して競合を解決します。

マージ・プロセスを実行および完了すると、バージョニングされた編集セッションの地物には、競合を解決するために選択した値が割り当てられます。バージョニングされた編集セッションは引き続き存在しますが、最終的なマージの後にパージできます。

層の競合が多すぎる場合、一度にすべての競合を解決する必要はありません。「競合の解決」ダイアログ・ボックスで作業を行い、「OK」をクリックするたびに、解決の対象として影響を受ける競合が、サーバー内で処理されます。ただし、他のデータ競合がまだ1つ以上存在する場合、マージ操作は層のすべての競合が解決されるまで実行されません。

「はい」をクリックして確認すると、すべてのユーザーのマップ・データ上に表示されるライブ・データ表に、変更がマージされます。バージョニングされたデータとLIVEデータとの間で競合が発生している場合、競合を解決し、データをマージするためのマージ・ツール・ダイアログが表示されます。

8.1.5 既知の問題

現在のリリースに関する既知の問題と考慮事項については、readmeファイルを参照してください。

8.2 MapViewer Editorのリファレンス

リファレンス・トピックでは、MapViewer Editorのプリファレンス(プロパティ)とメイン・ウィンドウの領域について説明します。

関連トピック

セッションと層のプリファレンス

編集セッション領域

マップ・キャンバス領域

ツール領域

参照項目

MapViewer Editorの概要および使用方法

8.2.1 セッションと層のプリファレンス

セッションと層のプロパティに関する特定のプリファレンスを編集して、関連するプロパティのデフォルト値を指定できます。プリファレンスを設定できるプロパティのカテゴリは、次のとおりです。

<session-name> Properties
Control Layer Properties
Feature Selection
Drawing Tools
Vertex Tools
Background Layer
Scale Bar Layer
Manipulator Layer
Data Layer Properties
<data-layer-name> (one for each data layer)

いずれかのペインで変更を行い、これらの変更を保存する場合、別のペインに切り替える前か、「閉じる」をクリックして「プリファレンスの編集」ダイアログ・ボックスを閉じる前に、「適用」をクリックする必要があります。

8.2.1.1 <session-name>のプロパティ

編集セッションのオプションが含まれています。

ロギング・レベル: ロギングの情報レベル。基本的な(制限された)情報の場合はinfo、詳細な情報の場合はfinestを指定します。(finestでは詳細な情報が提供されますが、処理に時間がかかり、必要な記憶域の量も増加します。)

HTTPタイムアウト: HTTPリクエストからのレスポンスを待機する(WFSサーバーの機能にアクセスする場合など)最大時間(秒単位)。

HTTPプロキシの使用: 選択した場合、使用するHTTPプロキシ・サーバーのホストおよびポートを指定します。

8.2.1.2 コントロール層のプロパティ

様々なオブジェクトの色やサイズなど、編集セッションの視覚的な側面に関するオプションが含まれています。

色に関するオプションについては、現在のデフォルトの色を示す小さいボックスをクリックして、「色の選択」ダイアログ・ボックスを表示します。このダイアログ・ボックスでは、サンプル、HSV、HSL、RGBまたはCMYKのいずれかの方法を使用して、新しい色を指定できます。指定するたびに、実際の外観がダイアログ・ボックスのプレビュー領域に表示されます。指定した内容を保存するには、「適用」をクリックします。

8.2.1.2.1 地物の選択

地物のマウス・オーバーの色: マウスの下にある地物の表示色。

ターゲット地物の色: ターゲット層の選択された地物の色。

非ターゲット地物の色: ターゲット層以外の層の選択された地物の色。

地物要素の色: 地物のジオメトリ要素をハイライトするための色。地物ジオメトリの検証および表示に使用します。

8.2.1.2.2 描画ツール

カーソル中央の色: 描画時にカーソル記号内に表示される十字マーカーの色。

カーソル枠線の色: 描画時にカーソル記号の境界に使用される色。

カーソル・ポイント・サイズ: カーソル記号のサイズ(ピクセル単位)。

スナップ・ポイント中央の色: スナップ層でマウス位置をスナップしたときにカーソル記号内に表示される十字マーカーの色。

スナップ・ポイント枠線の色: スナップ層でマウス位置をスナップしたときにカーソル記号の境界に使用される色。

線セグメントの色: 線や多角形をデジタル化するときにポイント間に表示されるセグメントの色。

線セグメントの幅: 線や多角形をデジタル化するときにポイント間に表示されるセグメントの幅。

ラバーバンド・セグメントの色: マウスを移動して線や多角形のポイントをデジタル化するときの線セグメントの色。

ラバーバンド・セグメントの幅: マウスを移動して線や多角形のポイントをデジタル化するときの線セグメントの幅。

8.2.1.2.3 頂点ツール

頂点の表示: 地物の境界の周りでマウスを移動したときに、選択された地物の頂点をハイライトします。

頂点ボックスの色: 頂点を表す四角形の色。

頂点ボックス・サイズ: 頂点を表す四角形のサイズ(ピクセル単位)。

8.2.1.2.4 バックグラウンド層

表示されるマップ領域の背景色。

8.2.1.2.5 スケール・バー層

スケール・バーの表示: マップ・スケール・バーを表示します。

8.2.1.2.6 マニピュレータ層

色: マニピュレータ四角形の境界色。

スナップ・ハイライト色: スナップ・ポイントをハイライトするための色。地物が選択され、マニピュレータ四角形が表示されている場合、右クリックにより、選択されている地物にスナップ・ポイントを設定するためのオプションが提供されます。このスナップ・ポイントは、地物を移動して別の場所にスナップするときに使用できます。

変更された地物の色: 移動中の地物の境界色。

ハンドル・サイズ: マニピュレータ四角形の角にあるマーカーのサイズ(ピクセル単位)。

妨害された場合に非表示: マニピュレータ四角形が別のパネルに覆われたとき、その四角形を非表示にします。

8.2.1.3 データ層のプロパティ

各データ層でプリファレンスを設定できるプロパティは、そのデータ層のタイプによって異なります。

- ジオメトリ層のプロパティ

- WFS層のプロパティ

8.2.1.3.1 ジオメトリ層のプロパティ

データセットおよび「描画中」タブが含まれています。

データセット・タブ:

MapViewerサーバー: 層を定義するMapViewerサーバーのURL。

キー列: 編集可能な地物を対象とする、層のキー列。主キーでなくてもかまいませんが、データ値は一意である必要があります。

ジオメトリ列: この層に関連付けられたジオメトリ列の名前。

問合せ条件: 層の地物をフィルタ処理するためのオプション条件(WHEREキーワードを含まないSQL WHERE句)。

ライブ・スケール: (現在は使用されていません。)

ラベル列: 選択した場合、地物のラベル付けに使用するテキスト・データが含まれている列を指定します。

共有境界線: 編集中のオブジェクトと境界を共有する他のジオメトリ・オブジェクトに、編集操作を適用します。

たとえば、2つの土地が境界を共有しているとします。このオプションを選択した場合、一方の土地を編集して共有境界を変更することにより、その土地を大きくすると、もう一方の土地の定義は変更され、サイズもそれに応じて小さくなります。このオプションを選択しなかった場合、2番目の土地の定義は変更されません(このため、2つの土地の定義は空間的に重なります)。

順序の作成: MapViewerサーバー上に新しい順序を作成します。

「描画中」タブ:

編集可能でない場合はMapViewerに描画: 層が編集可能でない場合でも、その層をMapViewerに表示します。このオプションを選択しなかった場合、層は編集可能な場合のみ表示されます。

8.2.1.3.2 WFS層のプロパティ

キー列: 編集可能な地物を対象とする、層のキー列。主キーでなくてもかまいませんが、データ値は一意である必要があります。WFS 1.0.0層の場合は常にFIDです。

ジオメトリ列: WFS地物タイプの空間属性の名前。

ラベル列: 選択した場合、地物のラベル付けに使用するテキスト・データが含まれている列を指定します。

多角形の外部リングの方向: 多角形の外部リングの方向を指定します。Oracle Spatial and Graphデータの場合、外部リングの方向は反時計回りですが、WFSサーバーによって提供された外部データの場合、この方向は異なる場合があります。この値は新しい多角形の構築時に考慮されます。デジタル化する多角形の外部境界の方向がこの値と異なる場合、座標の方向は自動的に再指定されます。

共有境界線: 編集中の地物と境界を共有する他の地物に編集操作を適用します。

たとえば、2つの土地が境界を共有しているとします。このオプションを選択した場合、一方の土地を編集して共有境界を変更することにより、その土地を大きくすると、もう一方の土地の定義は変更され、サイズもそれに応じて小さくなります。このオプションを選択しなかった場合、2番目の土地の定義は変更されません(このため、2つの土地の定義は空間的に重なります)。

機能のGET URL: GetCapabilitiesリクエストに対するWFSサーバーのURL。

バージョン: WFSサーバーのバージョン。(現在は1.0.0のみがサポートされています。)

認証: Basicタイプの認証を(セキュアなWFSサーバーの場合に)適用するかどうかを指定します。

8.2.2 編集セッション領域

MapViewer Editorウィンドウの左側にある編集セッション領域では、セッション層とデータ層の操作や設定を指定したり、デフォルトのレンダリング・プロパティやラベル付けプロパティをオーバーライドしたりできます。「描画プロパティ」および「ラベル付けプロパティ」パネルは展開および縮小できます。

- セッション層とデータ層の操作用ツールバー

- データ・レイヤー

- 描画プロパティ

- ラベル付けプロパティ

8.2.2.1 セッション層とデータ層の操作用ツールバー

編集セッション領域の最上部にあるツールバーには、次の操作を実行するためのアイコンが含まれています。

- 編集セッションを開きます: 開く編集セッションを選択するためのダイアログ・ボックスを表示します。

- 空間データ・レイヤーを追加します: セッションに空間データ層を追加できるダイアログ・ボックスを表示します。空間表のジオメトリ層は編集できますが、事前定義済テーマ、ベース・マップおよびタイル層は、通常バックグラウンド層として使用されるため、編集できません。
MapViewer層またはWFS層の階層を展開して目的のデータ層を探した後、「OK」をクリックします。

- データ・レイヤーを削除します: 現在選択されているデータ層を「データ・レイヤー」領域から削除します。

- データ・レイヤーを上に移動します: 現在選択されているデータ層を「データ・レイヤー」領域内の1つ上のレベルに移動します。

- データ・レイヤーを下に移動します: 現在選択されているデータ層を「データ・レイヤー」領域内の1つ下のレベルに移動します。

- セッション・プロパティを編集します: セッションと層のプリファレンスを編集するためのダイアログ・ボックスを表示します。

- セッションの表示可能なレイヤーをマージします (バージョニングされた編集セッションでのみアクティブ)マージ層のワークスペースをLIVEワークスペースにマージします。(「セッションの編集内容の保存とマージ」を参照。)

- 編集セッションの定義を保存します: 現在のセッション定義をUSER_SDO_EDIT_SESSIONSビューに保存します。(「編集セッション」および「USER_SDO_EDIT_SESSIONSビューのインストール」を参照。)

- 現在の編集セッションを削除します: 現在のセッション定義をUSER_SDO_EDIT_SESSIONSビューから削除します。
セッションがバージョニングされている場合、そのセッションに関連付けられているワークスペースも削除されます。ただし、バージョニングされている層のベース表については、セッション層のベース表が他のワークスペース内で変更されていない場合、ダイアログ・ボックスが表示され、その表のバージョニングを解除するかどうかを選択できます。セッション層のベース表が他のワークスペース内で変更されている場合、その表はバージョニングされたままになります。

8.2.2.2 データ・レイヤー

「データ・レイヤー」パネルには、ヘッダー行および編集可能な(追加され、削除されていない)各空間データ層に対応する行が含まれています。ヘッダー行には、次の各操作に対応するアイコンを含む列があり、個々の層に対してオプションを選択および選択解除できます。

- レイヤーは表示可能です(眼鏡のアイコン): 層をマップ・キャンバスに表示するかどうかを制御します。

- レイヤーは編集可能です(鉛筆のアイコン): 層を編集可能にする(つまり、現在の編集セッションで編集モードにする)かどうかを制御します。
層の空間データを変更するには、その層が編集可能になっている必要があります。1つのセッションで1つ以上の層を編集可能にできます。層を編集可能にすると、その層の現在の地物が、編集用にマップ領域にロードされます(まだロードされていない場合)。

- 現在編集中のターゲット(的のアイコン): 編集操作が適用される層を識別します。
編集中のターゲットにできるのは0個または1個の層のみであり、層の空間データを変更するには、その層が編集中のターゲットになっている必要がなります。

- このレイヤーにスナップしています(スナップ・アイコン): 層をスナップ層(つまり、地物のジオメトリ・ポイントをデジタル化するときに、頂点のスナップに使用できる層)にするかどうかを制御します。スナップ層では、マウス・ポインタを所定の距離まで既存の頂点に近づけると、ポインタは自動的にその既存の頂点にスナップされます。
複数の層をスナップ層として使用できます。

- このレイヤーで発生した選択(選択アイコン): 層を選択層にするかどうかを制御します。
選択ツールは選択層で使用します。1つの選択層の地物を使用して、別のターゲット層の地物を生成できます。これには、結合、交差、差分などの操作を使用します。1つ以上の層を選択層にできます。層を選択層にすると、その層の現在の地物が、選択用にマップ領域にロードされます(まだロードされていない場合)。

セッション層とデータ層の操作用ツールバーを使用すると、データ層を追加および削除したり、表示されている層を上下に移動したりできます。

8.2.2.3 描画プロパティ

レンダリング・プロパティは、編集可能なデータのレンダリングに影響を与えます。「データ・レイヤー」パネルで編集可能な層の行を選択すると、その層によって使用される現在のスタイルに「描画プロパティ」パネルの内容が反映されます。「色」、「線」および「マーカー」のプロパティを、それぞれ該当するタブに表示して変更できます。

- 「色」の属性は、塗りつぶし色、ストロークの色、および塗りつぶし色の透過性です。

- 「線」の属性は、塗りつぶし色、ストロークの色、線幅、塗りつぶし色の透過性、およびストロークの色の透過性です。

- 「マーカー」の属性は、マーカー・タイプ、塗りつぶし色、ストロークの色、マーカー・サイズ、および塗りつぶし色の透過性です。

8.2.2.4 ラベル付けプロパティ

ラベル付けプロパティは、編集可能なデータのラベル付けに影響を与えます。「データ・レイヤー」パネルで編集可能な層の行を選択すると、その層によって使用される現在のスタイルに「ラベル付けプロパティ」パネルの内容が反映されます。

「ラベル付けプロパティ」の属性は、テキスト・フォント、テキストの色、テキスト・サイズ、イタリックおよび太字です。

8.2.3 マップ・キャンバス領域

ウィンドウの中央にあるマップ・キャンバス領域には、マップが表示されます。設定したプロパティやプリファレンス、選択したツールおよび実行したデータ編集操作は、この領域のコンテンツに反映されます。

マップ・キャンバス領域の最上部にあるツールバーには、次の操作を実行するためのアイコンが含まれています。

- ターゲット層の編集されたデータを保存する

- すべての編集されたデータを保存する

- 前の変更を元に戻す

- 前の操作をやり直す

- ヘルプ(疑問符のアイコン)

- 前のマップを描画する(現在は使用されていません)

- 次のマップを描画する(現在は使用されていません)

- CxおよびCy (マップの中心のX座標とY座標を空間参照システムの単位、つまりSRIDで表したもの。たとえば、WGS 84データの緯度と経度)

- マップ・キャンバス領域内で表される領域のY軸の高さ(SRID単位)またはスケール(メートル単位の測地データ)たとえば、特定のマップ・キャンバスのサイズとズーム・レベルで、WGS 84 (経度/緯度)データに基づく高さの値が5.2657 (緯度)、対応するスケールの値が5,750,861 (メートル)の場合があります。

- マップ・プレビューのリフレッシュ

8.2.3.1 ナビゲーション・パネル

マップ・キャンバス領域のツールバーの左下には、ナビゲーション・パネルがあります(図8-7を参照)。

図8-7 ナビゲーション・パネル

- 円(回転する輪)を使用してマップをパン(回転し、矢印をクリックして表示をその方向に移動)します。

- 四角形を使用して領域を選択(クリック、ドラッグおよびリリース)およびズームします(マーキー・ズームと呼ばれることもあります)。

- プラス記号(+)を使用してズーム・インします。

- マイナス記号(-)を使用してズーム・アウトします。

8.2.3.2 マップ・スケール・バー

スケール・バー層の「スケール・バーの表示」プロパティを有効にすると、マップ・キャンバス領域の右下に、バー内の様々なセグメントによって表される距離をマイル(mi)単位およびキロメートル(km)またはメートル(m)単位で示すマップ・スケール・バーが表示されます。図8-8に例を示します。

図8-8 スケール・バー

スケール・バーに表示される距離には、現在のズーム・レベルが反映されます。

8.2.4 ツール領域

MapViewer Editorウィンドウの右側にあるツール領域には、一連の縮小可能なパネルが含まれており、各パネルには、機能に応じてグループ化された一連のツールが含まれています。アプリケーション・コンテキストに応じて、特定のパネルとツールが有効(表示および使用可能)になります。たとえば、アクティブで編集可能な層がある場合は、選択ツールが有効になります。

ツール・グループを次に示します。

- 地物ツール(地物の属性の選択、選択解除、削除、複製および編集)

- 描画ツール(マップへの形状の描画による新しい地物の作成)

- 頂点ツール(個々の頂点の操作、多角形の分割やボイド関連操作の実行、既存の行の分割)

- グループ化ツール(地物のグループ化およびグループ解除)

- ジオメトリ・ツール(ジオメトリの検証、検査、単純化および周りへのバッファの追加)

- 変換ツール(地物のスケーリング、回転および変換)

8.2.4.1 地物ツール

次のツールに対応するアイコンが表示されます。

- 地物を選択します: 汎用ポインタ・ツールと単一選択ツールの両方として機能します(地物をクリックしたとき)。また、地物を含まない領域をクリックしたときに、現在選択されている地物の選択を解除します。地物を選択すると、その地物のアウトラインがアニメーション化され(地物全体がマップのビューポート内にある場合)、一連のマニピュレータ(小さい四角形)がその周りに表示されます。[Shift]キーを押しながらクリックすると、地物が選択されている場合はその選択を解除し、選択されていない場合は地物を選択済リストに追加できます。
マニピュレータは、地物の移動、スケーリングまたは回転に使用できる一連のマーカーです。地物を移動するには、中心の四角形マークをクリックしたままドラッグします。地物をスケーリングするには、外側に表示されているいずれかの四角形マークをクリックしたままドラッグします。地物を回転するには、円マークをクリックしたままドラッグします。複数の操作を実行した後、地物の外側の任意の場所をクリックすると、変更を効果的に適用できます。または、変換ツールを使用して変更を適用できます。

- 複数の地物を選択します: これを使用すると、マップ上の四角形を選択したままドラッグすることによって、複数の地物を選択できます。四角形との間になんらかの相互作用がある地物が選択されます。[Shift]キーを押しながらドラッグすると、選択されている地物の選択を解除するか、新しい選択内容を既存の選択セットに追加できます。

- 属性値により地物を選択します: 属性値に基づいて地物を選択できます。「属性による地物選択」ダイアログ・ボックスが表示され、そこで層のベース表、属性列、および選択に使用する属性値を指定したり、結果を既存の選択内容(存在する場合)に追加するか、既存の選択内容を結果で置換するかを指定したりできます。

- 地物の選択を解除します: 現在選択されている地物の選択を解除します。

- 選択された地物を削除します: 現在選択されている地物を削除します。

- 選択された地物を複製します: 選択された地物を複製します。

- 地物属性を編集します: 選択された地物の属性を編集します。

8.2.4.2 描画ツール

描画ツールをアクティブにするには、層を編集可能にするためのチェック・ボックスおよびターゲット層にするためのチェック・ボックスを選択します。新しいジオメトリを別の新しい地物にする場合は、これらのツールのいずれかを使用して新しい地物を作成するときに、まず選択されているすべての地物の選択を解除します。地物が選択されているときに地物作成ツールを使用した場合、デフォルトでは、選択されている地物に新しいジオメトリが追加されます。

次のツールに対応するアイコンが表示されます。

- ポイントを描画します: 新しいポイント地物を作成します。マップをクリックすると、新しいポイントがマップ上に作成され、表示されたポップアップに、必要なキー列の値、およびデータを移入する可能性があるその他の属性列を入力できます。順序名が割り当てられている場合(層プロパティのパネル内で変更できます)、新しい地物のキー値が自動的に移入されます。

- 線を描画します: 新しい行文字列地物(1つ以上の線形セグメント)を作成します。マウスの左ボタンを使用してポイントをデジタル化し、右ボタンを使用して行文字列を終了します。

- 多角形を描画します: 線形セグメントを使用して新しい多角形地物を作成します。マウスの左ボタンを使用してポイントをデジタル化し、右ボタンを使用して多角形を終了します。最後のポイントは、自動的に1つ目のポイントにリンクされます。多角形に穴(ボイド)を追加するには、グループ化ツールの対応するツールを使用します。

- 四角形を描画します: 新しい四角形地物を作成します。クリックしたまま対角までドラッグしてリリースすると、最適な四角形が生成されます。

- 円または楕円を描画します: 新しい円または楕円地物を作成します。クリックしたままドラッグしてリリースすると、円または楕円が生成されます。

8.2.4.3 頂点ツール

頂点ツールを使用すると、個々の頂点を操作できます。頂点ツールをアクティブにするには、層を編集可能にするためのチェック・ボックスおよびターゲット層にするためのチェック・ボックスを選択します。

次のツールに対応するアイコンが表示されます。

- 行文字列に頂点ポイントを追加します: 新しい頂点を既存の行セグメントに追加します。ターゲット行セグメントにポインタを近づけると、ポインタは自動的にセグメント上にスナップされます。スナップされ、ハイライトされた円が、頂点の追加先として有効な場所です。その後、クリックすると新しい頂点が追加されます。

- 行文字列から頂点ポイントを削除します: 既存の頂点を削除します。マウスを頂点に移動して(頂点がハイライトされます)クリックすると、その頂点が削除されます。クリックとドラッグにより、そのドラッグ領域内に含まれる複数の頂点を削除することもできます。

- 頂点を選択して移動します: 既存の頂点を移動します。マウスを頂点に移動し(スナップにより、頂点がハイライトされます)、その頂点をクリックしたまま新しい位置にドラッグします。

- ボイドのある多角形を追加します: 既存の多角形内に新しいボイドを作成します。多角形地物を選択し、その多角形地物内で、新しいボイド多角形をデジタル化します。マウスの左ボタンを使用してポイントをデジタル化し、右ボタンを使用して多角形を終了します。最後のポイントは、自動的に1つ目のポイントにリンクされます。

- 多角形からボイドを削除します: 多角形から既存のボイドを削除します。ボイドを削除するには、選択した地物のボイド境界内で任意の場所をクリックするか、ボイド多角形を囲む四角形をクリックしたままドラッグします。

- 行を分割します: 既存の地物の行文字列(単純な行)を2行に分割し、新しい地物を生成します。マウスを行に移動して(スナップにより、分割ポイントがハイライトされます)クリックすると、その場所で行が分割されます。表示されたダイアログ・ボックスで、新しい地物にする部分を選択したり、新しい地物の属性を定義したりします。

- 多角形を分割します: 多角形地物を2つの地物に分割します。マウスを多角形の境界に移動して(分割ポイントがハイライトされます)クリックすると、分割ポイントが作成されます(青色になります)。その後、分割線の次のポイントをクリックし、最後に分割線の終点となる、別の境界の分割ポイントをクリックします(スナップにより、境界ポイントがハイライトされます)。多角形内のボイド要素が分割線の経路に含まれている状態で、ボイドの境界に分割ポイントを作成した場合、分割線の次のポイントは、同じボイド要素の境界に位置している必要があります。分割を終了したら、表示されたダイアログ・ボックスで、新しい地物にする部分を選択したり、新しい地物の属性を定義したりします。

8.2.4.4 グループ化ツール

グループ化ツールを使用すると、複数の地物と要素に対する操作を実行できます。一部のツールでは、ターゲット層が選択層と異なる場合があります。グループ化ツールでは、結合、差分、交差などのOracle Spatial and Graph操作を使用します。

次のツールに対応するアイコンが表示されます。

- グループ地物: 地物をグループ化します。1つ以上の地物を選択し、このボタンをクリックすると、選択された地物が新しい地物としてグループ化されます。(結合操作が実行されます。)

- 地物要素のグループを解除します: (現在は使用されていません。)

- 地物要素を削除します: 1つ以上の地物要素を地物内から削除します。複数の要素を指定するには、四角形をドラッグしてそれらを囲み、リリースします。

- 地物の結合から地物を生成します: 選択された地物の結合に基づいて、新しい地物を生成するか、既存の地物(ターゲット層内)を更新します。選択済地物リストには、現在のターゲット層以外の層の地物が含まれている必要があります。
たとえば、層Aが現在のターゲット層であるときに、層Bの地物の結合によって新しい地物を生成するとします。

1. 左側にある「データ・レイヤー」パネルの選択層を層Bに変更します。

2. 層Bの1つ以上の地物を選択します。

3. 「地物の結合から地物を生成します」アイコンをクリックして、選択された層Bの地物間の結合操作を実行します。選択された地物が層Aにも含まれている場合は、この地物も結合操作に使用され、ターゲット地物のジオメトリが更新されます。

- 地物の交差から地物を生成します: 選択された地物の交差に基づいて、新しい地物を生成するか、既存の地物(ターゲット層内)を更新します。選択済地物リストには、現在のターゲット層以外の層の地物が含まれている必要があります。
たとえば、層Aが現在のターゲット層であるときに、層Bの地物の交差によって新しい地物を生成するとします。

1. 左側にある「データ・レイヤー」パネルの選択層を層Bに変更します。

2. 層Bの1つ以上の地物を選択します。

3. 「地物の交差から地物を生成します」アイコンをクリックして、選択された層Bの地物間の交差操作を実行します。選択した地物が層Aにも含まれている場合は、この地物も交差操作に使用され、ターゲット地物のジオメトリが更新されます。

- 地物の差分から地物を生成します: 選択された地物の差分に基づいて、新しい地物を生成するか、既存の地物(ターゲット層内)を更新します。選択済地物リストには、現在のターゲット層以外の層の地物が含まれている必要があります。
たとえば、層Aが現在のターゲット層であるときに、層Bの地物の差分によって新しい地物を生成するとします。

1. 左側にある「データ・レイヤー」パネルの選択層を層Bに変更します。

2. 層Bの1つ以上の地物を選択します。

3. 「地物の差分から地物を生成します」アイコンをクリックして、選択された層Bの地物間の差分操作を実行します。選択された地物が層Aにも含まれている場合は、この地物も差分操作に使用され、ターゲット地物のジオメトリが更新されます。

- ターゲット・レイヤー・ジオメトリを地物の結合で更新します: ターゲット層の地物を、異なる選択層から選択された地物の結合によって更新します。
たとえば、2つの層があり、1つが州用、1つが郡用で、それぞれに独自のジオメトリが含まれているとします。それぞれの郡地物には、その郡が属する州を定義する属性があります。郡地物を変更した後、関連する州のジオメトリを、郡の変更の結合によって更新できます。その結果、両方のジオメトリ層で、必要な境界の調整がすべて行われます。手順の例を次に示します。

1. Counties層をターゲット層および選択層にし、State Aのすべての郡を選択します。

2. 選択したこれらの地物を変更します(すべての地物のスケーリングなど)。

3. State層をターゲット層にし、「ターゲット・レイヤー・ジオメトリを地物の結合で更新します」アイコンをクリックします。2つの層間のリンク属性を定義するためのダイアログ・ボックスが表示され、そこでターゲット層、ターゲット・キー属性列、選択層および選択結合属性列を指定します。
「OK」をクリックすると、ターゲット層Stateのジオメトリが、選択した地物の結合により、選択結合属性に基づいて更新されます。

8.2.4.5 ジオメトリ・ツール

ジオメトリ・ツールを使用すると、ジオメトリ・オブジェクトに対するOracle Spatial and Graph操作を実行できます。

次のツールに対応するアイコンが表示されます。

- 選択されたジオメトリを検証します: 選択された地物のジオメトリを検証します。無効なジオメトリが検出された場合、無効であることを示すOracle Spatial and Graphコードがダイアログ・ボックスに表示されます(ジオメトリの検証コードとエラー・コードの詳細は、Oracle Spatial and Graph開発者ガイドのSDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションに関するリファレンス資料を参照してください。)
ダイアログ・ボックスで表の行を選択すると、エラーに関連するジオメトリ・セグメントのセクションがハイライトされます。提供されているMapViewer Editorツールを使用して、いずれかのエラーを修正できる場合があります。

- ジオメトリ要素を表示します: 選択された地物のジオメトリ要素を示すダイアログ・ボックスを表示します。ジオメトリ・ノードをクリックすると、いずれかの要素の境界がハイライトされます。このダイアログ・ボックスではジオメトリ情報を編集できません。

- 選択されたジオメトリを単純化します: 選択されたジオメトリを単純化します。多角形地物の場合、まず隣接するジオメトリ間に単一の輪郭を生成するための内部トポロジを構築します。選択したジオメトリの数によっては、この手順におけるトポロジの構築に時間がかかる場合があります。その後、2つのアルゴリズム・オプションを含むダイアログ・ボックスが表示され、すべての輪郭を単純化するか、輪郭のサブセットを選択して単純化できます。特定の輪郭を選択するときに、[Shift]キーを使用して、前に選択した輪郭の選択を解除することもできます。使用可能なオプションは、Douglas-PeuckerアルゴリズムまたはVisvalingham-Whyattアルゴリズムのいずれを選択するかによって異なります。
Douglas-Peuckerの場合(Oracle Spatial and Graph開発者ガイドで説明されているSDO_UTIL.SIMPLIFYファンクションを使用):

- しきい値: 考慮する頂点間の最小距離。測地データの場合、この値はメートル単位です。それ以外の場合は、データ単位です。バーを使用して、削除するポイントの範囲を定義します。(ただし、必ずしもアルゴリズムによって、この量のデータが正確に削除されるわけではありません。)

- 単純化: 選択されたジオメトリを単純化します。

- リセット: 前回の単純化操作を取り消します。

- o %ポイント: 単純化後に保持される元の頂点の割合。

Visvalingham-Whyattの場合(Oracle Spatial and Graph開発者ガイドで説明されているSDO_UTIL.SIMPLIFYVWファンクションを使用):

- 削除するポイントの割合(o %): バーを使用して、削除するポイントの範囲を定義します。(ただし、必ずしもアルゴリズムによって、この量のデータが正確に削除されるわけではありません。)

- 高い三角形: 偏平度フィルタの適用時に、高い三角形を許可します。

- o %ポイント: 単純化後に保持される元の頂点の割合。

- 選択された地物からバッファ地物を生成します: 選択された地物の周りにバッファ地物を生成します。バッファを生成するには、距離値を入力します。測地データの場合は、値をメートル単位で入力します。それ以外の場合は、値をデータ単位で入力します。

8.2.4.6 変換ツール

次の変換ツールに対応するアイコンが提供されます。

- 選択されたジオメトリを回転します: 選択された地物のジオメトリを、指定された値の角度だけ回転します。

- Xの選択されたジオメトリをスケーリングします: 選択された地物のジオメトリを、指定されたX方向の係数を使用してスケーリングします。

- Yの選択されたジオメトリをスケーリングします: 選択された地物のジオメトリを、指定されたY方向の係数を使用してスケーリングします。

- Xの選択されたジオメトリを変換します: 選択されたジオメトリを、データ単位で指定されたX方向の値を使用して変換します。

- Yの選択されたジオメトリを変換します: 選択されたジオメトリを、データ単位で指定されたY方向の値を使用して変換します。

- ターゲット・レイヤーの選択された地物に変換を適用します: 現在の変換を、ターゲット層の選択された地物にのみ適用します。

- 選択されたすべての地物に変換を適用します: 現在の変換を、選択されたすべての地物に適用します。

- 変換をリセットします: 現在の変換をクリアします。

A スタイル、テーマ、ベース・マップおよびマップ・タイル層のためのXML形式

この付録では、MapViewerメタデータ・ビュー(2.9項を参照)を使用してスタイル、テーマおよびベース・マップを定義するためのXML形式について説明します。

MapViewerスタイルに関するメタデータ・ビュー(USER_SDO_STYLESおよび関連ビュー)には、DEFINITION列が含まれます。各スタイルについて、DEFINITION列にレンダリング・エンジンに対してスタイルを定義するXML文書が格納されます。

各スタイルは、SVG (Scalable Vector Graphics)に類似した構文を使用して定義されます。MapViewer構文では、各スタイルのXML文書に単一の<g>要素が含まれる必要があり、この要素には、スタイルのタイプまたはクラスを示すclass属性が含まれる必要があります。たとえば、次の例では、塗りの色のコンポーネントによって色スタイルを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc> red </desc>
<g class="color" style="fill:#ff1100"/>
</svg>

MapViewer XMLパーサーでは、スタイル定義内の<g>要素のみが検索されます。<desc>要素などの他の属性は単なる情報であり、無視されます。

スケーラブルなスタイル:
デフォルト以外のピクセル値(px)を指定することにより、スタイルのサイズを自由に変えることができます。たとえば、width:15.0kmまたはstroke-width:10.0mと指定します。スケーラブルなスタイルの使用の詳細は、2.2.1項を参照してください。

MapViewerテーマに関するメタデータ・ビュー(USER_SDO_THEMESおよび関連ビュー)には、STYLING_RULES列が含まれます。これらのビューのテーマごとに、テーマのスタイリング・ルールを定義したXML文書(CLOB値)がSTYLING_RULES列に格納されます。

MapViewerベース・マップに関するメタデータ・ビュー(USER_SDO_MAPSおよび関連ビュー)には、DEFINITION列が含まれます。これらのビューでは各ベース・マップについて、DEFINITION列にそのベース・マップを定義したXML文書(CLOB値)が格納されます。

次の各項では、各タイプのマッピング・メタデータのXML構文について説明します。

- A.1項「色スタイル」

- A.2項「マーカー・スタイル」

- A.3項「線スタイル」

- A.4項「領域スタイル」

- A.5項「テキスト・スタイル」

- A.6項「拡張スタイル」

- A.7項「テーマ: スタイリング・ルール」

- A.8項「ベース・マップ」

- A.9項「マップ・タイル層」

A.1 色スタイル

色スタイルには、塗りの色、ストロークの色またはその両方が含まれます。形状またはジオメトリに適用された場合、塗りの色(存在する場合)は形状の内側の塗りに使用され、ストロークの色(存在する場合)は形状の境界の描画に使用されます。どちらの色でも、その色の透明度を制御するアルファ値を使用できます。

色スタイルでは、<g>要素のclass属性を"color"に設定する必要があります。<g>要素には、色コンポーネントおよびそのオプションのアルファ値を指定したstyle属性を含める必要があります。次に例を示します。

- <g class="color" style="fill:#ff0000">: 塗りの色(RGB値は#ff0000)のみの色スタイルが指定されます。

- <g class="color" style="fill:#ff0000;stroke:blue">: 塗りの色およびストロークの色(青)の色スタイルが指定されます。

色の値は、16進文字列(#00ff00など)、またはblack、blue、cyan、darkGray、gray、green、lightGray、magenta、orange、pink、red、white、yellowの色名のいずれかを使用して指定できます。

色スタイルの透明度を指定するには、fill-opacityおよびstroke-opacityの値を0(ゼロ、完全な透明)から255(不透明)の範囲内で指定できます。次の例では、半透明の塗りコンポーネントを指定しています。

<g class="color" style="fill:#ff00ff;fill-opacity:128">

次の例では、ストロークおよび塗りの不透明度を指定しています。

<g class="color" style= "stroke:red;stroke-opacity:70;
fill:#ff00aa;fill-opacity:129">

style属性の構文は、1つ以上のname:valueのペアをセミコロンで区切った文字列です。(この基本構文は、他のタイプのスタイルでも使用されます。)

ストローク色については、ストロークの幅を定義できます。形状の境界を描画するときのデフォルトのストローク幅は、1ピクセルです。デフォルトを変更するには、stroke-width:valueペアをstyle属性文字列に追加します。次の例では、ストローク幅を3ピクセルに指定しています。

<g class="color" style="stroke:red;stroke-width:3">

A.2 マーカー・スタイル

マーカー・スタイルは、ポイント地物、または領域地物および線形地物のラベル・ポイントに配置されるマーカーを表します。マーカーは、ベクトル・マーカーまたはラスター画像マーカーのいずれかになります。また、マーカーにはオプションの注釈テキストを含めることができます。ベクトル・マーカーの場合、ベクトル要素の座標はXML文書で定義される必要があります。ラスター画像に基づくマーカーの場合、スタイルに関するXML文書は、スタイルが外部画像に基づいていることを示します。

マーカーのXML文書では、優先表示サイズが指定されます。優先される幅および高さは、<g>要素のstyle属性において、width:value;height:valueのペアによって定義されます。class属性は"marker"に設定する必要があります。マーカーによっては、注釈テキストを重ねる必要があります。たとえば、米国州間高速道路の盾マーカーをレンダリングする場合、その上にルート番号も表示する必要があります。こうした注釈テキストのスタイルは、font-family:value、font-style:value、font-size:valueおよびfont-weight:valueの名前と値のペアのうち1つ以上を含むスタイル属性です。

次の例では、マーカーの上に描画できるラベル・テキストのフォント属性(太字で表示)を指定する画像ベースのマーカーを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
<g class="marker"
style="width:20;height:18;font-family:sans-serif;font-size:9pt;fill:#ffffff">
<image x="0" y="0" width="9999" height="9999" type="gif"
href="dummy.gif"/>
</g>
</svg>

この例では、ラベル・テキスト付きのポイント地物にマーカーが適用されると、指定したフォント・ファミリおよびサイズを使用し、テキストのフォアグラウンドが指定した塗りの色(この場合は白)であるラベル・テキストが、マーカーの上に中央を中心として描画されます。この例で指定したテキスト属性を持つラベル・テキスト(495)をA.2.4項の図A-1に示します。

A.2.1 ベクター・マーカー・スタイル

ベクター・マーカーには、単一ポリゴン、最適化された矩形(2つのポイントを使用して定義)、単一ポリラインまたは円を使用できますが、これらの組合せは使用できません。各タイプのベクター・マーカーにおいて、<g>要素には、ジオメトリ情報(ポリゴン、最適化された矩形またはポリラインの座標、あるいは円の半径)を指定した対応するサブ要素が含まれている必要があります。

- ポリゴン定義では、カンマ区切りの座標リストを指定したpoints属性を含む<polygon>要素が使用されます。次に例を示します。

<g class="marker">
<polygon points="100,20,40,50,60,80,100,20"/>
</g>

- 最適化された矩形の定義では、カンマ区切りの座標リストを指定したpoints属性を含む<rect>要素が使用されます。次に例を示します。

<g class="marker">
<rect points="0,0, 120,120"/>
</g>

- ポリライン定義では、カンマ区切りの座標リストを指定したpoints属性を含む<polyline>要素が使用されます。次に例を示します。

<g class="marker">
<polyline points="100,20,40,50,60,80"/>
</g>

- 円の定義では、円の半径を指定したr属性を含む<circle>要素が使用されます。次に例を示します。

<g class="marker">
<circle r="50"/>
</g>

ベクトルベースのマーカーには、ストローク、塗りの色またはその両方を指定できます。構文は、色スタイルのスタイル属性と同じです。次の例では、枠線が黒であり、半透明の黄色で塗りつぶされた三角マーカーを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="marker"  style="stroke:#000000;fill:#ffff00;fill-opacity:128">
<polygon points="201.0,200.0, 0.0,200.0, 101.0,0.0"/>
</g>
</svg>

マーカーがスケーラブルな場合は、max_size_in_px属性を使用して、マーカーの最大サイズをピクセル単位でマップに設定できます。この属性を適切な値に設定すると、ユーザーがズームインしてマップの詳細を表示するときに、マーカーが他のマップ機能を遮るほど大きくなるのを防ぐことができます。次の例では、マーカーの最大サイズを64ピクセルに設定します。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="marker" max_size_in_px="64" style="stroke:#0000BB;fill:#0033FF;width:3.0mile;height:3.0mile;font-family:Dialog;font-size:12;font-fill:#FF0000">
<polygon points="0.0,0.0,0.0,100.0,100.0,100.0,100.0,0.0,0.0,0.0"/>
</g>
</svg>

A.2.2 画像マーカー・スタイル

画像マーカーのXML文書には、マーカーを画像に基づくものとして識別する<image>要素が含まれます。画像はGIF形式である必要があり、スタイル・メタデータ・ビューのIMAGE列に格納されます。

次の例は、画像マーカーに関するXML文書です。

<?xml version="1.0" standalone="yes"?>
<svg>
<g class="marker"
style="width:20;height:18;font-family:sansserif;font-size:9pt">
<image x="0" y="0" width="9999" height="9999" type="gif" href="dummy.gif"/>
</g>
</svg>

この例では、<image>要素を空にしたまま(つまり、<image/>として)有効な定義を作成し、画像を後で指定することもできます。

A.2.3 TrueTypeフォントベースのマーカー・スタイル

TrueTypeフォントベースのマーカーの場合、そのマーカー記号はTrueTypeフォント・ファイルに格納されます。このファイルのファイル拡張子は.ttfで、通常、個々の記号や絵文字が多数含まれています。多くのGISソフトウェア・パッケージには、マッピングに便利な記号が含まれるTrueTypeフォント・ファイルが付属しています。

TrueTypeフォント・ファイル内の記号をMapViewerで使用できるようになるには、次の処理を実行する必要があります。

1. TrueTypeフォント・ファイルをデータベースにインポートします。その際には、Map Builderツール(第7章を参照)を使用するのが望ましい方法です。このツールを使用してインポートすることで、該当するフォント・ファイル内の記号が、システム・ビューUSER_SDO_STYLESの中の単一の行に挿入されます。この新しい行内で、TYPE列には文字列TTF、IMAGE列にはTrueTypeフォント・ファイルの内容が格納されます。インポート操作が終わると、Map Builderツールを使用して、TrueTypeフォント・ファイルに含まれているすべての絵文字や記号を表示できるようになります。また、このフォント・ファイルは、この段階で物理的にデータベースに格納されているので、すべてのMapViewerユーザーで共有することもできます。

2. インポートしたTrueTypeフォントの中の絵文字または記号に基づいて、MapViewerマーカー・スタイルを作成します(Map Builderツールを使用するのが望ましい)。

次の例は、TrueTypeフォントベースのマーカーの使用例(TrueTypeに固有なマテリアルは太字で示している)を示しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="marker"  style="fill:#ff0000;width:25;height:25">
<ttfSymbol fontName="ERS_INCIDENTS" charCode="118" />
</g>
</svg>

A.2.4 線上でのマーカー・スタイルの使用方法

通常、マーカー・スタイルはポイント地物に適用します。その場合、マーカー・スタイルは地物を示すポイント位置にレンダリングされます。ただし、高速道路などの線(線文字列)地物では、ルート番号などの地物についての情報を示すために線に沿った地点にマーカーを配置する必要があります。たとえばアメリカ合衆国の地図では、図A-1のルート495のように、記号の中にルート番号が書かれた盾記号を高速道路の上に配置することがよくあります。

図A-1 高速道路の盾記号マーカー

図A-1のような結果を得るには、次のようにします。

1. マーカー・スタイルを選択し、A.2項の例のように、テキスト・スタイル定義(フォント・ファミリ、フォント・サイズ、塗りの色など)を追加します。

2. テーマのスタイリング・ルールで、マーカー・スタイルをラベリング・スタイルとして指定します。高速道路を表示するテーマのスタイリング・ルールを指定したXML文書の例を次に示します。マーカー・スタイル(例では太字で表示)が指定されています。ラベル・テキスト(図A-1の495)は、ラベル列の値です。この例では、ラベル列はLABELという名前です。

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="political">
<rule>
<features style="L.PH"> (name_class = 'I' and TOLL=0) </features>
<label column="label" style="M.SHIELD1">1</label>
</rule>
<styling_rules>

MapViewerは、マーカー・スタイル(この例では盾)の配置について、線上の最適な位置を自動的に決定します。

A.3 線スタイル

線スタイルは、道路、鉄道路線または政治的境界などの線形地物にのみ適用可能です。つまり、線スタイルは、SDO_GTYPE値の末尾が2(線)または6(マルチライン)であるOracle Spatial and Graphジオメトリにのみ適用できます。(SDO_GEOMETRYオブジェクト・タイプおよびSDO_GTYPE値の詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。)

MapViewerによって線形地物が描画される場合、線スタイルにより、使用する色、破線パターンおよびストローク幅がレンダリング・エンジンに対して指定されます。線スタイルには基本線要素を使用でき、これが定義されている場合、元の線形ジオメトリと一致します。また、基本線に平行な2本の輪郭を定義できます。平行線要素では、独自の色、破線パターンおよびストローク幅を指定できます。平行線を使用する場合、基本線の両側に、等しいオフセットで配置される必要があります。

鉄道のような線を描画するには、線スタイルで、hashmarkと呼ばれる3つ目のタイプの線要素を定義する必要があります。クラスhashmarkの<line>要素では、dash配列内の1つ目の値が2つのハッシュ・マーク間の間隔を示し、2つ目の値が両側の線までのハッシュ・マークの長さを示します。次の例では、間隔が8.5画面単位、基本線の各側の長さが3画面単位であるハッシュ・マーク線を定義しています。

<line class="hashmark" style="fill:#003333"  dash="8.5,3.0"/>

次の例では、完全な線スタイルを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="line" style="fill:#ffff00;stroke-width:5">
<line class="parallel" style="fill:#ff0000;stroke-width:1.0"/>
<line class="base" style="fill:black;stroke-width:1.0" dash="10.0,4.0"/>
</g>
</svg>

この例では、class="line"により、スタイルが線スタイルとして識別されます。全体的な塗りの色(#ffff00)は、平行線と基本線間の領域の塗りつぶしに使用されます。このスタイルで使用できる最大幅(平行線の幅を含む)は、全体的な線の幅(5ピクセル)で制限されます。

この例の線スタイルには、基本線要素と平行線要素の両方が含まれます。平行線要素(class="parallel")は、色と幅を定義する1つ目の<line>要素によって定義されています。(この定義では破線パターンが指定されていないため、平行線または輪郭が実線となります。)基本線要素(class="base")は、色、幅および破線パターンを定義する2つ目の<line>要素によって定義されています。

線スタイルには、マーカー(方向マーカーなど)を定義できます。marker-nameパラメータはマーカー・スタイルの名前を指定し、marker-positionパラメータはマーカーを配置する開始点からの線に沿った距離の比率(0から1)を指定し、marker-sizeパラメータはマーカー・サイズのディスプレイ単位を数値で指定します。マーカーの向きは、マーカーを配置する線セグメントの向きに従います。

次の例では、方向マーカーを持つ線スタイルを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="line" style="fill:#33a9ff;stroke-width:4;
marker-name:M.IMAGE105_BW;marker-position:0.15;marker-size=8">
<line class="parallel" style="fill:red;stroke-width:1.0"/>
</g>
</svg>

複数のマーカーを取得するには、スタイル定義にmultiple-marker属性を追加します。この場合、marker-positionによって最初のマーカーの位置と各マーカー間の間隔が定義されます。次の例では、0.15の位置から開始して0.15ずつの間隔で繰り返し表示される方向マーカーを持つ線スタイルを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="line" style="fill:#33a9ff;stroke-width:4;
marker-name:M.IMAGE105_BW; marker-position:0.15;
marker-size=8; multiple-marker=true">
<line class="parallel" style="fill:red;stroke-width:1.0"/>
</g>
</svg>

A.4 領域スタイル

領域スタイルは、領域地物の塗りつぶしに使用されるパターンを定義します。現行リリースでは、領域スタイルは画像ベースである必要があります。つまり、領域スタイルをジオメトリに適用する場合、ジオメトリが完全に塗りつぶされるまで、スタイルを定義する画像が繰り返し表示されます。

領域スタイルの定義は、画像マーカー・スタイルの定義(A.2.2項を参照)に似ています。

次の例では、領域スタイルを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="area"  style="stroke:#000000">
<image/>
</g>
</svg>

この例では、class="area"により、スタイルが領域スタイルとして識別されます。ストロークの色(style="stroke:#000000")は、ジオメトリの境界を描画する際に使用される色です。ストロークの色が定義されていない場合、ジオメトリの境界は表示されませんが、内側はパターン画像で塗りつぶされます。

領域スタイルには、境界として使用する線スタイルも指定できます。次の領域スタイル定義では、line-styleキーワード(例では太字で表示)を使用して、地物の境界に使用される線スタイルを指定しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="area" style="line-style:L.DPH">
<image x="0" y="0" width="9999" height="9999" type="gif" href="dummy.gif"/>
</g>
</svg>

画像マーカー・スタイルと同様に、領域スタイルの画像は、独立した列に格納される必要があります(2.9.1項で説明するUSER_SDO_STYLESおよびALL_SDO_STYLESメタデータ・ビューのIMAGE列で識別されます)。

A.5 テキスト・スタイル

テキスト・スタイルは、空間地物のラベル付けに使用されるフォントおよび色を定義します。class属性には、"text"という値が含まれる必要があります。フォントには、スタイル(標準、イタリックなど)、フォント・ファミリ、サイズおよび太さを指定できます。フォアグラウンド・カラーを指定するには、fill属性を使用します。

次の例では、テキスト・スタイルを定義しています。

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<g class="text" style="font-style:plain; font-family:Dialog; font-size:14pt;
font-weight:bold; fill:#0000ff">
Hello World!
</g>
</svg>

この例では、Map Builderツールなどのスタイル作成ツールでスタイルをプレビューする場合のみ、「Hello World!」というテキストが表示されます。このスタイルをマップに適用した場合、MapViewerがテーマから取得する実際のテキスト・ラベルが常に提供されます。

テキスト・スタイルでは、地物の数が多いマップでラベルが読みやすくなるように、レンダリングされたテキストの周りに、白く浮き出たバックグラウンドを表示できます。図A-2は、文字の周りが白いバックグラウンドで囲まれたラベルVallejoを示しています。

図A-2 白いバックグラウンドを持つテキスト・スタイル

図A-2のような結果を得るには、テキスト・スタイル定義の<g>要素でfloat-width属性を指定する必要があります。次の例ではfloat-width属性(例では太字で表示)を使用して、各文字の境界に幅が3.5ピクセルの白いバックグラウンドを指定しています。(スタイルがラベルの表示に適用されると、Hello World!というテキストは無視されます。)

<?xml version="1.0" standalone="yes"?>
<svg width="1in" height="1in">
<desc></desc>
<g class="text"  float-width="3.5"
style="font-style:plain; font-family:Dialog; font-size:12pt; font-weight:bold;
fill:#000000">
Hello World!
</g>
</svg>

A.6 拡張スタイル

拡張スタイルは、単純なスタイルから作成される構造化スタイルです。拡張スタイルは、主にテーマ・マッピングに使用されます。コア拡張スタイルはバケット・スタイル(BucketStyle)であり、拡張スタイルはすべて一種のバケット・スタイルです。バケット・スタイルは、基本スタイルのセットとバケットのセット間の1対1マッピングです。各バケットには、表示される地物の1つ以上の属性値が含まれます。各地物のいずれかの属性によってその地物が分類される、つまり含まれるバケットが決定し、そのバケットに割り当てられたスタイルが地物に適用されます。

さらに、カラー・スキーム(A.6.2項を参照)および可変(目盛り付き)マーカー(A.6.3項を参照)という2種類の特殊なバケット・スタイルが提供されています。

その他の拡張スタイルとしては、ドット密度(A.6.4項を参照)、棒グラフ(A.6.5項を参照)、コレクション(A.6.6項を参照)および可変円グラフ(A.6.7項)があります。

A.6.1 バケット・スタイル

バケット・スタイルは、バケットのセットを定義し、各バケットに1つの基本スタイルを割り当てます。バケットの内容は、次のいずれかになります。

- 離散値のコレクション(ハリケーンのリスク・コードが1または2の郡すべてのバケット、ハリケーンのリスク・コードが3の郡すべてのバケットなど)。

- 連続した範囲の値(平均世帯収入が30,000ドル未満の郡すべてのバケット、平均世帯収入が30,000から39,999ドルの郡すべてのバケットなど)。この場合、一連のバケットの範囲は、個別に定義するか(それぞれ上限値および下限値により定義)、マスター範囲において均等に分割できます。

次の抜粋したコードは、バケット・スタイルの基本書式を示しています。

<?xml version="1.0" ?>
<AdvancedStyle>
<BucketStyle>
<Buckets>
. . .
</Buckets>
</BucketStyle>
</AdvancedStyle>

他の(基本)スタイルとは対照的に、拡張スタイルには、<AdvancedStyle>タグで識別されるルート要素が常に含まれます。

バケット・スタイルでは、<BucketStyle>要素は、<AdvancedStyle>要素の唯一の子です。各<BucketStyle>要素には1つ以上の<Buckets>子要素があり、子要素の内容はバケットのタイプによって異なります。

A.6.1.1 離散値を含むコレクションベース・バケット

バケット・スタイルの各バケットに離散値のコレクションが含まれる場合、各バケットを表すには<CollectionBucket>要素を使用します。各バケットには、1つ以上の値が含まれます。各バケットの値は<CollectionBucket>要素の内容としてリストされ、複数の値がカンマで区切られます。次の例では、3つのバケットを定義しています。

<?xml version="1.0" ?>
<AdvancedStyle>
<BucketStyle>
<Buckets>
<CollectionBucket  seq="0" label="commercial"
style="10015">commercial</CollectionBucket>
<CollectionBucket  seq="1" label="residential"
style="10031">residential, rural</CollectionBucket>
<CollectionBucket  seq="2" label="industrial"
style="10045">industrial, mining, agriculture</CollectionBucket>
</Buckets>
</BucketStyle>
</AdvancedStyle>

この例の内容は、次のとおりです。

- 各バケットの値は1つ以上の文字列ですが、値には数値も使用できます。

- 各バケットに関連付けられたスタイルの名前が指定されています。

- 各<CollectionBucket>要素のラベル属性(commercial、residentialまたはindustrial)は、拡張スタイル用にコンパイルされたラベルでのみ使用されます。

- 各<CollectionBucket>要素の順序は重要です。ただし、seq(順序)属性の値は参照のみを目的としているため、MapViewerでは、定義内の要素の順序によってのみ順序が決定されます。

この例にはありませんが、他のすべての値(他に値が考えられる場合)に対してバケットが必要な場合は、属性値として#DEFAULT#を含む<CollectionBucket>要素を作成できます。これは、他のすべての<CollectionBucket>要素の後に配置し、このバケットのスタイルが最後にレンダリングされるようにする必要があります。

離散値を含むコレクションベース・バケットにラベル・スタイルを適用するには、2.2.2項を参照してください。

A.6.1.2 個々の範囲ベース・バケット

バケット・スタイルの各バケットに、2つの値で定義された値範囲が含まれる場合、各バケットを表すには<RangedBucket>要素を使用します。各バケットには、値の範囲が含まれます。次の例では、4つのバケットを定義しています。

<?xml version="1.0" ?>
<AdvancedStyle>
<BucketStyle>
<Buckets>
<RangedBucket high="10" style="10015"/>
<RangedBucket low="10" high="40" style="10024"/>
<RangedBucket low="40" high="50" style="10025"/>
<RangedBucket low="50" style="10029"/>
</Buckets>
</BucketStyle>
</AdvancedStyle>

個々の範囲ベースのバケットでは、下限値は含まれますが上限値は含まれません(ただし、他の範囲の値より大きい値が含まれる範囲では、上限値は含まれます)。いずれの範囲にも、他の範囲の値と重複する値の範囲を含めることはできません。

たとえば、この例の2つ目のバケット(low="10" high="40")には、10ちょうどの値から40未満の値(39や39.99など)までが含まれます。40ちょうどの値は3つ目のバケットに含まれます。

<CollectionBucket>要素と同様に、各<RangedBucket>要素に関連付けられたスタイルは、属性として指定されます。

個々の範囲ベース・バケットにラベル・スタイルを適用するには、2.2.2項を参照してください。

A.6.1.3 均等範囲バケット

バケット・スタイルに、マスター範囲の均等に分割された範囲を含む一連のバケットが含まれる場合、<RangedBucket>要素を省略して、かわりに<Buckets>要素で範囲全体のマスター上限値と下限値、範囲を分割するバケット数、およびスタイル名(各バケットにつき1つ)のリストを指定できます。次の例では、0から29の均等範囲の5つのバケット(nbuckets=5)を定義しています。

<?xml version="1.0" ?>
<AdvancedStyle>
<BucketStyle>
<Buckets low="0" high="29" nbuckets="5"
styles="10015,10017,10019,10021,10023"/>
</BucketStyle>
</AdvancedStyle>

この例の内容は、次のとおりです。

- すべての値が整数の場合、5つのバケットには、0から5、6から11、12から17、18から23および24から29の各範囲の値が保持されます。

- 1つ目のバケットはスタイル10015、2つ目のバケットはスタイル10017、などのように関連付けられています。

指定されたスタイル名の数は、nbuckets属性の値と同じである必要があります。バケットは昇順で配置され、スタイルは指定された順序どおりに各バケットに割り当てられます。

A.6.2 カラー・スキーム・スタイル

カラー・スキーム・スタイルでは、基本色に基づく各バケットに対し、輝度が異なる個々の色スタイルが自動的に生成されます。輝度は、完全に明るい状態から完全に暗い状態まで、等間隔で分けられます。通常は、1つ目のバケットに基本色の最も明るい階調が割り当てられ、最後のバケットに最も暗い階調が割り当てられます。

各バケットの色スタイルで使用されるストロークの色を含めることができます。ストロークの色は輝度計算には含まれません。したがって、たとえば、一連のポリゴン地物がカラー・スキーム・スタイルを使用してレンダリングされる場合、各ポリゴンの内側は、対応する各バケットの色(基本色の階調)で塗りつぶされますが、ポリゴンの境界はすべて同じストロークの色を使用して描画されます。

基本色(basecolor_opacity属性を使用)およびストロークの色(strokecolor_opacity属性を使用)に対して、不透明度値(0(透明)から255(不透明))を指定できます。

次の例では、ストロークの色を黒とし、基本色である青の様々な階調に4つのバケットが関連付けられたカラー・スキーム・スタイルを定義しています。

<?xml version="1.0" ?>
<AdvancedStyle>
<ColorSchemeStyle basecolor="blue" strokecolor="black">
<Buckets>
<RangedBucket label="&lt;10"  high="10"/>
<RangedBucket label="10 - 20" low="10" high="20"/>
<RangedBucket label="20 - 30" low="20" high="30"/>
<RangedBucket label="&gt;=30" low="30"/>
</Buckets>
</ColorSchemeStyle>
</AdvancedStyle>

注意:
次の特殊文字については、かわりにエスケープ・シーケンスを使用してください。
<のかわりに&ltを使用

>のかわりに&gt;を使用

&のかわりに&amp;を使用

A.6.3 可変マーカー・スタイル

可変マーカー・スタイルでは、バケットごとにサイズが異なる一連のマーカー・スタイルが生成されます。バケットの数、マーカーの開始(最小)サイズおよび2つの連続するマーカー間のサイズ増分を指定します。

可変マーカー・スタイルは、概念的にカラー・スキーム・スタイルと類似しています。どちらのスタイルも、共通オブジェクトとの差異に基づいてバケットが作成されます。カラー・スキーム・スタイルでは、基本色の輝度が変化し、可変マーカー・スタイルでは、マーカーのサイズが変化します。

次の例では、4つのバケットを含む可変マーカー・スタイルを作成しています。各バケットは、マーカー(m.circle)の様々なサイズ(増分4)に関連付けられています。1つ目のバケットのマーカーは半径が10ディスプレイ単位、2つ目のバケットのマーカーは半径が14ディスプレイ単位、というようになります。この例では、マーカーm.circleがすでに定義されていると仮定しています。

<?xml version="1.0" ?>
<AdvancedStyle>
<VariableMarkerStyle basemarker="m.circle" startsize="10" increment="4">
<Buckets>
<RangedBucket label="&lt;10"  high="10"/>
<RangedBucket label="10 - 20" low="10" high="20"/>
<RangedBucket label="20 - 30" low="20" high="30"/>
<RangedBucket label="&gt;=30"   low="30"/>
</Buckets>
</VariableMarkerStyle>
</AdvancedStyle>

A.6.4 ドット密度マーカー・スタイル

ドット密度拡張マーカー・スタイルは、州や郡などの領域地物に適用されると、該当する領域内に一連のドットをランダムに描画します。各領域内に描画されるドットの数は、該当領域に関連付けられているカウント値によって決まります。ドット密度スタイルを定義する場合は、各ドットに使用されるマーカー・スタイルを指定する必要があります。

単純なドット密度スタイルのXML定義を、次の例で示します。

<?xml version="1.0" ?>
<AdvancedStyle>
<DotDensityStyle MarkerStyle="M.STAR" DotWidth="8" DotHeight="8">
</DotDensityStyle>
</AdvancedStyle>

この例では、マーカー・スタイルM.STARが各ドットに使用され、各ドットのサイズは幅、高さともに8ピクセルです。

ドット密度スタイルを使用する場合は、カウント値を「調整」し、適切な範囲にする必要があります。たとえば、各郡の人口に基づいてドット密度スタイルを適用する場合、人口を直接使用して1人につき1ドットとすると、人口が15,000人の郡などでは描画されるドット数が許容できない数になるので望ましくありません。そのような場合はかわりに、テーマのスタイリング・ルールを定義する際に、スケールダウンした値または式(人口/1000など)を使用します。(MapViewerでは内部的なスケールダウン処理は実行されません。そうした処理は、SQL問合せレベルで実行する必要があります。)

A.6.5 棒グラフ・マーカー・スタイル

棒グラフ拡張マーカー・スタイルは、円グラフ・スタイルに類似しており、相違点は適用先の地物ごとに棒グラフが描画される点です。棒グラフ・スタイルのXML定義を、次の例で示します。

<?xml version="1.0" ?>
<AdvancedStyle>
<BarChartStyle width="30" height="25" show_x_axis="true">
<Bar name="1990" color="#FF0000" />
<Bar name="1995" color="#FFC800" />
<Bar name="1998" color="#0000FF" />
<Bar name="2000" color="#00FF00" />
<Bar name="2002" color="#00FFFF" />
</BarChartStyle>
</AdvancedStyle>

この例では、widthおよびheightで棒グラフ全体(個々のすべての棒も含む)のサイズを指定しています。

地物に関連付けられている一連の値に基づき、その地物の上に棒グラフを描画する場合、各棒の高さはローカル・スケールまたはグローバル・スケールという2つのアプローチで決定できます。ローカル・スケールの棒グラフの場合、各棒の高さは該当する地物に関連付けられている一連の値によってのみ決定されます。そのため、1つのグラフの2番目の棒を同一テーマの別のグラフの2番目の棒と比較することなどはできません。一方、グローバル・スケールの棒グラフの場合は、マップ上の全グラフで同じ棒スケールが使用されます。そのため、1つのグラフの2番目の棒を同一テーマの別のグラフの2番目の棒と比較するといったことが行えます。

そこで、同じグラフ内のみでなく、マップに表示されているすべてのグラフにわたって棒を比較する場合は、次の例で示すように、棒グラフ・スタイルの定義でshare_scale="true"を指定し、グローバル・スケールの棒グラフ・スタイルを使用する必要があります。

<?xml version="1.0" ?>
<AdvancedStyle>
<BarChartStyle width="40" height="30" share_scale="true"
min_value="0.0" max_value="100">
<Bar name="1990" color="#FF0000" />
<Bar name="1995" color="#FFC800" />
<Bar name="1998" color="#0000FF" />
<Bar name="2000" color="#00FF00" />
<Bar name="2002" color="#00FFFF" />
</BarChartStyle>
</AdvancedStyle>

先の例の棒グラフ・スタイルをテーマに適用すると、MapViewerは該当するテーマ内の全地物のグローバルな値域を考慮し、最小値から最大値のグローバルな範囲内での各値の位置に基づいて各棒の高さを決定します。

A.6.6 コレクション・スタイル

コレクション拡張スタイルは、1つの地物にまとめて適用される一連のタイプのスタイルの集合(コレクション)にすぎません。様々なスタイルに基づく複数のテーマを使用した場合に比べて、コレクション・テーマのレンダリングは高速に処理されます。

たとえば、棒グラフ・スタイルは、1つの郡に適用した場合、該当する郡内のどこかに該当する棒グラフのみを描画し、該当する郡自体(境界線と内側の領域)は描画しません。ただし、通常は、一連の郡の基盤となる境界線や、各棒グラフが属する郡も表示するはずです。コレクション・スタイルを使用せずにそのような処理を実行するには、2番目のテーマを定義し、その中で各郡に色スタイルや領域スタイルを関連付ける必要があります。そのようなアプローチをとると、本質的に同じグループの地物に対して、レンダリング・パスが2つできることになります(2つのテーマが含まれるため)。

ただし、この例でコレクション・スタイルを使用すると、棒グラフと色スタイルまたは領域スタイルを参照するスタイルを1つ定義し、そのコレクション・スタイルを一連の郡のテーマに適用することができます。そのテーマがMapViewerによってレンダリングされると、マップ上に一連の棒グラフも境界線も表示されます。

ポリゴン(領域)、ポイント、線などの複数のタイプのジオメトリが含まれるコレクション・タイプのトポロジ地物をレンダリングする場合にも、コレクション・スタイルを通常使用します。そのような場合は、各コレクション・トポロジ地物内の各タイプのジオメトリに最適な一連のスタイルを、1つのコレクション・スタイルに含めることができます。

コレクション・スタイルのXML定義を、次の例で示します。

<?xml version="1.0" standalone="yes"?>
<AdvancedStyle>
<CollectionStyle>
<style name="C.COUNTIES" shape="polygon" />
<style name="L.PH" shape="line" />
<style name="M.CIRCLE" shape="point" />
</CollectionStyle>
</AdvancedStyle>

A.6.7 可変円グラフ・スタイル

可変円グラフでは、バケットごとにサイズが異なる一連の円グラフが生成されます。円グラフの各区分の情報、円グラフの半径の初期(最小)サイズ、連続する2つの円間における半径の増分サイズを指定します。

可変円グラフ・スタイルは、概念的に可変マーカー・スタイルと類似しています。可変マーカー・スタイルではベース・マーカーのサイズが変化しますが、可変円グラフ・スタイルでは円の半径が変化します。

次の例は、4つのバケットを含む可変円グラフ・スタイルの定義を作成します。各バケットは、様々な円のサイズ(初期半径5で4ずつ増大)に関連付けられています。最初のバケットの円には5ディスプレイ単位の半径、2番目のバケットの円には9ディスプレイ単位の半径が指定されることになります。

<?xml version="1.0" ?>
<AdvancedStyle>
<VariablePieChartStyle startradius="5" increment="4">
<PieSlice name="WHITE" color="#FFFFFF"/>
<PieSlice name="BLACK" color="#000000"/>
<PieSlice name="HISPANIC" color="#FF0000"/>
<Buckets>
<RangedBucket seq="0" label="0 - 6194757.2" low="0" high="6194757.2" />
<RangedBucket seq="1" label="6194757.2 - 1.23895144E7" low="6194757.2" high="1.23895144E7"/>
<RangedBucket seq="2" label="1.23895144E7 - 1.85842716E7" low="1.23895144E7" high="1.85842716E7"/>
<RangedBucket seq="3" label="1.85842716E7 - 2.47790288E7" low="1.85842716E7" high="2.47790288E7"/>
<RangedBucket seq="4" label="2.47790288E7 - 3.0973786E7" low="2.47790288E7" high="3.0973786E7"/>
</Buckets>
</VariablePieChartStyle>
</AdvancedStyle>

A.6.8 ヒート・マップのスタイル

ヒート・マップのスタイルを使用して、あらゆるポイント・タイプ・データセットの2次元(2D)のカラー・マップを生成できます。色は、分布密度や地域におけるポイントやイベントのパターンを表します。MapViewerは内部では2Dマトリックスを作成して、ポイント・データセットに対して実行された距離加重アルゴリズムの結果に基づいて、それぞれのグリッド・セルに値を割り当てます。

Map Builderツールを使用してヒート・マップのスタイルを作成し、それをポイント・タイプのジオメトリ・テーマにレンダリング・スタイルとして割り当てることができます。その後で、このテーマをベース・マップに追加するか、インタラクティブなOracle Mapsアプリケーションにテーマ・ベースのFOI層として追加できます。図A-3は、ヒート・マップ・スタイルに基づいたテーマを使用して表示されるマップを示します。このマップは、ピザ・レストランの分布を示します。赤の部分はピザ・レストランの密度が最も高く、オレンジ、黄色、濃い緑、明るい緑、薄い緑、白い部分の順に密度が次第に低くなります。

図A-3 ピザ・レストランの分布を示すヒート・マップ

次の例では、ヒート・マップのスタイル定義を作成します。

<?xml version="1.0" ?>
<AdvancedStyle>
<HeatMapStyle>
<color_stops num_steps="200" alpha="128">
FFFFFF,00FF00, FFC800,FF0000
</color_stops>
<spot_light_radius>75.0mile</spot_light_radius>
<grid_sample_factor>2.5</grid_sample_factor>
<container_theme>THEME_DEMO_STATES</container_theme>
</HeatMapStyle>
</AdvancedStyle>

この例では、ヒート・マップの以下の重要な点を定義します。

- カラー・ストップ。カラー・ストップは、色のグラデーションを生成するために使用します。この例では、色のグラデーションは白(値ゼロでグリッド・セルにマッピングされます)から緑、オレンジ、最後に赤(最も高い値でグリッド・セルにマッピングされます)になります。グラデーションは、これら4つのカラー・ストップにまたがる200色になります。すべての色のアルファ値は128(半透明、0は完全な透明で255は不透明を示します)。

- スポットライト半径。スポットライト半径は、それぞれのグリッド・セルの半径を定義します。この半径内にあるイベントやポイントは、セルの最終的な集約された値に影響します。各ポイントの影響は、セルの中心からの距離が増えるほど少なくなり、この半径を超えるとゼロになります。
半径はピクセルまたはmileのような実際の距離の単位で指定できます。半径をピクセル(単位を指定しない場合のデフォルト)で指定する場合、色のグラデーションからグリッド・セルへのマッピングは、ユーザーがマップ上でズームインやズームアウトするにつれて変化します。ユーザーがズームインおよびズームアウトを行うたびに、半径内にあるポイント数が絶えず変化するためにこのようになります。マップのスケールに関係なく固定のヒート・マップを実現するには、meterやkm、mileなど距離の単位でスポットライトの半径を指定する必要があります。この例では、mileを使用します。

- グリッド・サンプル係数。グリッド・サンプル係数は、ヒート・マップの計算で内部マトリックスまたはグリッドを作成する際に、現在のマップ・ウィンドウのサイズをサンプリングするために使用します。たとえば、サンプル係数が4であれば、内部ヒート・マップのグリッドが実際のマップのウィンドウ・サイズの4分の1 (0.25)となります。つまり、マップが1000x1000ピクセルの場合、内部ヒート・マップのグリッドは250x250です。このように、グリッド・サンプル係数の値が少ないほど、内部ヒート・マップのグリッドが大きくなり、値が大きいほど内部ヒート・マップのグリッドは小さくなります。
グリッド・サンプル係数の値は、おそらく他のどの属性よりもヒート・マップのレンダリングのパフォーマンスに大きく影響します。なぜなら、(グリッド・サンプル係数の値が小さいことに起因する)大きな内部ヒート・マップのグリッドによって、全体的な計算時間が長くなるためです。一般的に適切なガイドラインは、グリッド・サンプル係数値を十分に高く指定して、内部ヒート・マップのグリッドが512x512ピクセル以下となるようにすることです。

- コンテナ・テーマ名。コンテナ・テーマ名では、ヒート・マップ・テーマの境界を定義するテーマ名(同じデータベース・スキーマの事前定義済ジオメトリ・テーマ)を指定します。たとえば、全米に散らばるポイント・データセットのヒート・マップを生成する場合、米国の国境あるいはすべての州をコンテナ名として表すテーマを選択してください。
指定されたコンテナ・テーマは、ヒート・マップ自体の計算方法には影響しません(これは、ポイント分布とスポットライト半径にのみ基づきます)。かわりに、調査地域の境界の外にある色のついたすべてのセルが、コンテナ・テーマによってマスクされます。こうすることで、ヒート・マップが整理されて見えます。

ヒート・マップのスタイルを作成した後は、ポイント・データのテーマを作成して、新しいヒート・マップのスタイルをテーマのレンダリング・スタイルとして割り当てることができます。

他のタイプの拡張スタイルとは異なり、ヒート・マップのスタイルには属性や値の列は必要ありません。

ヒート・マップ・スタイルを使用してレンダリングされたテーマでは、ラベルはサポートされていません。

A.7 テーマ: スタイリング・ルール

テーマ定義には、1つの<styling_rules>要素が含まれます。この要素はテーマのタイプに応じて、いくつかの他の要素で構成される場合があります。この<styling_rules>要素は、USER_SDO_THEMESメタデータ・ビューのSTYLING_RULES列で、次のDTDを使用して指定します。

<!ELEMENT styling_rules (rule+, hidden_info?, join_table?, join_columns?, operations?, bitmap_masks?, parameters?)>
<!ATTLIST styling_rules theme_type         CDATA #IMPLIED
key_column         CDATA #IMPLIED
caching            CDATA #IMPLIED "NORMAL"
image_format       CDATA #IMPLIED
image_column       CDATA #IMPLIED
image_resolution   CDATA #IMPLIED
image_unit         CDATA #IMPLIED
raster_id          CDATA #IMPLIED
raster_table       CDATA #IMPLIED
raster_pyramid     CDATA #IMPLIED
raster_bands       CDATA #IMPLIED
polygon_mask       CDATA #IMPLIED
transparent_nodata CDATA #IMPLIED
network_name       CDATA #IMPLIED
network_level      CDATA #IMPLIED
topology_name      CDATA #IMPLIED
service_url        CDATA #IMPLIED
srs                CDATA #IMPLIED
feature_ids        CDATA #IMPLIED
provider_id        CDATA #IMPLIED
srid               CDATA #IMPLIED>

<!ELEMENT rule (features, label?, rendering?)>
<!ATTLIST rule column CDATA #IMPLIED>

<!ELEMENT features (#PCDATA?, link?, node?, path?)>
<!ATTLIST features style CDATA #REQUIRED>

<!ELEMENT label (#PCDATA?, link?, node?, path?)>
<!ATTLIST label column CDATA #REQUIRED
style  CDATA #REQUIRED>

<!ELEMENT link (#PCDATA)>
<!ATTLIST link style                CDATA #REQUIRED
direction_style      CDATA #IMPLIED
direction_position   CDATA #IMPLIED
direction_markersize CDATA #IMPLIED
column               CDATA #REQUIRED>

<!ELEMENT node (#PCDATA)>
<!ATTLIST node style      CDATA #REQUIRED
markersize CDATA #IMPLIED
column     CDATA #REQUIRED>

<!ELEMENT path (#PCDATA)>
<!ATTLIST path ids    CDATA #REQUIRED
styles CDATA #REQUIRED
style  CDATA #REQUIRED
column CDATA #REQUIRED>

<!ELEMENT hidden_info (field+)>

<!ELEMENT field (#PCDATA)>
<!ATTLIST field column CDATA #REQUIRED
name   CDATA #IMPLIED>

<!ELEMENT join_table EMPTY>
<!ATTLIST join_table name          CDATA #REQUIRED
start_measure CDATA #IMPLIED
end_measure   CDATA #IMPLIED
measure       CDATA #IMPLIED>

<!ELEMENT join_columns EMPTY>
<!ATTLIST columns lrs_table_column  CDATA #REQUIRED
join_table_column CDATA #REQUIRED>

<!ELEMENT rendering (style+)>

<!ELEMENT style (substyle?)>
<!ATTLIST style name          CDATA #REQUIRED
value_columns CDATA #IMPLIED>

<!ELEMENT substyle (#PCDATA)>
<!ATTLIST substyle name          CDATA #REQUIRED
value_columns CDATA #REQUIRED
changes       CDATA #IMPLIED>

<!ELEMENT operations (operation?)>

<!ELEMENT operation (parameter?)>
<!ATTLIST operation name CDATA #REQUIRED>

<!ELEMENT parameters (parameter?)>

<!ELEMENT parameter (#PCDATA)>
<!ATTLIST parameter name  CDATA #REQUIRED
value DATA #REQUIRED>

<!ELEMENT bitmap_masks (mask+)>

<!ELEMENT mask (#PCDATA)>
<!ATTLIST mask raster_id    CDATA #REQUIRED
raster_table CDATA #REQUIRED
layers       CDATA #REQUIRED
zeromapping  CDATA #IMPLIED
onemapping   CDATA #IMPLIED>

<styling_rules> 要素に含まれる場合があるtheme_type属性は主に、特定のタイプの事前定義済テーマに使用されます。(theme_type属性のデフォルト値はgeometryであり、テーマが空間ジオメトリに基づいていることを示します。)これらの特殊なタイプの事前定義済テーマのtheme_type属性値は、次のとおりです。

- annotationは、注釈テキスト・テーマを指定します。注釈テキスト・テーマの詳細は、2.3.10項を参照してください。

- geom_customは、カスタム・ジオメトリ・テーマを指定します。provider_id属性およびsrid属性を指定する必要があります。カスタム・ジオメトリ・テーマの詳細は、2.3.9項を参照してください。

- georasterは、GeoRasterテーマを指定します。指定したGeoRasterデータを使用するには(ただし、問合せ条件を使用してGeoRasterデータを取得する場合を除く)、raster_id属性およびraster_table属性も指定する必要があります。raster_pyramid属性、raster_bands属性およびpolygon_mask属性、transparent_nodata属性を指定することもできます。GeoRasterテーマの詳細は、2.3.4項を参照してください。

- imageは、イメージ・テーマを指定します。ともに指定する必要がある属性はimage_format属性とimage_column属性であり、指定できる属性はimage_resolution属性とimage_unit属性です。イメージ・テーマの詳細は、2.3.3項を参照してください。

- networkは、ネットワーク・テーマを指定します。network_name属性も指定する必要があります。network_level属性も指定できますが、現在はデフォルト値(1)しかサポートされていません。ネットワーク・テーマの詳細は、2.3.5項を参照してください。

- topologyは、トポロジ・テーマを指定します。topology_name属性も指定する必要があります。トポロジ・テーマの詳細は、2.3.6項を参照してください。

- wfsは、WFSテーマを指定します。service_url属性およびsrs属性も指定する必要があります。WFSテーマの詳細は、2.3.7項を参照してください。

<styling_rules>要素では、key_column属性を指定できます。この属性が必要になるのは、結合ビュー(複数の表から作成されたビュー)でテーマが定義される場合のみです。このような場合は、キー列となる列をこのビューで指定し、そのビューでジオメトリまたは画像を一意に識別する必要があります。このキー列情報がない場合、MapViewerは結合ビューのジオメトリまたは画像をキャッシュできません。

<styling_rules>要素では、caching属性を指定できます。この属性は、各事前定義済テーマのキャッシュ・スキームを指定します。caching属性には、NORMAL(デフォルト)、NONEまたはALLのいずれかの値を使用できます。

- NORMALを指定すると、ジオメトリの再利用が必要な場合に負荷のかかる非Pickle化処理を繰り返さずにすむように、MapViewerは表示したばかりのジオメトリ・データのキャッシュを試行します。ジオメトリは常にデータベースからフェッチされますが、非Pickle化バージョンがキャッシュにすでに存在する場合、フェッチしたジオメトリは使用されません。

- NONEを指定すると、該当するテーマのジオメトリはキャッシュされません。テーマのデータを頻繁に編集し、編集したとおりにデータを表示する必要がある場合は、この値を使用すると便利です。

- ALLを指定すると、MapViewerは該当するテーマのジオメトリ・データをすべて完全にキャッシュに確保してから、リクエストを表示します。デフォルト値のNORMALとは対照的に、値ALLでは、初めてテーマが表示されるときに実表のすべてのジオメトリがキャッシュされ、以降データベースからジオメトリはフェッチされません。

事前定義済テーマのキャッシュの詳細は、2.3.1.6項を参照してください。

各<rule>要素は、<features>要素を含める必要があり、<label>要素と<rendering>要素を含めることもできます。<rendering>要素は、複数のレンダリング・スタイルの定義に使用できます。この要素を使用した場合、<features>要素のレンダリング・スタイルは定義されないことがあります。<features>要素のレンダリング・スタイルを定義し、<rendering>要素も定義した場合、MapViewerは最初に<features>要素のスタイルをレンダリングし、次に<rendering>要素のスタイルをレンダリングします。(<rendering>要素の詳細は、この項で後述します。)

<rule>要素のオプションのcolumn属性は、MapViewerで生成される問合せのSELECT構文リストに挿入される、実表の1つ以上の属性列をカンマ区切りリストで指定します。こうした列の値は、通常は該当するテーマの拡張スタイルによって処理されます。次の例は、column属性の使用方法を示しています。

<?xml version="1.0" standalone="yes"?>
<styling_rules >
<rule column="TOTPOP">
<features style="V.COUNTY_POP_DENSITY">  </features>
</rule>
</styling_rules>

この例では、テーマのジオメトリ地物が拡張スタイルV.COUNTY_POP_DENSITYを使用してレンダリングされます。このスタイルでは、該当するテーマの実表のTOTPOP列内の数値を検索することで、郡ジオメトリを塗りつぶすための色が決定されます。

ネットワーク・テーマの各<features>要素には、<link>要素、<node>要素または<path>要素、あるいはそれらの組合せを含める必要があります。(<link>要素、<node>要素および<path>要素はネットワーク・テーマにのみ適用します。ネットワーク・テーマの詳細は、2.3.5項を参照してください。)次の例は、リンクおよびノードをレンダリングするネットワーク・テーマのスタイリング・ルールを示しています。

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="network"
network_name="LRS_TEST" network_level="1">
<rule>
<features>
<link style="C.RED"
direction_style="M.IMAGE105_BW"
direction_position="0.85"
direction_markersize="8"></link>
<node style="M.CIRCLE" markersize="5"></node>
</features>
</rule>
</styling_rules>

<label>要素には、地物にラベルを適用するかどうかを決定するための要素値として、SQL式を含める必要があります。column属性には、地物にラベル付けするためのテキスト値に対応したSQL式を指定し、style属性には、ラベルをレンダリングするためのテキスト・スタイルを指定します。

<rendering>要素は、複数のレンダリング・スタイルの定義に使用できます。スタイルは、表示されている順序でレンダリングされます。<rendering>要素の各スタイルは、<style>要素で定義されます。この要素はname属性を指定する必要があり、value_columns属性も指定できます。(value_columns属性は拡張スタイルで使用され、列名は<rule>要素のcolumn属性で定義された属性リストに追加されます。)

<rendering>要素では、各<style>要素で、地物の塗りの属性を定義する<substyle>要素を指定できます。<substyle>要素はname属性を指定する必要があり、value_columns属性とchanges属性も指定できます。changes属性では、FILL_COLOR値のみサポートされます。

次の例は、<rendering>要素を使用するジオメトリ・テーマのスタイリング・ルールを示しています。地物の形状をレンダリングする拡張スタイルV.POIVMKと、地物の形状を塗る拡張サブスタイルV.POIBKTを定義します。

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<rule>
<features> </features>
<label column="NAME" style="T.STREET2"> 1 </label>
<rendering>
<style name="V.POIVMK" value_columns="FEATURE_CODE">
<substyle name="V.POIVBKT" value_columns="POINT_ID" changes="FILL_COLOR"/>
</style>
</rendering>
</rule>
</styling_rules>

1つのスタイリング・ルールで複数のレンダリング・スタイルを適用する<rendering>要素の詳細は、2.3.1.4項を参照してください。

<hidden_info>要素は、テーマの地物の上にマウスを動かしたときに表示される実表の属性リストを指定します。属性は、<field>要素のリストで指定します。

各<field>要素には、column属性を含める必要があります。この属性は実表の列名を指定します。また、列の表示名を指定するname属性を使用できます。(name属性は、列名以外のテキスト文字列を表示する場合に便利です。)

<join_table>要素は、測定のための表名およびその列を1つまたは2つ指定します。ポイント・タイプの地物には1つのメジャー列、線形タイプの地物には2つのメジャー列を含めることができます。メジャー列は、LRSジオメトリ列を持つLRS表との結合時に線形参照プロセスで使用されます。

<join_columns>要素は、LRSジオメトリ列を持つLRS表の1つの列、および1つまたは2つのメジャー列を持つ結合表から1つの列を指定します。これらの2つの列を使用して、LRS表と結合表を結合します。

<operations>要素は、GeoRasterテーマで適用されるイメージ処理オペレーションのリストを指定します。この操作は、<operation>要素のリストで指定します。

<operation>要素は、GeoRasterテーマで適用されるイメージ処理演算子とパラメータを指定します。各<operation>要素には、<parameters>要素のリストが含まれる場合があります。

<parameters>要素では、固有のタスクで使用されるパラメータのリストを定義します。パラメータは、<parameter>要素のリストで指定します。

<parameter>要素では、name属性とvalue属性を定義する必要があります。

<bitmap_masks>要素では、GeoRasterテーマで使用されるイメージ・マスクの属性を定義します。ビットマップ・マスクは、<mask>要素のリストで指定します。

<mask>要素は、GeoRasterオブジェクトで適用されるビットマップ・マスクを指定します。raster_id属性とraster_table属性とlayers属性は定義する必要がありますが、zeromapping属性とonemapping属性はオプションです。

スタイリング・ルールの詳細および例は、2.3.1.1項を参照してください。

A.8 ベース・マップ

ベース・マップの定義は、1つ以上のテーマで構成されます。ベース・マップのXML定義は次のDTDを使用し、USER_SDO_MAPSメタデータ・ビューのDEFINITION列で指定されます。

<!ELEMENT map_definition (theme+)>

<!ELEMENT theme EMPTY>
<!ATTLIST theme name CDATA #REQUIRED
name                  CDATA #REQUIRED
datasource            CDATA #IMPLIED
template_theme        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"
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
>

<map_definition>要素には、1つ以上の<theme>要素が含まれます。テーマは、定義に指定された順序で、マップ上に相互に積み重ねてレンダリングされます。

<theme>要素およびその属性の詳細は、3.1.2.20項を参照してください。

ベース・マップの定義の詳細および例は、2.4項を参照してください。

A.9 マップ・タイル層

Oracle Mapsのマップ・タイル層は、マップ・タイル・サーバーの事前に生成された一連のマップ画像タイルを組み立てて表示します(3.3.2.2項「マップ・タイル層の構成」を参照)。マップ・タイル層のXML構成設定は、次のDTDを使用して定義されます。

<!ELEMENT map_tile_layer ((internal_map_source|external_map_source), tile_storage, coordinate_system, tile_image, , tile_dpi?, tile_meters_per_unit?, zoom_levels, auto_update?, themes?)>
<!ATTLIST map_tile_layer
name CDATA #REQUIRED
image_format CDATA #IMPLIED
http_header_expires CDATA #IMPLIED
utfgrid (TRUE|FALSE) "FALSE"
utfgrid_resolution CDATA #IMPLIED
concurrent_fetching_threads CDATA #IMPLIED
fetch_larger_tile (TRUE|FALSE) "TRUE"
persistent_tiles (TRUE|FALSE) "TRUE">

<!ELEMENT internal_map_source EMPTY>
<!ATTLIST internal_map_source
data_source CDATA #REQUIRED
base_map CDATA #REQUIRED
bgcolor CDATA #IMPLIED
out_of_bounds_color CDATA #IMPLIED
antialias (TRUE|FALSE) "TRUE">

<!ELEMENT external_map_source (properties?)>
<!ATTLIST external_map_source
url CDATA #REQUIRED
request_method CDATA #REQUIRED
timeout CDATA #IMPLIED
adapter_class CDATA #REQUIRED
proxy_host CDATA #IMPLIED
proxy_port CDATA #IMPLIED
clipping_buffer CDATA #IMPLIED>

<!ELEMENT properties (property+) >

<!ELEMENT property EMPTY >
<!ATTLIST property
name CDATA #REQUIRED
value CDATA #REQUIRED>

<!ELEMENT tile_storage EMPTY >
<!ATTLIST tile_storage
root_path CDATA #REQUIRED
xyz_storage_scheme (TRUE|FALSE) "FALSE">

<!ELEMENT coordinate_system EMPTY >
<!ATTLIST coordinate_system
srid CDATA #REQUIRED
minX CDATA #REQUIRED
minY CDATA #REQUIRED
maxX CDATA #REQUIRED
maxY CDATA #REQUIRED>

<!ELEMENT tile_bound (coordinates)>
<!ELEMENT coordinates (#PCDATA)>

<!ELEMENT tile_image EMPTY >
<!ATTLIST tile_image
width CDATA #REQUIRED
height CDATA #REQUIRED>

<!ELEMENT tile_dpi EMPTY >
<!ATTLIST tile_dpi
value CDATA #REQUIRED>

<!ELEMENT tile_meters_per_unit EMPTY >
<!ATTLIST tile_meters_per_unit
value CDATA #REQUIRED>

<!ELEMENT zoom_levels (zoom_level+)>
<!ATTLIST zoom_levels
levels CDATA #REQUIRED
min_scale CDATA #IMPLIED
max_scale CDATA #IMPLIED
min_tile_width CDATA #IMPLIED
min_tile_height CDATA #IMPLIED>

<!ELEMENT zoom_level (tile_bound?)>
<!ATTLIST zoom_level
level CDATA #REQUIRED
level_name CDATA #IMPLIED
description CDATA #IMPLIED
scale CDATA #REQUIRED
tile_width CDATA #REQUIRED
tile_height CDATA #REQUIRED>

<!ELEMENT auto_update (dirty_mbr_table_name,logtable_name)>
<!ATTLIST auto_update
finest_level_to_refresh CDATA #REQUIRED
dirty_mbr_batch CDATA #REQUIRED
dirty_mbr_cap CDATA #REQUIRED>

<!ELEMENT dirty_mbr_table_name EMPTY>
<!ATTLIST dirty_mbr_table_name
name CDATA #REQUIRED>

<!ELEMENT logtable_name EMPTY>
<!ATTLIST logtable_name
name CDATA #REQUIRED>

<!ELEMENT themes (theme)>
<!ATTLIST auto_update
finest_level_to_refresh CDATA #REQUIRED
dirty_mbr_batch CDATA #REQUIRED
dirty_mbr_cap CDATA #REQUIRED>

<!ELEMENT theme EMPTY>
<!ATTLIST theme
name CDATA #REQUIRED
from_level CDATA #REQUIRED
to_level CDATA #REQUIRED>

B SVGマップのJavaScript関数

この付録では、SVGマップ用のMapViewer JavaScript Application Program Interface (API)について説明します。このAPIには、SVGマップ外(通常はSVGマップが埋め込まれたHTML文書)からコールできる事前定義済関数が含まれます。また、特定のマウスクリック操作が発生したときにコールされるJavaScript関数も作成できます。事前定義済関数およびユーザー定義関数を使用して、カスタマイズされたナビゲーション機能など、クライアント側の高度な対話機能を実装できます。

この付録で説明するJavaScript関数を使用する場合、エンド・ユーザーはMicrosoft Internet Explorerを使用してSVGマップを表示し、使用するシステムにAdobe SVG Viewer 3.0以上がインストールされている必要があります。

この付録の主な項目は、次のとおりです。

- B.1項「ナビゲーション・コントロール関数」

- B.2項「表示コントロール関数」

- B.3項「マウスクリック・イベント・コントロール関数」

- B.4項「その他のコントロール関数」

B.1 ナビゲーション・コントロール関数

ナビゲーションをコントロールするMapViewer JavaScript関数には、次のようなものがあります。

- recenter(x, y)は、現在のSVGマップの中心点を設定します。
入力するxおよびyの値は、新しい中心点の座標(ピクセル単位)を指定します。これは、SVGビューア・ウィンドウの中心に表示されるSVGマップ内のポイントです。SVGビューア・ウィンドウは、SVGビューアで表示されたWebブラウザ内のグラフィック領域です。中心点の座標はSVGマップ画面の座標系で定義され、マップの左上角の(0, 0)から、右下角の(幅, 高さ)の間の値です。

- setZoomRatio(zratio)は、現在のマップの表示ズーム比を設定します。
この関数は、SVGマップのズームインまたはズームアウトに使用できます。(マップの中心点は変更されません。)ズームする前の元のマップのズーム比は1で、ズーム比の値が大きい場合、SVGマップは拡大表示されます。マップのズーム比は、事前定義済のズーム・レベルに合わせた値に設定する必要があります。たとえば、zoomlevelsの値が4で、zoomfactorの値が2の場合、ズーム・レベル0、1、2および3でのマップのズーム比はそれぞれ1、2、4および8となるため、この例ではzratioパラメータの値を1、2、4または8に設定します。事前定義済ズーム・レベルの詳細は、3.1.2.1.1項のzoomlevels属性、zoomfactor属性およびzoomratio属性の説明を参照してください。

B.2 表示コントロール関数

MapViewerには、情報を提供するヒント、マップ凡例、非表示のテーマおよびアニメーション・ロード・バーの表示を有効および無効にする関数があります。こうした表示コントロール関数には、次のようなものがあります。

- switchInfoStatus()は、情報を提供するヒントの表示を有効または無効にします。(コールするたびに前の設定が無効になります。)
テーマのスタイリング・ルール定義(A.7項を参照)の<hidden_info>要素およびマップ・リクエスト(3.1.2.1.1項を参照)のinfoon属性を使用すると、情報を提供するヒントの初期表示を制御できます。switchInfoStatus()関数は、情報を提供するヒント表示の現在の設定を切り替えます(無効化します)。

- switchLegendStatus()は、マップ凡例の表示を有効または無効にします。(コールするたびに前の設定が無効になります。)マップを表示しても、最初は凡例が表示されません。

- showTheme(theme)は指定したテーマがマップに表示されるように設定し、hideTheme(theme)は指定したテーマがマップに表示されないように設定します。

- showLoadingBar()は、アニメーション・ロード・バーを表示します。アニメーション・ロード・バーは、新しいマップのロードが進行中であることを視覚的に示します。ロードが完了すると、バーはなくなります。

B.3 マウスクリック・イベント・コントロール関数

MapViewerには、事前定義済のマウスクリック・イベント・コントロール関数があります。これらの関数をB.3.1項で説明します。ユーザー定義のマウス・イベント・コントロール関数も作成できます。詳細は、B.3.2項を参照してください。

B.3.1 事前定義済マウスクリック・コントロール関数

MapViewerには、SVGマップでのテーマ地物、矩形およびポリゴンの選択を有効および無効にする関数があります。また、選択についての情報を取得する関数や、選択状態をオンおよびオフにする関数もあります。SVGマップのマウスクリック・イベント・コントロールをカスタマイズする関数には、次のようなものがあります。

- enableFeatureSelect()はテーマ地物の選択を有効にし、disableFeatureSelect()はテーマ地物の選択を無効にします。
マップ・リクエスト(3.1.2.20項を参照)またはベース・マップ(A.8項を参照)定義のいずれかで、<theme>要素のselectable_in_svg属性がTRUEの場合、テーマ地物の選択を有効にできます。テーマが選択可能で、テーマ地物の選択が有効な場合、SVGマップに表示されたテーマの各地物は、クリックして選択できます。地物を選択すると、その色が変わり、ID(デフォルトではROWID)が記録されます。すでに選択済の地物をクリックすると、その地物の選択が解除されます。この項で説明するgetSelectedIdList()関数をコールすると、選択したすべての地物のIDのリストを取得できます。

テーマ地物の選択を有効にすると、ポリゴンの選択および矩形の選択が自動的に無効になります。

- enablePolygonSelect()はポリゴンの選択を有効にし、disablePolygonSelect()はポリゴンの選択を無効にします。
ポリゴンの選択が有効な場合、SVGマップでマウスをクリックして移動すると、ポリゴンの選択領域を定義できます。クリックするたびに、ポリゴンの形状ポイントが作成されます。ポリゴンの座標は記録され、この項で説明するgetSelectPolygon()関数をコールするとその座標を取得できます。

ポリゴンの選択を有効にすると、テーマ地物の選択および矩形の選択が自動的に無効になります。

- enableRectangleSelect()は矩形の選択を有効にし、disableRectangleSelect()は矩形の選択を無効にします。
矩形の選択が有効な場合、SVGマップでマウスをクリックしてドラッグすると、矩形の選択ウィンドウを定義できます。矩形の座標は記録され、この項で説明するgetSelectRectangle()関数をコールするとその座標を取得できます。

矩形の選択を有効にすると、テーマ地物の選択およびポリゴンの選択が自動的に無効になります。

- getInfo(theme, key)は、テーマ名およびキーによって識別される地物の情報メモまたはヒント文字列を返します。

- getSelectedIdList(theme)は、SVGマップで選択されたすべての地物IDの配列を返します。

- getSelectPolygon()は、元のユーザー・データと関連付けられた座標系を使用して、選択ポリゴンのすべての形状ポイントの座標配列を返します。

- getSelectRectangle()は、元のユーザー・データと関連付けられた座標系を使用して、選択矩形の左上角および右下角の座標配列を返します。

- selectFeature(theme, key)は、指定されたテーマ内の地物(キー値で識別)の選択状態を切り替えます。

- setSelectPolygon(poly)は、元のユーザー・データと関連付けられた座標系を使用して、選択ポリゴンのすべての形状ポイントの座標を設定します。座標は、配列polyに格納されます。enablePolygonSelect()の後にこの関数をコールすると、SVGマップ上にポリゴンが描画されます。

- setSelectRectangle(rect)は、元のユーザー・データと関連付けられた座標系を使用して、選択矩形の左上角および右下角の座標を設定します。座標は、配列rectに格納されます。enableRectangleSelect()の後にこの関数をコールすると、SVGマップ上に矩形が描画されます。

B.3.2 ユーザー定義のマウス・イベント・コントロール関数

ユーザー定義のJavaScriptマウス・イベント・コントロール関数を事前定義済JavaScript関数(B.3.1項を参照)と組み合せて、より対話型なカスタマイズ関数を実装できます。マップレベルの関数、テーマレベルの関数および選択イベント・コントロール関数を作成できます。

B.3.2.1 マップレベル関数

マウスクリック・イベントおよびマウス移動イベントに対して、マップレベルのマウス・イベント・コントロール関数を定義できます。

マウスクリック・イベント関数は、テーマ地物の選択およびウィンドウの選択の両方が無効の場合に、SVGマップの任意の場所をクリックするとコールされます。関数の名前は、マップ・リクエストのonclick属性(3.1.2.1.1項を参照)で定義します。

マウス移動イベント関数は、SVGマップ内のどこかでマウスを移動するたびにコールされます。関数の名前は、マップ・リクエストのonmousemove属性(3.1.2.1.1項を参照)で定義します。

これらのJavaScript関数は、SVGマップが埋め込まれたWebページに定義する必要があります。マウスクリックおよびマウス移動イベント関数には、2つのパラメータxおよびy(マウスのクリックまたは移動が発生したSVGビューア・ウィンドウ内の座標を指定)を使用する必要があります。座標はローカルのSVGビューア・ウィンドウの座標系で定義され、左上角の(0, 0)から右下角の(幅, 高さ)の間です。

B.3.2.2 テーマレベル関数

マウスクリック、マウス移動、マウスオーバー、マウスアウトの各イベントに対して、テーマレベルのマウス・イベント・コントロール関数を定義できます。

マウスクリック・イベント・コントロール関数は、テーマ地物の選択が有効な場合にテーマ地物をクリックするとコールされます。マップ内の各テーマに、独自のマウスクリック・イベント・コントロール関数を指定できます。テーマレベルのマウスクリック・イベント・コントロール関数は、マップ・リクエストまたはベース・マップ定義の<theme>要素のonclick属性で指定します。

マウス移動イベント・コントロール関数は、テーマ地物の内部でマウスを移動するたびにコールされます。マップ内の各テーマに、独自のマウス移動イベント・コントロール関数を指定できます。テーマレベルのマウス移動イベント・コントロール関数は、マップ・リクエストまたはベース・マップ定義の<theme>要素のonmousemove属性で指定します。

マウスオーバー・イベント・コントロール関数は、テーマ地物の外部からテーマ地物の内部にマウスを移動するたびにコールされます。マップ内の各テーマに、独自のマウスオーバー・イベント・コントロール関数を指定できます。テーマレベルのマウスオーバー・イベント・コントロール関数は、マップ・リクエストまたはベース・マップ定義の<theme>要素のonmouseover属性で指定します。

マウスアウト・イベント・コントロール関数は、テーマ地物から外にマウスを移動するたびにコールされます。マップ内の各テーマに、独自のマウスアウト・イベント・コントロール関数を指定できます。テーマレベルのマウスアウト・イベント・コントロール関数は、マップ・リクエストまたはベース・マップ定義の<theme>要素のonmouseout属性で指定します。

これらのJavaScript関数は、SVGマップが埋め込まれたWebページに定義する必要があります。次のパラメータを使用します。

- テーマ名

- 地物のキー

- SVGビューア・ウィンドウ内のマウスをクリックしたポイントのX軸値

- SVGビューア・ウィンドウ内のマウスをクリックしたポイントのY軸値

地物のキーは実表のキー列の値であり、マップ・リクエストまたはベース・マップ定義の<theme>要素のkey_column属性によって指定されます。ROWIDがデフォルトのキー列として使用されます。たとえば、COUNTYテーマのonclick属性がselectCountyに設定されている場合、ROWIDがAAAHQDAABAAALk6AbmであるCOUNTYテーマの地物をSVGマップの(100,120)でクリックすると、JavaScript関数selectCounty('COUNTY', 'AAAHQDAABAAALk6Abm', 100, 120)がコールされます。

X軸およびY軸の値は、SVGビューア・ウィンドウ内のマウス・イベントが発生した座標を指定します。座標はローカルのSVGビューア・ウィンドウの座標系で定義され、左上角の(0, 0)から右下角の(幅, 高さ)の間です。

B.3.2.3 選択イベント・コントロール関数

矩形の選択またはポリゴンの選択、あるいはその両方で、選択イベント・コントロール関数を定義できます。

矩形の選択イベント・コントロール関数は、矩形の選択が有効な場合に、SVGマップ上でマウスをクリックおよびドラッグして(対角線上で向かい合う2つの角を示して)、矩形の選択領域を作成するとコールされます。矩形の選択が完了し、マウス・キーを解放すると、すぐにこの関数がコールされます。関数の名前は、マップ・リクエストのonrectselect属性(3.1.2.1.1項を参照)で指定します。

ポリゴンの選択イベント・コントロール関数は、ポリゴンの選択が有効な場合に、SVGマップ上でマウスを4回以上クリックおよびドラッグして多角形の選択領域を作成したときにコールされます。最初にクリックしたのと同じ場所を最後にクリックするとポリゴンが完成します。ポリゴンの選択が完了すると、すぐにこの関数がコールされます。関数の名前は、マップ・リクエストのonpolyselect属性(3.1.2.1.1項を参照)で指定します。

B.4 その他のコントロール関数

MapViewerには、他にもSVGマップでの処理に役立つ関数があります。こうした関数を次に示します。

- getUserCoordinate(x,y)は、画面座標を元のマップ・データ座標に変換します。この関数は、変換後の結果を配列で返します。配列の1番目の要素は変換後のX座標、配列の2番目の要素は変換後のY座標です。

- getScreenCoordinate(x,y)は、元のマップ・データ座標を画面座標に変換します。この関数は、変換後の結果を配列で返します。配列の1番目の要素は変換後のX座標、配列の2番目の要素は変換後のY座標です。

C カスタム・イメージ・レンダラの作成および登録

この付録では、イメージ・テーマで使用するためのカスタム・イメージ・レンダラの実装および登録方法について説明します。(イメージ・テーマについては、2.3.3項を参照してください。)

MapViewerでサポートされていない画像形式のイメージ・テーマを指定したマップ・リクエストを作成する場合、最初にその形式に対応したカスタム・イメージ・レンダラを実装し、登録する必要があります。たとえば、3.1.1.6項の例3-6のECW形式はMapViewerでサポートされていません。したがって、この例を機能させるには、最初にECW形式の画像に対応したイメージ・レンダラを実装し、登録する必要があります。

oracle.sdovis.CustomImageRendererインタフェースは、Oracle Fusion Middleware環境の$ORACLE_HOME/lbs/libディレクトリに格納された、sdovis.jarパッケージで定義されています。このインタフェースのソース・コードを次に示します。

/**
* An interface for a custom image painter that supports user-defined image
* formats. An implementation of this interface can be registered with
* MapViewer to support a custom image format.
*/
public interface CustomImageRenderer
{
/**
* The method is called by MapViewer to find out the image format
* supported by this renderer. <br>
* This format string must match the one specified in a custom image renderer
* element defined in the configuration file (mapViewerConfig.xml).
*/
public String  getSupportedFormat() ;

/**
* Renders the given images. MapViewer calls this method
* to tell the implementor the images to render, the current map
* window in user space, and the MBR (in the same user space) for each
* image.
* <br>
* The implementation should not retain any reference to the parameters
* permanently.
* @param g2  the graphics context to draw the images onto.
* @param images  an array of image data stored in byte array.
* @param mbrs an array of double[4] arrays containing one MBR for each
*        image in the images array.
* @param dataWindow the data space window covered by the current map.
* @param deviceView the device size and offset.
* @param at  the AffineTransform using which you can transform a point
*            in the user data space to the device coordinate space. You can
*            ignore this parameter if you opt to do the transformation
*            yourself based on the dataWindow and deviceView information.
* @param scaleImage a flag passed from MapViewer to indicate whether
*             the images should be scaled to fit the current device window.
*             If it is set to false, render the image as-is without
*             scaling it.
*/
public void   renderImages(Graphics2D g2, byte[][] images, double[][] mbrs,
Rectangle2D dataWindow, Rectangle2D deviceView,
AffineTransform at, boolean scaleImage) ;
}

このインタフェースを実行した後には、MapViewerのCLASSPATH定義に含まれるディレクトリ($MAPVIEWER/web/WEB-INF/libディレクトリなど)に、実装クラスを格納する必要があります。実際のレンダリングの実行にネイティブ・ライブラリを使用する場合、そうしたライブラリに必要な他のファイル(.dllファイル、.soファイルなど)が、MapViewerの動作するJava仮想マシン(JVM)から確実にアクセスできるようにしておく必要があります。

カスタム実装クラスおよび必要なライブラリをMapViewerのCLASSPATHに格納した後、構成ファイルmapViewerConfig.xmlでクラスをMapViewerに登録する必要があります(1.6.2項を参照)。このファイルの次の部分を適宜検査および編集します。このファイルは、まだサポートしていない特定の画像形式が出現した場合にロードするクラスを、MapViewerに通知します。

<!-- ****************************************************************** -->
<!-- ******************** Custom Image Renderers ********************** -->
<!-- ****************************************************************** -->
<!-- Uncomment and add as many custom image renderers as needed here,
each in its own  <custom_image_renderer> element. The "image_format"
attribute specifies the format of images that are to be custom
rendered using the class with the full name specified in "impl_class".
You are responsible for placing the implementation classes in the
MapViewer classpath.
-->
<!--
<custom_image_renderer image_format="ECW"
impl_class="com.my_corp.image.ECWRenderer"/>
-->

この例では、イメージ・テーマの<jdbc_image_query>要素によってロードされるECW形式の画像データについてレンダリングを実行するために、MapViewerによってcom.my_corp.image.ECWRendererクラスがロードされます。

例C-1は、oracle.sdovis.CustomImageRendererインタフェースの実装例です。この例では、ECW画像形式に対応したカスタム・レンダラを実装します。この例は、実例を示すことのみを目的としており、表示したコードは、システム環境によっては最適でなかったり間違ったりしている可能性があるので注意してください。この実装ではECW Java SDKが使用され、ECW Java SDKでは付属のネイティブCライブラリが使用されます。MapViewerでネイティブな動的ライブラリを検索できるようにするには、MapViewerが含まれるインスタンスを起動する際に、コマンドライン・オプション-Djava.library.pathの使用が必要になる場合があります。

例C-1 ECW画像形式に対応したカスタム・イメージ・レンダラ

package com.my_corp.image;
import java.io.*;
import java.util.Random;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;

import oracle.sdovis.CustomImageRenderer;
import com.ermapper.ecw.JNCSFile; // from ECW Java SDK

public class ECWRenderer implements CustomImageRenderer
{
String tempDir = null;
Random random = null;

public ECWRenderer()
{
tempDir = System.getProperty("java.io.tmpdir");
random = new Random(System.currentTimeMillis());
}

public String  getSupportedFormat()
{
return "ECW";
}

public void   renderImages(Graphics2D g2, byte[][] images,
double[][] mbrs,
Rectangle2D dataWindow,
Rectangle2D deviceView,
AffineTransform at)
{
// Taking the easy way here; you should try to stitch the images
// together here.
for(int i=0; i<images.length; i++)
{
String tempFile = writeECWToFile(images[i]);
paintECWFile(tempFile, g2, mbrs[i], dataWindow, deviceView,at);
}
}

private String writeECWToFile(byte[] image)
{
long l = Math.abs(random.nextLong());
String file = tempDir + "ecw"+l+".ecw";
try{
FileOutputStream fos = new FileOutputStream(file);
fos.write(image);
fos.close();
return file;
}catch(Exception e)
{
System.err.println("cannot write ecw bytes to temp file: "+file);
return null;
}
}

private void  paintECWFile(String fileName, Graphics2D g,
double[] mbr,
Rectangle2D dataWindow,
Rectangle2D deviceView,
AffineTransform at)
{
JNCSFile ecwFile = null;
boolean bErrorOnOpen = false;
BufferedImage ecwImage = null;
String errorMessage = null;

try {
double dFileAspect, dWindowAspect;
double dWorldTLX, dWorldTLY, dWorldBRX, dWorldBRY;
int bandlist[];
int width = (int)deviceView.getWidth(),
height = (int)deviceView.getHeight();
int line, pRGBArray[] = null;

ecwFile = new JNCSFile(fileName, false);

// Work out the correct aspect for the setView call.
dFileAspect = (double)ecwFile.width/(double)ecwFile.height;
dWindowAspect = deviceView.getWidth()/deviceView.getHeight();

if (dFileAspect > dWindowAspect) {
height =(int)((double)width/dFileAspect);
} else {
width = (int)((double)height*dFileAspect);
}

// Create an image of the ecw file.
ecwImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
pRGBArray = new int[width];

// Set up the view parameters for the ecw file.
bandlist = new int[ecwFile.numBands];
for (int i=0; i< ecwFile.numBands; i++) {
bandlist[i] = i;
}
dWorldTLX = ecwFile.originX;
dWorldTLY = ecwFile.originY;
dWorldBRX = ecwFile.originX +
(double)(ecwFile.width-1)*ecwFile.cellIncrementX;
dWorldBRY = ecwFile.originY +
(double)(ecwFile.height-1)*ecwFile.cellIncrementY;

dWorldTLX = Math.max(dWorldTLX, dataWindow.getMinX());
dWorldTLY = Math.max(dWorldTLY, dataWindow.getMinY());
dWorldBRX = Math.min(dWorldBRX, dataWindow.getMaxX());
dWorldBRY = Math.min(dWorldBRY, dataWindow.getMaxY());

// Set the view.
ecwFile.setView(ecwFile.numBands, bandlist, dWorldTLX,
dWorldTLY, dWorldBRX, dWorldBRY, width, height);

// Read the scan lines.
for (line=0; line < height; line++) {
ecwFile.readLineRGBA(pRGBArray);
ecwImage.setRGB(0, line, width, 1, pRGBArray, 0, width);
}

} catch(Exception e) {
e.printStackTrace(System.err);
bErrorOnOpen = true;
errorMessage = e.getMessage();
g.drawString(errorMessage, 0, 50);
}

// Draw the image (unscaled) to the graphics context.
if (!bErrorOnOpen) {
g.drawImage(ecwImage, 0, 0, null);
}

}
}

D カスタム空間データ・プロバイダの作成および登録

この付録では、空間データ・プロバイダのサンプル実装を示し、このプロバイダをMapViewerで使用するための登録方法について説明します。完全な実装は、MapViewerのweb/demo/spatialproviderディレクトリにあります。実装では次のファイルが使用されます。

- us_bigcities.xml: プロバイダが解析するサンプルXMLファイル

- customSpatialProviderSample.java: 空間データ・プロバイダのJava実装

- spatialprovider.jar: ソース・ファイルcustomSpatialProviderSample.javaのコンパイル済バージョンを含むjarファイル

us_bigcities.xmlファイルには、データ属性、データ・エクステントおよび地物情報を定義するセクションがあり、ジオメトリ(GML形式)および属性値が含まれます。このファイルの内容は次のとおりです。

<?xml version="1.0" standalone="yes"?>
<spatial_data>

<data_attributes>
<attribute name="city" type="string" />
<attribute name="state_abrv" type="string" />
<attribute name="pop90" type="double" />
</data_attributes>

<data_extents>
<xmin> -122.49586 </xmin>
<ymin> 29.45765 </ymin>
<xmax> -73.943849 </xmax>
<ymax> 42.3831 </ymax>
</data_extents>

<geoFeature>
<attributes> New York,NY,7322564 </attributes>
<geometricProperty>
<Point>
<coordinates>-73.943849, 40.6698</coordinates>
</Point>
</geometricProperty>
</geoFeature>

. . .
</spatial_data>

この付録の主な項目は、次のとおりです。

- D.1項「空間プロバイダ・クラスの実装」

- D.2項「MapViewerへの空間プロバイダの登録」

- D.3項「外部空間データのレンダリング」

D.1 空間プロバイダ・クラスの実装

このプロバイダには、2.3.9項に示されているクラス・インタフェースを実装する必要があります。例D-1に、提供されているデモ内にある空間プロバイダのコードの抜粋を示します。このサンプル・コードは意図的に簡略化されており、最適化されたものではありません。このプロバイダではどのような空間索引メカニズムも作成されません。

例D-1 空間プロバイダ・クラスの実装

package spatialprovider.samples;

import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.File;
import java.util.ArrayList;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import oracle.mapviewer.share.Field;
import oracle.mapviewer.share.ext.SDataProvider;
import oracle.mapviewer.share.ext.SDataSet;
import oracle.mapviewer.share.ext.SObject;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import oracle.spatial.geometry.JGeometry;
import oracle.spatial.util.GML;

public class CustomSpatialProviderSample implements SDataProvider
{
...

/**
* Constructor.
*/
public CustomSpatialProviderSample()
{
...
}

/**
* Returns the initialization parameters for the provider.
* The "datadir" parameter should be registered on MapViewer
* configuration file and can be used to access the data.
* @return
*/
public String[] getInitParameterNames()
{
return new String[]{ "datadir" };
}

/**
* Returns runtime parameter names. Runtime parameters are additional parameters
* that the provider may use when retrieving the data objects.
* @return
*/
public String[] getRuntimeParameterNames()
{
return new String[]{ "filename" };
}

/**
* Initializes the provider
* @param params  init properties
* @return
*/
public boolean init(Properties params)
{
dataDirectory = null;
if(params == null)
return true;
dataDirectory = params.getProperty("datadir");
if(dataDirectory == null || dataDirectory.trim().length() == 0)
{
// try upper case
dataDirectory = params.getProperty("DATADIR");
if(dataDirectory == null || dataDirectory.trim().length() == 0)
System.out.println("FINE: Init properties does not define \"datadir\" parameter.");
}
return true;
}

/**
* Returns the data set (geometries plus attributes) that intersects the
* query window. In this sample the data is parsed just once and
* there is no spatial index for searching. The search is sequential.
* @param queryWin  search area
* @param nonSpatialColumns   attribute columns
* @param params      runtime properties
* @return
*/
public SDataSet buildDataSet(Rectangle2D queryWin,
String []nonSpatialColumns,
Properties params)
{
if(!dataParsed)
{
dataParsed = parseData(params);
if(!dataParsed)
return null;
}
if(geometries.size() == 0)
return null;

SDataSet dataset = new SDataSet();
boolean fullExtent = isFullExtent(queryWin);
if(fullExtent)
{
for(int i=0;i<geometries.size();i++)
{
JGeometry geom = (JGeometry)geometries.get(i);
SObject obj = new SObject(geom,getGeometryAttributes(nonSpatialColumns,i));
dataset.addObject(obj);      }
}
else
{
for(int i=0;i<geometries.size();i++)
{
JGeometry geom = (JGeometry)geometries.get(i);
double []mbr = geom.getMBR();
if(mbr == null)
continue;
Rectangle2D.Double rect = new Rectangle2D.Double(mbr[0],mbr[1],
mbr[2]-mbr[0],
mbr[3]-mbr[1]);
if(rect.getWidth() == 0. && rect.getHeight() == 0.)
{
Point2D.Double pt = new Point2D.Double(mbr[0],mbr[1]);
if(queryWin.contains(pt))
{
SObject obj = new SObject(geom,getGeometryAttributes(nonSpatialColumns,i));
dataset.addObject(obj);                    }
}
else if(queryWin.contains(rect) || queryWin.intersects(rect))
{
SObject obj = new SObject(geom,getGeometryAttributes(nonSpatialColumns,i));
dataset.addObject(obj);
}
}        }
if(dataset.getSize() == 0)
return null;
return dataset;
}

/**
* Returns the data provider attribute list.
* @return
*/
public Field[] getAttributeList(Properties params)
{
if(!dataParsed)
{
dataParsed = parseData(params);
if(!dataParsed)
return null;
}
if(attributes.size() == 0)
return null;

return (Field[])attributes.toArray(new Field[attributes.size()]);
}

/**
* Returns the data extents.
* @return
*/
public Rectangle2D getDataExtents(Properties params)
{
if(!dataParsed)
{
dataParsed = parseData(params);
if(!dataParsed)
return null;
}
if(extents == null || extents.length < 4)
return null;
else
return new Rectangle2D.Double(extents[0],extents[1],
extents[2]-extents[0],
extents[3]-extents[1]);
}

/**
* Builds a spatial index for the data. In this sample there is no
* spatial index. The data is loaded into memory when data is parsed.
* @return
*/
public boolean buildSpatialIndex(Properties params)
{
return true;
}

}

プロバイダのコードを実装したら、コードをコンパイルしてコンパイル済クラスを含むjarファイルを生成します。demoディレクトリのspatialprovider.jarファイルに、このサンプル・コードのコンパイル済バージョンが含まれているので、それを直接使用できます。このjarファイルをMapViewerのCLASSPATH定義に指定されているディレクトリ(web/WB-INF/libなど)にコピーします。

D.2 MapViewerへの空間プロバイダの登録

空間プロバイダをMapViewerに登録するには、MapViewer構成ファイルの空間プロバイダ・セクションに次の内容を追加してから、MapViewerを再起動します。

<s_data_provider
id="xmlProvider"
class="spatialprovider.samples.CustomSpatialProviderSample"
>
<parameters>
<parameter name="datadir" value="/temp/data" />
</parameters>
</s_data_provider>

MapViewerを再起動すると、空間プロバイダが登録されたことを示すコンソール・メッセージが表示されます。例:

2007-10-01 14:30:31.109 NOTIFICATION Spatial Provider xmlProvider has been registered.

D.3 外部空間データのレンダリング

MapViewerキット付属のサンプル外部空間データをレンダリングできるようにするには、このデータを指すデータソースを作成します。例D-2は、動的なカスタム・ジオメトリ・テーマを含むXMLリクエストです。

例D-2 外部空間データをレンダリングするマップ・リクエスト

<?xml version="1.0" standalone="yes"?>
<map_request
title="Custom Geometry Theme"
datasource="mvdemo"
width="500"
height="400"
bgcolor="#a6caf0"
antialiase="true"
format="PNG_STREAM"
>
<center size="40">
<geoFeature>
<geometricProperty typeName="center">
<Point>
<coordinates>-90,32</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>

<themes>
<theme name="custom_theme" >
<custom_geom_theme
provider_id="xmlProvider"
srid="8307"
render_style="M.CIRCLE"
label_column="city"
label_style="T.CITY NAME"
datasource="mvdemo">
<parameters>
<parameter name="filename" value="/lbs/demo/spatialprovider/us_bigcities.xml"/>
</parameters>
</custom_geom_theme>
</theme>
</themes>
</map_request>

例D-2で、<parameter>要素内のファイル名は/lbs/demo/spatialprovider/us_bigcities.xmlを指しています。このファイル・パスにMapViewerからアクセスできない場合、このマップ・リクエストはログ・ファイルに次のようなエラー・メッセージを生成します。

07/09/28 10:26:47 ParseData: Can not access file: /lbs/demo/spatialprovider/us_bigcities.xml
07/09/28 10:26:47 ParseData: File to be parsed: /temp/data\us_bigcities.xml
07/09/28 10:26:47 ParseData: File can not be accessed on provider data directory. Copy files there.

MapViewerではファイルを検索する際、まず元のテーマ定義のパラメータを使用してファイルにアクセスしようとします。それに失敗すると、MapViewer構成ファイルに定義されているdataディレクトリ(前述の例のエラー・メッセージでは/temp/data)を試行します。そのため、元のテーマ定義データのパスがMapViewerからアクセス不可能である場合、データファイルを構成ファイルに定義されているディレクトリにコピーしてから、マップ・リクエストを発行してください。

MapViewerでデータファイルを見つけられた場合、例D-2のマップ・リクエストでは図D-1に示すような画像が生成されます。

図D-1 カスタム・ジオメトリ・テーマおよび外部空間データを使用したマップ画像

E MapViewerでのOGC WMSのサポート

MapViewerでは、Open GIS Consortium (OGC)のWeb Map Service (WMS)プロトコル、特にWMS 1.1.1および1.3.0の実装仕様を使用した、配信データのレンダリングをサポートしています。MapViewerでは、OGCドキュメント01-068r3および06-042で定義されているように、GetMap、GetFeatureInfoおよびGetCapabilitiesリクエストがサポートされます。

現在のMapViewerではオプションのStyled Layer Descriptorの機能はサポートされていません。また、このリリースのMapViewerは、カスケード・マップ・サーバーとして機能しません。

この付録の主な項目は、次のとおりです。

- E.1項「MapViewer用のWMSインタフェースの設定」

- E.2項「WMS仕様および対応するMapViewerの概念」

- E.3項「WMSマップ・テーマの追加」

E.1 MapViewer用のWMSインタフェースの設定

MapViewerは、WMSサービスとして動作するように事前に設定されています。MapViewerは、内部では受信WMSリクエストをすべて、MapViewerサーバーへの適切なXMLリクエストに変換します。たとえば、次のHTTPリクエストは、MapViewerサーバーのGetCapabilitiesサービスを起動します。

http://localhost:8888/mapviewer/wms?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.1.1
or
http://localhost:8888/mapviewer/wms?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0

この例で示したように、MapViewer WMSサービスのURLは通常http://host:port/mapviewer/wms?です(hostおよびportは、MapViewerサーバーのホストおよびHTTPポートを指す)。コンテキスト・パス/mapviewer/wmsは、MapViewerのWMSインタフェースです。

注意:
すべてのWMSリクエストは1行で入力する必要があります。この付録でWMSリクエストの例が改行されているように見える場合でも、改行は無視してください。

E.1.1 必要なファイル

MapViewer WMSのサポートには、WMSFilter.jarファイルおよびclassgen.jarファイルが必要です。

- サーブレット・フィルタおよびその必須クラスは、WMSFilter.jarにパッケージされます。これは、$MAPVIEWER_HOME/web/WEB-INF/libディレクトリにあります。

- サーブレット・フィルタではclassgen.jarも必要です。これは、XML Developer's Kit (XDK) for Javaに含まれます。Oracle DatabaseまたはOracle Fusion Middlewareの完全インストールには、すでにこのファイルがあります。
システムにclassgen.jarファイルがない場合は、スタンドアロンのWebLogic Serverバージョンに付属しているものと同じXDK for Javaバージョンのclassgen.jarファイルを使用します。このファイルを$MAPVIEWER_HOME/web/WEB-INF/libディレクトリか、WebLogic Serverのライブラリ・パスに含まれるディレクトリに配置します。

classgen.jarおよびxmlparserv2.jarファイルは同じリリースのXDKのものである必要があります。これは、classgen.jarファイルがxmlparserv2.jarファイルに依存するためです。

E.1.2 wmsという名前のデータソース

各受信WMSリクエストでCGIパラメータdatasourceを明示的に指定していないかぎり、wmsという名前のMapViewerデータソースを定義する必要があります。datasourceパラメータを指定していないリクエストはすべて、デフォルトでwmsという名前のデータソースに渡されます。たとえば、GetCapabilitiesリクエストはデフォルトで、wmsデータソース内の利用可能なテーマをすべてリストします。(GetCapabilitiesリクエストから返される情報を構成するには、1.6.2.12項を参照してください。)

E.1.3 SDO SRIDからEPSG SRIDへのマッピング・ファイル

デフォルト時、MapViewerはOracle Spatial and Graph (SDO)ネイティブのSRID(空間参照ID)値を使用します(GetCapabilitiesのようなWMSリクエストでそのような情報が必要になった場合)。ただし、WMSアプリケーションでは、EPSG SRID値の方が広く使用されています。WMSリクエストを処理してレスポンスを生成する場合にEPSG SRID値をMapViewerで使用するには、マッピング・ファイルを指定します。このマッピング・ファイルは、テキスト・ファイルであり、SDO SRID値とEPSG SRID値の対応をMapViewerに教えます。(合致するSRID値の各ペアは、同一の空間参照システムを指します。)

マッピング・ファイルに含まれる行のそれぞれでは、対応するSRID値の各ペアが次の形式で定義されます。

sdo_srid=epsg_srid

たとえば、次の行では、SDO SRID 8307がEPSG SRID 4326と等価であり、SDO SRID 81922がEPSG SRID 20248と等価であることを定義しています。

8307=4326
81922=20248

SDOからEPSGへのマッピング・ファイルは、作成し終えたら、MapViewerが動作しているサーバーに保存できます。また、その場所は、1.6.2.12項で説明したように、<wms_config>要素内の<sdo_epsg_mapfile>要素を使用して、MapViewer構成ファイル内で指定できます。

E.2 WMS仕様および対応するMapViewerの概念

この項では、WMS 1.1.1および1.3.0仕様、またMapViewerで使用される用語および概念の対応付けや解釈について説明します。MapViewer固有であり、WMS 1.1.1および1.3.0仕様には含まれないパラメータについても説明しています。

E.2.1 サポートされるGetMapリクエストのパラメータ

この項では、MapViewerでサポートされるGetMapリクエストのパラメータおよびその解釈について説明します。(MapViewer固有でWMS 1.1.1および1.3.0仕様に含まれないパラメータについては、MapViewerのみと記載します。)サポートされるパラメータを、個別のサブ項目としてアルファベット順に紹介します。例E-1に、GetMapリクエストを示します。(各URLは一行で入力してください。)

例E-1 GetMapリクエスト

http://localhost:8888/mapviewer/wms?REQUEST=GetMap&VERSION=1.1.1&FORMAT=image/gif&
SERVICE=WMS&BBOX=-121,37,-119,35&SRS=EPSG:4326&LAYERS=theme_demo_states,theme_
demo_counties,theme_demo_highways,theme_demo_cities&WIDTH=580&HEIGHT=500

http://localhost:8888/mapviewer/wms?REQUEST=GetMap&VERSION=1.3.0&FORMAT=image/gif&
SERVICE=WMS&BBOX=-121,37,-119,35&CRS=EPSG:4326&LAYERS=theme_demo_states,theme_
demo_counties,theme_demo_highways,theme_demo_cities&WIDTH=580&HEIGHT=500

http://localhost:8888/mapviewer/wms?request=GetMap&version=1.3.0&crs=none
&bbox=-122,36,-121,37&width=600&height=400&format=image/png&layers=theme_us_
states&mvthemes=<themes><theme%20name="theme_us_counties"/><theme%20name="theme_
us_road1"/></themes>&legend_
request=<legend%20bgstyle="fill:%23ffffff;stroke:%23ff0000"%20profile="medium"%20p
osition="SOUTH_EAST"><column><entry%20style="v.rb1"%20tab="1"/></column></legend>&

GetMapリクエストのデフォルトのデータソースはWMSです。つまり、GetMapリクエストでDATASOURCEパラメータを指定しない場合、MapViewer管理リクエストの<add_data_source>要素(5.1.1項を参照)を使用して、WMSという名前のデータソースが事前に作成されているとみなされます。

現在のリリースのMapViewerでは、GetMapの次のオプション・パラメータはサポートされていません。

- TIME (時間ディメンション)

- ELEVATION (高度ディメンション)

- SLDおよびWFS URL

MapViewerのみのパラメータには、有効なXMLフラグメントを含める必要があります。これらはHTTP GETリクエストで提供されるため、URLエンコーディング・メカニズムを使用して正しくエンコードする必要があります。たとえば、各空白( )を%20に置き換え、各番号記号(#)を%23に置き換えます。次の例に、そのようなエンコーディングの使用例を示します。

http://localhost:8888/mapviewer/wms?request=GetMap&version=1.1.1&srs=none&bbox=-12
2,36,-121,37&width=600&height=400&format=image/png&layers=theme_us_
states&mvthemes=<themes><theme%20name="theme_us_counties"/><theme%20name="theme_
us_road1"/></themes>&legend_
request=<legend%20bgstyle="fill:%23ffffff;stroke:%23ff0000"%20profile="medium"%20p
osition="SOUTH_EAST"><column><entry%20style="v.rb1"%20tab="1"/></column></legend>&

E.2.1.1 BASEMAPパラメータ(MapViewerのみ)

BASEMAPパラメータでは、指定した(またはデフォルトの)データソースに対する名前付きベース・マップを指定します。BASEMAPパラメータとLAYERSパラメータの両方を指定すると、LAYERSパラメータで指定したすべてのテーマがベース・マップに追加されます。このため、名前付きベース・マップを使用してマップの取得のみ行う場合は、BASEMAPパラメータを指定しますが、次の例に示すように、空のLAYERSパラメータを指定します。

REQUEST=GetMap&VERSION=1.1.1&BASEMAP=demo_map&LAYERS=&WIDTH=500&HEIGHT=560&SRS=SDO:8307&BBOX=-122,36,-120,38.5&FORMAT=image/png

REQUEST=GetMap&VERSION=1.3.0&BASEMAP=demo_map&LAYERS=&WIDTH=500&HEIGHT=560&CRS=SDO:8307&BBOX=-122,36,-120,38.5&FORMAT=image/png

ベース・マップ名をLAYERSパラメータに含めることもできます。この場合、BASEMAPパラメータをURLで定義する必要はありません(詳細はE.2.1.9項「LAYERSパラメータ」を参照)。

E.2.1.2 BBOXパラメータ

BBOXパラメータでは、データソースのデータが表示される枠ボックスの左下および右上の座標を指定します。形式は、BBOX=minX,minY,maxX,maxYです。例: BBOX=-122,36,-120,38.5

E.2.1.3 BGCOLORパラメータ

BGCOLORパラメータでは、RBG色値を使用して、マップ表示のバックグラウンド・カラーを指定します。形式は、0xHHHHHH(各Hは0からFの16進の値)です。たとえば、BGCOLOR=0xF5F5DC(ベージュ)のようになります。

E.2.1.4 DATASOURCEパラメータ(MapViewerのみ)

DATASOURCEパラメータでは、GetMapリクエストまたはGetFeatureInfoリクエストのデータソース名を指定します。デフォルト値はWMSです。指定したデータソースは、GetMapリクエストまたはGetFeatureInfoリクエストの以前から存在している必要があります。つまり、<add_data_source> MapViewer管理リクエストを使用して作成されているか、またはMapViewer構成ファイル(mapViewerConfig.xml)で定義されている必要があります。

E.2.1.5 DYNAMIC_STYLESパラメータ(MapViewerのみ)

DYNAMIC_STYLESパラメータでは、GetMapリクエストに含まれる<styles>要素を指定します。<styles>要素の詳細は、3.1.2.19項を参照してください。

E.2.1.6 EXCEPTIONSパラメータ

EXCEPTIONSパラメータでサポートされる値はデフォルトのみであり、WMS1.1.0ではEXCEPTIONS=application/vnd.ogc.se_xml、またWMS1.3.0ではEXCEPTIONS=XMLです。例外は、次のURLで入手可能なサービス例外DTDに準拠したXML文書としてレポートされます。

http://schemas.opengis.net/wms/1.1.1/WMS_exception_1_1_1.dtd

http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd

application/vnd.ogc.se_inimage (Exceptionメッセージで上書きされた画像)およびapplication/vnd.ogc.se_blank(例外が発生したためのブランク画像)オプションはサポートされません。

E.2.1.7 FORMATパラメータ

FORMATパラメータでは、画像形式を指定します。サポートされる値は、image/gif、image/jpeg、image/png、image/png8およびimage/svg+xmlです。

デフォルト値はimage/pngです。

E.2.1.8 HEIGHTパラメータ

HEIGHTパラメータでは、表示されたマップの高さをピクセル単位で指定します。

E.2.1.9 LAYERSパラメータ

LAYERSパラメータでは、表示に使用する事前定義済テーマ名をカンマ区切りリストで指定します。指定された値は、デフォルトのデータソース(WMS)またはパラメータDATASOURCE=<name>で指定した名前付きデータソース内にある、大/小文字が区別され、順序に意味があり、カンマで区切られている事前定義済テーマ名のリストとみなされます。たとえば、LAYERS=THEME_DEMO_STATES,theme_demo_counties,THEME_demo_HIGHWAYSは、MapViewerのマップ・リクエスト内の次の<themes>要素に変換されます。

<themes>
<theme name="THEME_DEMO_STATES"/>
<theme name="theme_demo_counties"/>
<theme name="THEME_demo_HIGHWAYS"/>
</themes>

ベース・マップ名をLAYERSリストに含めることもできます。次の例は、DEMO_MAPというベース・マップから画像を取得します。

http://localhost:7001/mapviewer/wms?VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&BBOX=-101.19489559164734,27.0,-78.80510440835268,37.0&WIDTH=965&HEIGHT=431&FORMAT=image/gif&BGCOLOR=0xA6CAF0&TRANSPARENT=TRUE&LAYERS=DEMO_MAP&STYLES=&EXCEPTIONS=application/vnd.ogc.se_xml&datasource=mvdemo

E.2.1.1項「BASEMAPパラメータ(MapViewerのみ)」も参照してください。

E.2.1.10 LEGEND_REQUESTパラメータ(MapViewerのみ)

LEGEND_REQUESTパラメータでは、GetMapリクエストの一部として<legend>要素を指定します。<legend>要素の詳細は、3.1.2.11項を参照してください。

E.2.1.11 MVTHEMESパラメータ(MapViewerのみ)

MVTHEMESパラメータは、GetMapリクエストの一部として<themes>要素を指定します。<themes>要素の詳細は、3.1.2.21項を参照してください。MVTHEMESパラメータは、主にMapViewerリクエストでJDBCテーマをサポートするために使用します。MVTHEMESパラメータは、LAYERSパラメータの代替またはシノニムではありません。LAYERSパラメータも指定する必要があります。

E.2.1.12 REQUESTパラメータ

REQUESTパラメータでは、リクエスト・タイプを指定します。値はGetMap、GetFeatureInfoまたはGetCapabilitiesである必要があります。

E.2.1.13 SERVICEパラメータ

SERVICEパラメータでは、サービス名を指定します。値はWMSである必要があります。

E.2.1.14 SRS (1.1.1)パラメータまたはCRS (1.3.0)パラメータ

SRSパラメータ(WMS 1.1.1)またはCRSパラメータ(WMS 1.3.0)では、MapViewerが使用する空間参照システム(座標系)を指定します。値は、SDO:srid-value (srid-valueは数値でのOracle Spatial and GraphのSRID値)、EPSG:4326 (SDO:8307に相当)またはnone (SDO:0に相当)のいずれかである必要があります。

EPSG:4326(標準のWGS 84経度/緯度座標系)を除き、EPSG数値識別子はサポートされません。任意の投影中心を持つ投影のための名前空間AUTO (WMS 1.1.1)またはAUTO2 (WMS 1.3.0)はサポートされません。

E.2.1.15 STYLESパラメータ

STYLESパラメータは無視されます。かわりに、LAYERSパラメータを使用して、表示用の事前定義済テーマを指定します。

E.2.1.16 TRANSPARENTパラメータ

TRANSPARENT=TRUEパラメータ(透明画像用)は、PNG画像でサポートされています。つまり、索引付き(8ビット)のPNG形式に対して、FORMAT=image/pngまたはFORMAT=image/png8でサポートされています。MapViewerでは透明GIF (GIF89)画像はサポートされません。

E.2.1.17 VERSIONパラメータ

VERSIONパラメータでは、WMSバージョン番号を指定します。値は1.1.1または1.3.0である必要があります。

E.2.1.18 WIDTHパラメータ

WIDTHパラメータでは、表示されるマップの幅をピクセル単位で指定します。

E.2.2 サポートされるGetCapabilitiesリクエストおよびレスポンス機能

MapViewerへのWMS GetCapabilitiesリクエストでは、次のパラメータのみを指定します。

- REQUEST=GetCapabilities

- VERSION=1.1.1またはVERSION=1.3.0

- SERVICE=WMS

次に例を示します。

http://localhost:8888/mapviewer/wms?REQUEST=GetCapabilities&VERSION=1.1.1&SERVICE=WMS
or
http://localhost:8888/mapviewer/wms?REQUEST=GetCapabilities&VERSION=1.3.0&SERVICE=WMS

レスポンスは、VERSIONパラメータ(1.1.1または1.3.0)値に応じて、次の場所で入手可能なWMS機能DTDに準拠したXML文書です。

http://schemas.opengis.net/wms/1.1.1/WMS_MS_Capabilities.dtd

http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd

ただし、現在のリリースのMapViewerでは、次の情報を持つ<Service>要素および<Capability>要素を含むXML文書が返されます。

- <Service>要素はほとんど空です。<Service.Name>要素にOGC:WMSの必須値のみが含まれます。MapViewerの今後のリリースでは、より多くの情報を持つサービス・メタデータがサポートされる予定です。

- <Capability>要素には、<Request>要素、<Exception>要素および<Layer>要素があります。

- <Request>要素には、HTTP GET操作またはPOST操作でサポートされる形式およびURLを記述するGetCapabilities要素およびGetMap要素が含まれます。

- <Exception>要素は例外の書式を定義します。このリリースでは、サービス例外XMLの書式のみがサポートされます。<Exception>要素はサービス例外DTDに準拠したXML文書を返しますが、実装仕様で指定されている例外はレポートしません。現在のリリースでは、単に<ServiceException>要素のCDATAセクションを使用して、MapViewerサーバーにより返されたOMSExceptionを返します。

- <Layer>要素には、ネストされた一連の<Layer>要素が含まれます。最初の(一番外側の)層(layer)には、名前(WMS)、タイトル(Oracle WebMapServer Layers by data source)および定義済データソースごとに1つの<Layer>要素が含まれます。各データソース層には、各定義済ベース・マップに対する<Layer>要素と、どのベース・マップにもリストされていない有効なテーマ(層)ごとに1つのエントリが含まれます。各ベース・マップ層には、ベース・マップ内の事前定義テーマごとに<Layer>要素が含まれます。
USER_SDO_THEMESビューで定義され、実表およびジオメトリ列のUSER_SDO_GEOM_METADATAビューに有効なエントリを持ち、どのベース・マップでも使用されていないテーマが、データソースのベース・マップの後にリストされます。これらのテーマには<ScaleHint>要素はありません。これらには独自の<LatLonBoundingBox>要素および<BoundingBox>要素があります。

WMS実装仕様のとおり、レスポンスのコンテンツ・タイプはapplication/vnd.ogc.wms_xmlに設定します。

層のリストはベース・マップによる出力なので、特定の層またはテーマがGetCapabilitiesレスポンスに何度も出現することがあります。たとえば、テーマTHEME_DEMO_STATESはDEMO_MAPおよびDENSITY_MAPという名前のベース・マップの一部ですが、例E-2では2回出現します。例E-2は、GetCapabilitiesレスポンスの抜粋です(読みやすいようにリフォーマットされています)。

例E-2 GetCapabilitiesレスポンス(抜粋)

<Title>Oracle WebMapServer Layers by data source</Title>
<Layer>
<Name>mvdemo</Name>
<Title>Datasource mvdemo</Title>
<Layer>
<Name>DEMO_MAP</Name>
<Title>Basemap DEMO_MAP</Title>
<SRS>SDO:8307</SRS>
<LatLonBoundingBox>-180,-90,180,90</LatLonBoundingBox>
. . .
<Layer>
<Name>DENSITY_MAP</Name>
<Title>Basemap DENSITY_MAP</Title>
<SRS>SDO:8307</SRS>
<LatLonBoundingBox>-180,-90,180,90</LatLonBoundingBox>
<Layer>
<Name>THEME_DEMO_STATES</Name>
<Title>THEME_DEMO_STATES</Title>
<SRS>SDO:8307</SRS>
<BoundingBox SRS="SDO:8307" minx="-180" miny="-90" maxx="180"
maxy="90" resx="0.5" resy="0.5"/>
<ScaleHint min="50.0" max="4.0"/>
</Layer>
. . .
</Layer>
<Layer>
<Name>IMAGE_MAP</Name>
<Title>Basemap IMAGE_MAP</Title>
<SRS>SDO:41052</SRS>
<LatLonBoundingBox>-180,-90,180,90</ LatLonBoundingBox>
<Layer>
<Name>IMAGE_LEVEL_2</Name>
<Title>IMAGE_LEVEL_2</Title>
<SRS>SDO:41052</SRS>
<BoundingBox SRS="SDO:41052" minx="200000" miny="500000" maxx="750000"
maxy="950000" resx="0.5" resy="0.5"/>
<ScaleHint min="1000.0" max="0.0"/>
</Layer>
. . .
</Layer>

例E-2では、最も内側の層がIMAGE_LEVEL_2テーマを記述しています。<ScaleHint>要素は、ベース・マップ定義におけるテーマのmin_scale値およびmax_scale値(存在する場合)をリストします。たとえば、IMAGE_MAPのベース・マップ定義は次のとおりです。

SQL> select definition from user_sdo_maps where name='IMAGE_MAP';

DEFINITION
------------------------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<map_definition>
<theme name="IMAGE_LEVEL_2" min_scale="1000.0" max_scale="0.0"/>
<theme name="IMAGE_LEVEL_8" min_scale="5000.0" max_scale="1000.0"/>
<theme name="MA_ROAD3"/>
<theme name="MA_ROAD2"/>
<theme name="MA_ROAD1"/>
<theme name="MA_ROAD0"/>
</map_definition>

最も内側の層では、<SRS>要素および<BoundingBox>要素は、次のSpatial and Graphメタデータ問合せに示すように、そのテーマの実表のSRIDおよびDIMINFO情報を識別します。

SQL> select srid, diminfo from user_sdo_geom_metadata, user_sdo_themes
2  where name='IMAGE_LEVEL_2' and
3  base_table=table_name and
4  geometry_column=column_name ;

SRID
----------
DIMINFO(SDO_DIMNAME, SDO_LB, SDO_UB, SDO_TOLERANCE)
--------------------------------------------------------------------------------
41052
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 200000, 500000, .5), SDO_DIM_ELEMENT('Y', 750
000, 950000, .5))

例E-2では、ベース・マップの<Layer>要素には、<SRS>要素および<LatLonBoundingBox>要素があります。ベース・マップ定義のすべての層がUSER_SDO_GEOM_METADATAビューで指定された同一のSRID値を持たない場合、<SRS>要素は空になります。すべての層が同一のSRID値(たとえば、41052)を持つ場合は、SRS要素にその値(たとえば、SDO:41052)が指定されます。必須の<LatLonBoundingBox>要素には、現在、デフォルト値(-180,-90,180,90)が入っています。MapViewerでこの機能がサポートされている場合、実際にはこの要素はその層のUSER_SDO_GEOM_METADATAビューのDIMINFO列で指定された境界となり、必要に応じ、可能であれば測地座標に変換されます。

現在、すべてのレイヤーは不透明かつ問合せ可能とみなされます。つまり、すべてのレイヤーはGeoRaster、論理ネットワークまたは画像レイヤーではなく、ベクトル・レイヤーとみなされます。

E.2.3 サポートされるGetFeatureInfoリクエストおよびレスポンス機能

この項では、MapViewerでサポートされるGetFeatureInfoリクエストのパラメータおよびその解釈について説明します。例E-3に、GetFeatureInfoリクエストを示します。

例E-3 GetFeatureInfoリクエスト

http://localhost:8888/mapviewer/wms?REQUEST=GetFeatureInfo&VERSION=1.1.1&BBOX=0,-0
.0020,0.0040&SRS=EPSG:4326&LAYERS=cite:Lakes,cite:Forests&WIDTH=200&HEIGHT=100&INF
O_FORMAT=text/xml&QUERY_LAYERS=cite:Lakes,cite:Forests&X=60&Y=60

http://localhost:8888/mapviewer/wms?REQUEST=GetFeatureInfo&VERSION=1.3.0
&BBOX=0,-0.0020,0.0040&CRS=EPSG:4326&LAYERS=cite:Lakes,cite:Forests&WIDTH=200&HEIGHT=100
&INFO_FORMAT=text/xml&QUERY_LAYERS=cite:Lakes,cite:Forests&I=60&J=60

レスポンスはXML文書であり、レスポンスのコンテンツ・タイプはtext/xmlです。例E-4は、例E-3のGetFeatureInfoリクエストに対するレスポンスです。

例E-4 GetFeatureInfoレスポンス

<?xml version="1.0" encoding="UTF-8" ?>
<GetFeatureInfo_Result>
<ROWSET name="cite:Lakes">
<ROW num="1">
<ROWID>AAAK22AAGAAACUiAAA</ROWID>
</ROW>
</ROWSET>
<ROWSET name="cite:Forests">
<ROW num="1">
<FEATUREID>109</FEATUREID>
</ROW>
</ROWSET>
</GetFeatureInfo_Result>

次の項では、主にGetFeatureInfoリクエストでサポートされるパラメータについて説明します。(MapViewer固有でWMS 1.1.1仕様に含まれないパラメータについては、MapViewerのみと記載します。)E.2.3.10項では、GetFeatureInfoリクエストの属性の問合せ方法について説明します。

E.2.3.1 GetFeatureInfoリクエストのGetMapパラメータ・サブセット

GetFeatureInfoリクエストには、GetMapリクエスト(BBOXパラメータ、SRS (1.1.1)またはCRS (1.3.0)パラメータ、WIDTHパラメータ、HEIGHTパラメータおよびオプションのLAYERSパラメータ)のサブセットが含まれます。これらのパラメータは、画面座標のX、Y (1.1.1)またはI、J (1.3.0)ポイントを、問合せ中の層の座標系のポイントに変換するために使用します。すべての層の座標系は、SRSパラメータで指定された同一の座標系であるとみなされます。

E.2.3.2 EXCEPTIONSパラメータ

EXCEPTIONSパラメータでサポートされる値は、デフォルトのapplication/vnd.ogc.se_xml (WMS 1.1.1)または xml (WMS 1.3.0)のみです。つまり、サービス例外XMLのみがサポートされます。例外は、バージョン(1.1.1または1.3.0)に応じて、次の場所で入手可能なサービス例外DTDに準拠したXML文書としてレポートされます。

http://schemas.opengis.net/wms/1.1.1/WMS_exception_1_1_1.dtd

http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd

E.2.3.3 FEATURE_COUNTパラメータ

FEATURE_COUNTパラメータでは、結果セット内の地物の最大数を指定します。デフォルト値は1です。パラメータの値より多くの地物が問合せポイント(X, Y)と相互作用する場合、地物の適当なサブセット(パラメータ値のサイズ)が結果セットで返されます。つまり、GetFeatureInfoコールが次のような一般的な書式の問合せに変換します。

SELECT <info_columns> FROM <layer_table>
WHERE SDO_RELATE(<geom_column>,
<query_point>, 'mask=ANYINTERACT')='TRUE'
AND ROWNUM <= FEATURE_COUNT;

E.2.3.4 INFO_FORMATパラメータ

INFO_FORMATパラメータの値は、常にtext/xmlです。

E.2.3.5 QUERY_LAYERSパラメータ

QUERY_LAYERSパラメータでは、問い合せる層のカンマ区切りリストを指定します。LAYERSパラメータが指定されている場合、QUERY_LAYERSの指定はLAYERSパラメータで指定されたリストのサブセットである必要があります。

QUERY_LAYERSパラメータが指定されている場合、すべてのBASEMAPパラメータ値が無視されます。

E.2.3.6 QUERY_TYPEパラメータ(MapViewerのみ)

QUERY_TYPEパラメータは、次のいずれかの値を指定することにより、結果セットを、必要条件を満たすことのできる地物のサブセットに制限します。

- at_point: 指定されたポイントの地物のみ返します。

- nn: 最も近い近隣の地物のみ返します。結果数は、FEATURE_COUNTパラメータ値(E.2.3.3項を参照)により異なります。結果セットは、距離順に並べ替えられません。

- within_radius(またはシノニムであるwithin_distance): RADIUSパラメータ(E.2.3.7項を参照)の値によって指定された距離内にある結果を、FEATURE_COUNTパラメータ(E.2.3.3項を参照)の値に合致する数まで返します。結果セットは、指定された半径内にあると思われる地物の回答セットの任意のサブセットです。結果セットは、距離順に並べ替えられません。

E.2.3.7 RADIUSパラメータ(MapViewerのみ)

RADIUSパラメータでは、QUERY_TYPEパラメータ値がwithin_radius(E.2.3.6項を参照)である、円形の問合せ用検索領域の半径を指定します。RADIUSパラメータを指定する場合は、UNITパラメータ(E.2.3.8項を参照)も指定する必要があります。

E.2.3.8 UNITパラメータ(MapViewerのみ)

UNITパラメータでは、QUERY_TYPEパラメータ値がwithin_radius(E.2.3.6項を参照)である、円形の問合せ用検索領域の半径の測定単位を指定します。値は、SDO_UNITS_OF_MEASURE表のSHORT_NAME列の有効な長さの単位値(meter、kmmileなど)である必要があります。

UNITパラメータを指定する場合は、RADIUSパラメータ(E.2.3.7項を参照)も指定する必要があります。

E.2.3.9 XパラメータおよびYパラメータ、またはIパラメータおよびJパラメータ

XパラメータおよびYパラメータ(WMS 1.1.1)、IパラメータおよびJパラメータ(WMS 1.3.0)では、それぞれ問い合せポイントのX軸およびY軸座標系(ピクセル単位)を指定します。

E.2.3.10 GetFeatureInfoリクエストに対して検索される属性の指定

GetFeatureInfoリクエストでは、問合せ可能な各層(テーマ)のスタイリング・ルールに、問合せ対象であり、XMLレスポンスで返される属性を指定する<hidden_info>要素を含める必要があります。<hidden_info>要素は、SVGマップ・リクエストで返される属性の決定に使用される要素と同じです。

そのようなスタイリング・ルールの例を次に示します。

SQL> select styling_rules from user_sdo_themes where name='cite:Forests';

STYLING_RULES
--------------------------------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<styling_rules>
<hidden_info>
<field column="FID" name="FeatureId"/>
</hidden_info>
<rule>
<features style="C.PARK FOREST">  </features>
<label column="NAME" style="T.PARK NAME"> 1 </label>
</rule>
</styling_rules>

このスタイリング・ルールでは、cite:ForestsがGetFeatureInfoリクエストのQUERY_LAYERSパラメータ値の1つである場合、FIDという名前の列を検索し、レスポンス・ドキュメントでのタグが<FEATUREID>となることを指定しています。タグは常に大文字です。テーマの問合せ層のスタイリング・ルールで<hidden_info>要素が指定されていない場合は、ROWIDが返されます。例E-4では、cite:Lakes層のスタイリング・ルールに<hidden_info>要素がないため、XMLレスポンスではデフォルト属性ROWIDが返されます。ただし、cite:Forests層には<hidden_info>要素があります。この要素は属性列がFIDであること、レスポンス文書でのそのタグの名前が<FEATUREID>であることを指定しています。

E.3 WMSマップ・テーマの追加

WMSマップ・テーマを現行マップ・リクエストに追加できます。WMSマップ・テーマは、GetMapリクエストの結果であり、MapViewerでレンダリングされた一連の層(テーマ)では画像層となります。

WMSマップ・テーマを追加するには、XML API(E.3.1項を参照)またはJavaBeanベースAPI(E.3.4項を参照)のいずれかのWMS固有の機能を使用します。

E.3.1 WMSマップ・テーマを追加するためのXML API

MapViewer XML APIを使用して、WMSマップ・テーマを現行マップ・リクエストに追加するには、<theme>要素内で<wms_getmap_request>要素を使用します。

パフォーマンスを向上させるため、<wms_getmap_request>要素は、Web Map Server (WMS)実装からのmap画像のリクエストにのみ使用する必要があります。つまり、<wms_getmap_request>要素内の<service_url>要素では、MapViewerインスタンスではなく、WMS実装を指定する必要があります。MapViewerインスタンスを指定する場合(http://mapviewer.mycorp.com:8888/mapviewer/wmsの値で<service_url>を指定する場合など)は、<wms_getmap_request>要素を使用するかわりに、<themes>要素でMapViewerの事前定義済テーマまたはJDBCテーマの使用を検討してください。

次の例では、<theme>要素内の<wms_getmap_request>要素の一般的な書式を、サンプル要素の値および説明コメントとともに示します。

<themes>
<theme>
<wms_getmap_request isBackgroundTheme="true">
<!-- The wms_getmap_request theme is rendered in the order it
appears in the theme list unless isBackgroundTheme is "true".
-->
<service_url> http://wms.mapsrus.com/mapserver </service_url>
<version> 1.1.1 </version>
<!-- version is optional. Default value is "1.1.1".
-->
<layers> Administrative+Boundaries,Topography,Hydrography </layers>
<!— layers is a comma-delimited list of names.
If layer names contain spaces, use '+' instead of a space -->
<!— styles is optional. It is a comma-delimited list, and it must
have the same number of  names as the layer list, if specified.
If style names contain spaces, use '+' instead of a space -->
<styles/>
<srs> EPSG:4326 </srs>
<format> image/png </format>
<transparent> true </transparent>
<bgcolor> 0xffffff </bgcolor>
<exceptions> application/vnd.ogc.se_inimage </exceptions>
<vendor_specific_parameters>
<!-- one or more <vsp> elements each containing
a <name> <value> pair  -->
<vsp>
<name> datasource </name>
<value> mvdemo </value>
</vsp>
<vendor_specific_parameters>
<wms_getmap_request>
</theme>
</themes>

<wms_getmap_request>要素では、次の属性および要素を使用できます。

- isBackgroundTheme属性: ベクター層の前にこのテーマをレンダリングするかどうかを指定します。デフォルト値はfalseです。

- <service_url>要素: WMSサービスのURL(サービス・パラメータなし)を指定します。例: http://my.webmapserver.com/wms

- <version>要素: WMSバージョン番号を指定します。値は、1.0.0、1.1.0、1.1.1(デフォルト)、1.3.0のいずれかである必要があります。

- <layers>要素: マップ・リクエストに含まれる層名のカンマ区切りリストを指定します。

- <styles>要素: layersの層名に適用するスタイル名のカンマ区切りリストを指定します。

- <srs>要素: 座標系(空間参照システム)の名前を指定します。デフォルト値はEPSG:4326です。

- <format>要素: 結果のマップ画像の形式を指定します。デフォルト値はimage/pngです。

- <transparent>要素: 追加する層(1つまたは複数)を結果のマップ画像で透明にするかどうかを指定します。デフォルト値はfalseです。層を透明にする場合は、trueを指定します。

- <bgcolor>要素: マップのバックグラウンド・カラーのRGB値を指定します。値には、0xAE75B1などの16進法を使用します。デフォルト値は0xFFFFFF(白)です。

- <exceptions>要素: サーバー例外の書式を指定します。デフォルト値はapplication/vnd.ogc.se_inimageです。

- <vendor_specific_parameters>要素には1つ以上の<vsp>要素が含まれ、それぞれの要素には、パラメータ名を指定する<name>要素と、パラメータ値を指定する<value>要素が含まれます。

例E-5は、マップ・リクエストの<wms_getmap_request>要素を示しています。

例E-5 WMSマップ・テーマの追加(XML API)

<?xml version="1.0" standalone="yes"?>
<map_request
title="Raster WMS Theme and Vector Data"
datasource="mvdemo" srid="0"
width="500"
height="375"
bgcolor="#a6caf0"
antialiase="true"
mapfilename="wms_georaster" format="PNG_URL">
<center size="185340.0">
<geoFeature>
<geometricProperty typeName="center">
<Point>
<coordinates>596082.0,8881079.0</coordinates>
</Point>
</geometricProperty>
</geoFeature>
</center>
<themes>
<theme name="WMS_TOPOGRAPHY" user_clickable="false"  >
<wms_getmap_request isBackgroundTheme="true">
<service_url> http://wms.mapservers.com:8888/mapserver/wms </service_url>
<layers> TOPOGRAPHY </layers>
<srs> EPSG:29190 </srs>
<format> image/png </format>
<bgcolor> 0xa6caf0 </bgcolor>
<transparent> true </transparent>
<vendor_specific_parameters>
<vsp>
<name> ServiceType </name>
<value> mapserver </value>
</vsp>
</vendor_specific_parameters>
</wms_getmap_request>
</theme>
<theme name="cl_theme" user_clickable="false">
<jdbc_query  spatial_column="geom" render_style="ltblue"
jdbc_srid="82279" datasource="mvdemo"
asis="false">select geom from classes where vegetation_type = 'forests'
</jdbc_query>
</theme>
</themes>
<styles>
<style name="ltblue">
<svg width="1in" height="1in">
<g class="color"
style="stroke:#000000;stroke-opacity:250;fill:#33ffff;fill-opacity:100">
<rect width="50" height="50"/>
</g>
</svg>
</style>
</styles>
</map_request>

E.3.2 事前定義済WMSマップ・テーマ定義

WMSテーマの事前定義済のXML定義は、E.3.1項と同じパラメータ構造を使用し、オプションのcapabilities_url属性を追加します。これは、WMSテーマの編集時にMap Builderによって使用されます。capabilities_url属性が定義されている場合、Map BuilderはGetCapabilitiesリクエストを発行して、エディタ・ページにいくつかのUI要素を移入します。

例E-6は、メタデータで事前定義済のWMSテーマを作成する方法を示します。実表名および列名には任意の値を使用できます。この例では、どちらにも'WMS'が使用されます。

例E-6 事前定義されたWMSテーマの作成

INSERT INTO user_sdo_themes  VALUES (
'PRED_WMS_THEME',
'WMS data',
'WMS',
'WMS',   '<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wms">
<service_url> http://sampleserver1b.arcgisonline.com/arcgis/services/Specialty/ESRI_StateCityHighway_USA/MapServer/WMSServer </service_url>
<layers> 0,1,2 </layers>
<version> 1.3.0 </version>
<srs> CRS:84 </srs>
<format> image/png </format>
<bgcolor> 0xA6CAF0 </bgcolor>
<transparent> false </transparent>
<styles> +,+,+ </styles>
<exceptions> xml </exceptions>
<capabilities_url> http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StateCityHighway_USA/MapServer/WMSServer? </capabilities_url>
</styling_rules>');

E.3.3 WMSマップ・テーマによる認証

WMSデータへのアクセスに認証を必要とするWMSサーバーの場合、テーマ定義に次のものを含める必要があります。

- <user>要素: ユーザー名を指定

- <password>要素: ユーザー・パスワードを指定
Map Builderツールを使用してWMSマップ・テーマを作成する場合、パスワード値は自動的に暗号化されます。図E-1は、Map Builderツールを使用した、認証情報でのWMSテーマの作成を示しています。この図では、認証オプションが選択され(有効化され)、ユーザーとパスワードが指定されています。

図E-1 Map Builderを使用したWMSテーマでの認証の指定

例E-7は、認証情報を含むWMSテーマの作成方法を示しています。

例E-7 指定した認証を持つWMSテーマ

<?xml version="1.0" standalone="yes"?>
<styling_rules theme_type="wms">
<service_url> http://localhost:7001/mapviewer/wms </service_url>
<user> wmsuser </user>
<password> ******* </password>
<layers> THEME_DEMO_STATES </layers>
<version> 1.1.1 </version>
<srs> EPSG:4326 </srs>
<format> image/png </format>
<bgcolor> 0xA6CAF0 </bgcolor>
<transparent> true </transparent>
<exceptions> application/vnd.ogc.se_xml </exceptions>
<vendor_specific_parameters>
<vsp>
<name> datasource </name>
<value> mvdemo </value>
</vsp>
</vendor_specific_parameters>
<capabilities_url> http://localhost:7001/mapviewer/wms? </capabilities_url>
</styling_rules>

E.3.4 WMSマップ・テーマを追加するためのJavaBeanベースAPI

MapViewer JavaBeanベースAPIを使用して、WMSマップ・テーマを現行マップ・リクエストに追加するには、addWMSMapThemeメソッドを使用します。

このメソッドは、Web Map Server (WMS)実装からmap画像をリクエストする場合にのみ使用する必要があります。つまり、serviceURLパラメータでは、MapViewerインスタンスではなく、WMS実装を指定する必要があります。

addWMSMapThemeメソッドの書式は、次のとおりです。

addWMSMapTheme(String name, String serviceURL, String isBackgroundTheme,
String version, String[] layers, String[] styles,
String srs, String format, String transparent,
String bgcolor, String exceptions,
Object[] vendor_specific_parameters
);

nameパラメータでは、テーマ名を指定します。

serviceURLパラメータでは、WMSサービスのURL(サービス・パラメータなし)を指定します。例: http://my.webmapserver.com/wms

isBackgroundThemeパラメータでは、該当するテーマをベクター層の前にレンダリングするかどうかを指定します。デフォルト値はfalseです。

versionパラメータでは、WMSバージョン番号を指定します。値は、1.0.0、1.1.0または1.1.1(デフォルト)のいずれかである必要があります。

layersパラメータでは、マップ・リクエストに含まれる層名のカンマ区切りリストを指定します。

stylesパラメータでは、layersの層名に適用するスタイル名のカンマ区切りリストを指定します。

srsパラメータでは、座標系(空間参照システム)の名前を指定します。デフォルト値はEPSG:4326です。

formatパラメータでは、結果のマップ画像の形式を指定します。デフォルト値はimage/pngです。

transparentパラメータでは、追加する層(1つまたは複数)を結果のマップ画像で透明にするかどうかを指定します。デフォルト値はfalseです。層を透明にする場合は、trueを指定します。

bgcolorパラメータでは、マップのバックグラウンド・カラーのRGB値を指定します。値には、0xAE75B1などの16進法を使用します。デフォルト値は0xFFFFFF(白)です。

exceptionsパラメータでは、サーバー例外の書式を指定します。デフォルト値はapplication/vnd.ogc.se_inimageです。

vendor_specific_parametersパラメータでは、ベンダー固有のパラメータのリストを指定します。オブジェクト配列の各要素は、2つの文字列(パラメータ名および値)を持つString配列です。例: vsp = new Object[]{new String[]{"DATASOURCE", "mvdemo"}, //param 1 new String[]{"antialiasing", "true"} //param 2

E.3.5 GetCapabilitiesレスポンスのカスタマイズ:追加オプション

MapViewerのメイン構成ファイルには、GetCapabilitiesレスポンスの一部の情報をカスタマイズするセクションがあります(1.6.2.12項「WMS GetCapabilitiesレスポンスのカスタマイズ」を参照)。ただし、このMapViewerのメイン構成ファイルで定義できるプロパティの数は限られており、またGetCapabilitiesレスポンスに含まれる層のいくつかの属性はカスタマイズできません。

リリース12.1.3から、MapViewerにWMS構成ファイル(wmsConfig.xml)が追加されました。このWMS構成ファイルに定義された設定は、MapViewerのメイン構成ファイルで定義された類似のWMS設定をオーバーライドします。

wmsConfig.xmlには、次の要素を含めることができます。

- <custom_parameter> (E.3.5.1項を参照)

- <service_attributes> (E.3.5.2項を参照)

- <layer_attributes> (E.3.5.3項を参照)

- <get_feature_info> (E.3.5.4項を参照)

E.3.5.1 カスタムWMS Capabilitiesパラメータ(<custom_parameters>要素)

<custom_parameters>要素では、次の属性を使用できます。

- host属性では、該当するMapViewerサーバーに発行される今後のWMSリクエストでクライアントが使用するサービス・リクエストURLのホスト部を指定します。

- port属性では、該当するMapViewerサーバーに発行される今後のWMSリクエストでクライアントが使用するサービス・リクエストURLのポート部を指定します。

- protocol属性では、該当するMapViewerサーバーに発行される今後のWMSリクエストでクライアントが使用するサービス・リクエストURLのプロトコル部を指定します。

- default_datasource属性は、Capabilitiesのレスポンスの取得に使用されるベース・データソースを指定します。この属性が定義されていない場合、データソースWMSが使用され、そのデータソースがこのMapViewerサーバーに存在する必要があります。

- public_datasources属性には、getCapabilitiesレスポンスにどのデータソースのコンテンツをリストするかを指定します。この属性が定義されていない場合、サーバーに存在するすべてのデータソース・コンテンツがリストされます。

- use_text_xml属性では、デフォルトで、getCapabilitiesの場合にも標準text/xmlが使用されます。この属性をfalseに設定すると、OGC 1.1.1仕様が使用されます(例: application/vnd.ogc.wms_xml)。

例:

<custom_parameters
host="www.my_corp.com" port="80" protocol="http"
default_datasource="mvdemo"
public_datasources="mvdemo, wms">
</custom_parameters>

E.3.5.2 カスタムWMS Capabilitiesサービス属性(<service_attributes>要素)

<service attributes>要素は、MapViewerのメイン構成ファイルに定義されたこれらの値をオーバーライドします。例:

<service_attributes>
<title>
WMS interface provided by OracleFMW MapViewer
</title>
<abstract>
This WMS service is for demonstration.
</abstract>
<keyword_list>
<keyword>Oracle</keyword>
<keyword>MapViewer</keyword>
<keyword>Spatial and Graph</keyword>
</keyword_list>
<online_resource>
http://localhost:7001/mapviewer/wms
</online_resource>
<contact_information>
<ContactPersonPrimary>
<ContactPerson>John Doe</ContactPerson>
<ContactOrganization>My Corp.</ContactOrganization>
</ContactPersonPrimary>
<ContactPosition>Sr. Manager</ContactPosition>
<ContactAddress>
<AddressType>US Street</AddressType>
<Address>1 MyCorp drv</Address>
<City>Nashua</City>
<StateOrProvince>NH</StateOrProvince>
<PostCode>03062</PostCode>
<Country>USA</Country>
</ContactAddress>
<ContactVoiceTelephone>18001122333</ContactVoiceTelephone>
<ContactFacsimileTelephone></ContactFacsimileTelephone>
<ContactElectronicMailAddress>jdoe@my_corp.com</ContactElectronicMailAddress>
</contact_information>
<Fees>None</Fees>
<AccessConstraints>None whatsoever</AccessConstraints>
</service_attributes>

E.3.5.3 カスタムWMS層属性(<layer_attributes>要素)

WMS OGC仕様では、いくつかの層属性が定義されています。層の属性リストには、要約、キーワード・リスト、SRSリスト、スタイル、属性およびその他が含まれます。

<layer_attributes>要素を使用してMapViewerメタデータ(ベース・マップおよびテーマ)のカスタム属性を定義できます。WMS層は、MapViewerのテーマおよびベース・マップに関連付けられています。すべての層属性はオプションであり、定義されている場合、それらはGetCapabilitiesレスポンスを補完します。

例E-8は、ベース・マップおよびテーマのカスタム・パラメータを持つ<layer_attributes>要素を示しています。この例では、ベース・マップDEMO_MAPにはカスタム要素<abstract>が定義されていますが、テーマTHEME_DEMO_STATESにはカスタム要素<abstract>、<keywordlist>、<srs>および<style>が定義されています。<metadata>要素のタイプ属性では、MapViewerのテーマには値themeを、MapViewerのベース・マップには値basemapを使用します。type属性が定義されていないか、値がthemeまたはbasemapに等しくない場合は、デフォルトでthemeが使用されます。

例E-8 カスタムWMS層属性

<layer_attributes>
<datasource name="mvdemo">
<metadata name="DEMO_MAP"  type="basemap">
<abstract>Collection of US States</abstract>
</metadata>
<metadata name="THEME_DEMO_STATES"  type="theme"
queryable="1" cascaded="0" opaque="1" noSubsets="0"
fixedWidth="500" fixedHeight="400">

<abstract>US States</abstract>

<keywordlist>keyword1,keyword2,keyword3</keywordlist>

<srs>EPSG:4203,EPSG:20248</srs>

<style>
<title>Style title</title>
<name>Style name</name>
<abstract>Style abstract</abstract>
<stylesheeturl>
<format>Stylesheet format</format>
<onlineresource>
<href>http://www.yoururl.com/styledata.html</href>
<type>simple</type>
</onlineresource>
</stylesheeturl>
<styleurl>
<format>Styles format</format>
<onlineresource>
<href>http://www.yoururl.com/style.html</href>
<type>simple</type>
</onlineresource>
</styleurl>
<legendurl>
<format>Legend format</format>
<width>500</width>
<height>500</height>
<onlineresource>
<href>http://www.yoururl.com/legendurl.html</href>
<type>simple</type>
</onlineresource>
</legendurl>
</style>
...

</metadata>
</datasource>
</layer_attributes>

例E-9は、これらのカスタム属性を含むGetCapabilitiesレスポンスの一部を示しています。

例E-9 カスタム属性を含むGetCapabilitiesレスポンス

<Layer>
<Name>DEMO_MAP</Name>
<Title>Basemap DEMO_MAP</Title>
<Abstract>Collection of US States</Abstract>
<SRS>EPSG:4326</SRS>
<LatLonBoundingBox maxy="90.0" maxx="180.0" miny="-90.0" minx="-180.0"/>
<Layer fixedHeight="400" fixedWidth="500" noSubsets="0" opaque="1" cascaded="0" queryable="1">
<Name>THEME_DEMO_STATES</Name>
<Title>THEME_DEMO_STATES</Title>
<Abstract>US States</Abstract>
<KeywordList>
<Keyword>keyword1</Keyword>
<Keyword>keyword2</Keyword>
<Keyword>keyword3</Keyword>
</KeywordList>
<SRS>EPSG:4326</SRS>
<SRS>EPSG:4203</SRS>
<SRS>EPSG:20248</SRS>
<BoundingBox resy="5.0E-8" resx="5.0E-8" maxy="71.33268128071118" maxx="180.0" miny="-14.605189123107024" minx="-180.0" SRS="EPSG:4326"/>
<BoundingBox resy="5.0E-8" resx="5.0E-8" maxy="2.06926736125942E7" maxx="5.5812377162013E7" miny="-1.54158038049741E9" minx="-5.74425799715062E8" SRS="EPSG:4203"/>
<BoundingBox resy="5.0E-8" resx="5.0E-8" maxy="2.06929693795843E7" maxx="6.15958436393193E7" miny="-1.74609707025816E9" minx="-6.32398501646291E8" SRS="EPSG:20248"/>
<Style>
<Name>Style name</Name>
<Title>Style title</Title>
<Abstract>Style abstract</Abstract>
<LegendURL height="500" width="500">
<Format>Legend format</Format>
<OnlineResource xlink:href="http://www.yoururl.com/legendurl.html" xlink:type="simple"/>
</LegendURL>
<StyleSheetURL>
<Format>Stylesheet format</Format>
<OnlineResource xlink:href="http://www.yoururl.com/styledata.html" xlink:type="simple"/>
</StyleSheetURL>
<StyleURL>
<Format>Stylesheet format</Format>
<OnlineResource xlink:href="http://www.yoururl.com/style.html" xlink:type="simple"/>
</StyleURL>
</Style>
<ScaleHint max="1.5E8" min="0.0"/>
</Layer>
...
</Layer>

E.3.5.4 カスタムWMS地物情報(<get_feature_info>要素)

次の要素は、<get_feature_info>要素で使用できます。これらは、事前定義済MapViewerテーマに対するデフォルトの半径(値および単位)の定義に使用できます。

- name属性は、事前定義済テーマの名前を指定します。

- datasource属性は、MapViewerデータソースを指定します。

- radius属性は、radiusパラメータが指定されていない場合にwithin_radius GetFeatureInfoリクエストで使用されるテーマのデフォルトの半径の値を指定します。

- unit属性は、デフォルトの半径の単位を指定します。デフォルトは、m (メートル)です。

例:

<get_feature_info>
<theme name="theme_demo_states" datasource="mvdemo" radius="500" unit="km" />
</get_feature_info>

F MapViewerでのOGC WMTSのサポート

MapViewerは、Open GIS Consortium (OGC)のWeb Map Tile Service (WMTS)プロトコル、特にWMS 1.0.0の実装仕様を使用した、配信データのレンダリングをサポートします。MapViewerは、OGCドキュメント07-057r7で定義されているGetCapabilities、GetTileおよびGetFeatureInfoリクエストをサポートします。

この付録の主な項目は、次のとおりです。

- F.1項「MapViewerのWMTSサービス」

- F.2項「WMTS操作」

- F.3項「MapViewerのWMTSサービスの準備」

F.1 MapViewerのWMTSサービス

MapViewerのWeb Map Tile Service (WMTS)サービスは、MapViewerのマップ・キャッシュ・サーバー上に構築されるWMTSサーバーを通じて提供されます。したがって、このWMTSサーバーは、クライアントのWMTSリクエストをMapViewerのマップ・キャッシュ・サーバーに委任します。OGCのGetCapabilities、GetTileおよびGetFeatureInfo操作がサポートされます。GetCapabilitiesおよびGetTile操作ではKVPおよびRESTの2種類のエンコーディングがサポートされますが、GetFeatureInfo操作ではKVPエンコーディングのみがサポートされます。GetFeatureInfoリクエストに対するレスポンスは、text/xml、text/htmlおよびapplication/jsonの3つの形式(infoformat属性で指定)のいずれかでエンコードされます。

通常では、MapViewerのWMTSサービスを通じて、MapViewerのすべてのマップ・キャッシュ・タイル層にアクセスできます。各マップ・キャッシュ・タイル層へのアクセスは、mapViewerConfig.xmlファイルと同じフォルダに格納されるWMTSサービス・ポリシー・ファイルwmtsConfig.xmlを編集してカスタマイズできます。WMTSサービス・ポリシー・ファイルでMapViewerサーバー内の全マップ・キャッシュ・タイル層のサブセットのみを公開することにより、MapViewerのWMTSサービスを制限できます(詳細は1.6.2.13項を参照)。

例F-1および例F-2は、ポリシー・ファイルを使用してMapViewerのWMTSサーバーにタイル層を公開する方法を示しています。最初の例はタイル層を指定するポリシー・ファイル、2番目の例はタイル層の定義を示しています。

- 例F-1は、WMTSポリシー・ファイルです。このファイルでは、データソースMVDEMOのTEST_TLという1つのマップ・キャッシュ・タイル層のみをMapViewerのWMTSサービスに公開しています。このポリシー・ファイルにサービス・プロバイダに関する情報も含めることができます。

例F-1 WMTSポリシー・ファイル(wmtConfig.xml)

<wmts_config>
<public_datasources>
<public_datasource name="MVDEMO">
<tile_layers>
<tile_layer name="TEST_TL"/>
</tile_layers>
</public_datasource>
</public_datasources>
<ServiceAttributes>
<ServiceIdentification>
<Title>Web Map Tile Service by myCorp</Title>
<Abstract> U.S. maps for state and county boundaries, highway networks, and big cities.</Abstract>
<Keywords>
<Keyword>Maps</Keyword>
<Keyword>U.S. State, County Boundaries</Keyword>
<Keyword>U.S. Interstate Highways</Keyword>
<Keyword>U.S. Cities</Keyword>
</Keywords>
<Fees>none</Fees>
<AccessConstraints>none</AccessConstraints>
</ServiceIdentification>
<ServiceProvider>
<ProviderName>provider's name</ProviderName>
<ProviderSite url="http://www.myCorp.com/mySite"/>
<ServiceContact>
<IndividualName>my name</IndividualName>
<PositionName>technical support specialist</PositionName>
<ContactInfo>
<Phone>
<Voice>+1 800 321 1234</Voice>
<Facsimile>+1 800 321 1235</Facsimile>
</Phone>
<Address>
<DeliveryPoint>123 My Street</DeliveryPoint>
<City>Nashua</City>
<AdministrativeArea>New Hampshire</AdministrativeArea>
<PostalCode>12345-4321</PostalCode>
<Country>U.S.</Country>
<ElectronicMailAddress>myname@mycompany.com</ElectronicMailAddress>
</Address>
</ContactInfo>
</ServiceContact>
</ServiceProvider>
</ServiceAttributes>
</wmts_config>

- 例F-2は、データソースMVDEMOに対するスキーマのTEST_TLタイル層のマップ・タイル層定義です。

例F-2 データソースのタイル層定義

SQL> select definition from  user_sdo_cached_maps where name='TEST_TL';

DEFINITION
--------------------------------------------------------------------------------
<map_tile_layer name="TEST_TL" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3">
<internal_map_source base_map="DEMO_MAP" data_source="MVDEMO"/>
<coordinate_system srid="8307" minX="-180" maxX="180" minY="-90" maxY="90"/>
<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_level tile_width="360.0000" tile_height="360.0000" scale="5.590822640287178E8"/>
<zoom_level tile_width="180.0000" tile_height="180.0000" scale="2.795411320143589E8"/>
<zoom_level tile_width="90.0000" tile_height="90.00000" scale="1.3977056600717944E8"/>
<zoom_level tile_width="45.0000" tile_height="45.00000" scale="6.988528300358972E7"/>
<zoom_level tile_width="22.5000" tile_height="22.50000" scale="3.494264150179486E7"/>
<zoom_level tile_width="11.2500" tile_height="11.25000" scale="1.747132075089743E7"/>
<zoom_level tile_width="5.6250" tile_height="5.62500" scale="8735660.375448715"/>
<zoom_level tile_width="2.8125" tile_height="2.81250" scale="4367830.1877243575"/>
<zoom_level tile_width="1.40625" tile_height="1.40625" scale="2183915.0938621787"/>
<zoom_level tile_width="0.703125" tile_height="0.703125" scale="1091957.5469310894"/>
<zoom_level tile_width="0.3515625" tile_height="0.3515625" scale="545978.7734655447"/>
<zoom_level tile_width="0.17578125" tile_height="0.17578125" scale="272989.38673277234"/>
<zoom_level tile_width="0.087890625" tile_height="0.087890625" scale="136494.693366386"/>
<zoom_level tile_width="0.0439453125" tile_height="0.0439453125" scale="68247.34668319"/>
<zoom_level tile_width="0.02197265625" tile_height="0.02197265625" scale="34123.6733415"/>
<zoom_level tile_width="0.010986328126" tile_height="0.010986328126" scale="17061.8366707"/>
<zoom_level tile_width="0.0054931640633" tile_height="0.0054931640633" scale="8530.91833539"/>
<zoom_level tile_width="0.00274658203168" tile_height="0.00274658203168" scale="4265.45916769"/>
<zoom_level tile_width="0.001373291015841" tile_height="0.001373291015841" scale="2132.72958384"/>
</zoom_levels>
</map_tile_layer>

MapViewerサーバーにその他のデータソースが存在するかどうか、または指定されたデータソースにその他のマップ・キャッシュ・タイル層が存在するかどうかにかかわらず、ポリシー・ファイルが例F-1「WMTSポリシー・ファイル(wmtConfig.xml)」のように指定されている場合、公開されるWMTS層はデータソースMVDEMOのマップ・キャッシュ・タイル層TEST_TLのみです(例F-2「データソースのタイル層定義」を参照)。

F.2 WMTS操作

MapViewerは、OGC WMTS 1.0.0標準で指定されたGetCapabilities、GetTileおよびGetFeatureInfo操作をサポートします。また、この標準では定義されていないが、MapViewerのWMTS操作の柔軟性を高めるいくつかのMapViewer固有のパラメータもサポートされます。

このセクションでは、次のトピックについて説明します。

- GetCapabilities操作のサポート

- GetTile操作のサポート

- GetFeatureInfo操作のサポート

F.2.1 GetCapabilities操作のサポート

MapViewerサーバーがWMTS GetCapabilitiesリクエストを受信すると、そのWMTSサーバーはOGC WMTS仕様に従って使用可能なマップ・キャッシュ・タイル層の定義をXML文書に変換します。(アクセス可能なキャッシュ・タイル層は、wmtsConfig.xmlポリシー・ファイルによって定義されています(存在する場合)。そうでない場合は、WMTSサーバーに使用可能なすべてのデータソースからのすべてのマップ・キャッシュ・タイル層が使用されます。)次に、XML文書がクライアントに返されます。wmtsConfig.xmlポリシー・ファイルにサービス・プロバイダに関する情報が指定されている場合、返されるXML文書内にその情報が提供されます。

この項には、KVPエンコーディングのGetCapabilitiesリクエストとそのレスポンス、およびRESTエンコーディングのGetCapabilitiesリクエストとそのレスポンスが含まれています。KVPまたはRESTエンコーディングのどちらのリクエストの場合にも、次の形式のベースURLが必要です。

http://<host>:<port>/mapviewer/wmts

<host>および<port>は、MapViewerサーバーのホストおよびHTTPポートを表します。コンテキスト・パス/mapviewer/wmtsは、MapViewerのWMTSインタフェースです。

例F-3は、次のKVPコーディングのGetCapabilitiesリクエスト例からのレスポンスです。

http://localhost:8088/mapviewer/wmts?REQUEST=GetCapabilities&SERVICE=WMTS&VERSION=1.0.0

例F-3 KVPエンコーディングのGetCapabilitiesリクエストからのレスポンス

<?xml version="1.0" encoding="UTF-8"?>
<Capabilities xmlns="http://www.opengis.net/wmts/1.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml"
xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd"
version="1.0.0">
<ows:ServiceIdentification>
<ows:Title>Web Map Tile Service by myCorp</ows:Title>
<ows:Abstract>U.S. maps for state and county boundaries, highway networks, and big cities.</ows:Abstract>
<ows:Keywords>
<ows:Keyword>Maps</ows:Keyword>
<ows:Keyword>U.S. State and County Boundaries</ows:Keyword>
<ows:Keyword>U.S. Interstate Highways</ows:Keyword>
<ows:Keyword>U.S. Cities</ows:Keyword>
</ows:Keywords>
<ows:ServiceType>OGC WMTS</ows:ServiceType>
<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
<ows:Fees>none</ows:Fees>
<ows:AccessConstraints>none</ows:AccessConstraints>
</ows:ServiceIdentification>
<ows:ServiceProvider>
<ows:ProviderName>provider's name</ows:ProviderName>
<ows:ProviderSite xlink:href="http://www.myCorp.com/mySite" />
<ows:ServiceContact>
<ows:PositionName>technical support specialist</ows:PositionName>
<ows:ContactInfo>
<ows:Phone>
<ows:Voice>+1 800 321 1234</ows:Voice>
<ows:Facsimile>+1 800 321 1235</ows:Facsimile>
</ows:Phone>
<ows:Address>
<ows:DeliveryPoint>123 My Street</ows:DeliveryPoint>
<ows:City>Nashua</ows:City>
<ows:AdministrativeArea>New Hampshire</ows:AdministrativeArea>
<ows:PostalCode>12345-4321</ows:PostalCode>
<ows:Country>U.S.</ows:Country>
<ows:ElectronicMailAddress>myname@mycompany.com</ows:ElectronicMailAddress>
</ows:Address>
</ows:ContactInfo>
</ows:ServiceContact>
</ows:ServiceProvider>
<ows:OperationsMetadata>
<ows:Operation name="GetCapabilities">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://localhost:8088/mapviewer/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetTile">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://localhost:8088/mapviewer/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetFeatureInfo">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://localhost:8088/mapviewer/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
</ows:OperationsMetadata>
<Contents>
<Layer>
<ows:Title>TEST_TL</ows:Title>
<ows:Abstract>datasource:MVDEMO,layer:TEST_TL</ows:Abstract>
<ows:WGS84BoundingBox>
<ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
<ows:UpperCorner>180.0 90.0</ows:UpperCorner>
</ows:WGS84BoundingBox>
<ows:Identifier>MVDEMO:TEST_TL</ows:Identifier>
<Style isDefault="true">
<ows:Identifier>_null</ows:Identifier>
</Style>
<Format>image/png</Format>
<TileMatrixSetLink>
<TileMatrixSet>MVDEMO:TEST_TL:EPSG:4326</TileMatrixSet>
<TileMatrixSetLimits>
<TileMatrixLimits>
. . . . . .  <!-- omitted to save space  -->
<TileMatrixLimits>
<TileMatrix>MVDEMO:TEST_TL:EPSG:4326:8</TileMatrix>
<MinTileRow>0</MinTileRow>
<MaxTileRow>128</MaxTileRow>
<MinTileCol>0</MinTileCol>
<MaxTileCol>256</MaxTileCol>
</TileMatrixLimits>
. . . . . .  <!-- omitted to save space  -->
</TileMatrixSetLimits>
</TileMatrixSetLink>
</Layer>
<TileMatrixSet>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326</ows:Identifier>
<ows:SupportedCRS>urn:ogc:def:crs:EPSG:4326</ows:SupportedCRS>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:0</ows:Identifier>
<ScaleDenominator>5.590822641167623E8</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:1</ows:Identifier>
<ScaleDenominator>2.7954113205838114E8</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>3</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:2</ows:Identifier>
<ScaleDenominator>1.3977056602919057E8</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>5</MatrixWidth>
<MatrixHeight>3</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:3</ows:Identifier>
<ScaleDenominator>6.988528301459529E7</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>9</MatrixWidth>
<MatrixHeight>5</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:4</ows:Identifier>
<ScaleDenominator>3.494264150729764E7</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>17</MatrixWidth>
<MatrixHeight>9</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:5</ows:Identifier>
<ScaleDenominator>1.747132075364882E7</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>33</MatrixWidth>
<MatrixHeight>17</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:6</ows:Identifier>
<ScaleDenominator>8735660.37682441</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65</MatrixWidth>
<MatrixHeight>33</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:7</ows:Identifier>
<ScaleDenominator>4367830.188412205</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>129</MatrixWidth>
<MatrixHeight>65</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:8</ows:Identifier>
<ScaleDenominator>2183915.0942061027</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>257</MatrixWidth>
<MatrixHeight>129</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:9</ows:Identifier>
<ScaleDenominator>1091957.5471030513</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>513</MatrixWidth>
<MatrixHeight>257</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:10</ows:Identifier>
<ScaleDenominator>545978.7735515257</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1025</MatrixWidth>
<MatrixHeight>513</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:11</ows:Identifier>
<ScaleDenominator>272989.38677576283</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2049</MatrixWidth>
<MatrixHeight>1025</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:12</ows:Identifier>
<ScaleDenominator>136494.69338788142</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4097</MatrixWidth>
<MatrixHeight>2049</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:13</ows:Identifier>
<ScaleDenominator>68247.34669394071</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8193</MatrixWidth>
<MatrixHeight>4097</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:14</ows:Identifier>
<ScaleDenominator>34123.673346970354</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16385</MatrixWidth>
<MatrixHeight>8193</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:15</ows:Identifier>
<ScaleDenominator>17061.836673485177</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32769</MatrixWidth>
<MatrixHeight>16385</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:16</ows:Identifier>
<ScaleDenominator>8530.918336742589</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65537</MatrixWidth>
<MatrixHeight>32769</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:17</ows:Identifier>
<ScaleDenominator>4265.459168371294</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>131073</MatrixWidth>
<MatrixHeight>65537</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326:18</ows:Identifier>
<ScaleDenominator>2132.729584185647</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>262145</MatrixWidth>
<MatrixHeight>131073</MatrixHeight>
</TileMatrix>
</TileMatrixSet>
</Contents>
<ServiceMetadataURL xlink:href="http://localhost:8088/mapviewer/wmts?SERVICE=WMTS&amp;VERSION=1.0.0&amp;REQUEST=getCapabilities"/>
</Capabilities>

例F-4は、次のRESTコーディングのGetCapabilitiesリクエスト例からのレスポンスです。

http://localhost:8088/mapviewer/wmts/1.0.0/WMTSCapabilities.xml

例F-4 RESTエンコーディングのGetCapabilitiesリクエストからのレスポンス

<?xml version="1.0" encoding="UTF-8"?>
<Capabilities xmlns="http://www.opengis.net/wmts/1.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml"
xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd"
version="1.0.0">
<ows:ServiceIdentification>
<!-- omitted to save space, the same as in KVP encoding -->
</ows:ServiceIdentification>
<ows:ServiceProvider>
<!-- omitted to save space, the same as in KVP encoding -->
</ows:ServiceProvider>
<ows:OperationsMetadata>
<ows:Operation name="GetCapabilities">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://localhost:8088/mapviewer/wmts">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>RESTful</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetTile">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://localhost:8088/mapviewer/wmts">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>RESTful</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetFeatureInfo">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://localhost:8088/mapviewer/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
</ows:OperationsMetadata>
<Contents>
<Layer>
<ows:Title>TEST_TL</ows:Title>
<ows:Abstract>datasource:MVDEMO,layer:TEST_TL</ows:Abstract>
<ows:WGS84BoundingBox>
<ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
<ows:UpperCorner>180.0 90.0</ows:UpperCorner>
</ows:WGS84BoundingBox>
<ows:Identifier>MVDEMO:TEST_TL</ows:Identifier>
<Style isDefault="true">
<ows:Identifier>_null</ows:Identifier>
</Style>
<Format>image/png</Format>
<TileMatrixSetLink>
<TileMatrixSet>MVDEMO:TEST_TL:EPSG:4326</TileMatrixSet>
<TileMatrixSetLimits>
. . . . . . <!-- omitted to save space  -->
<TileMatrixLimits>
<TileMatrix>8</TileMatrix>
<MinTileRow>0</MinTileRow>
<MaxTileRow>128</MaxTileRow>
<MinTileCol>0</MinTileCol>
<MaxTileCol>256</MaxTileCol>
</TileMatrixLimits>
. . . . . . <!-- omitted to save space  -->
</TileMatrixSetLimits>
</TileMatrixSetLink>
<ResourceURL format="image/png" template="http://localhost:8088/mapviewer/wmts/MVDEMO:TEST_TL/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" resourceType="tile"/>
</Layer>
<TileMatrixSet>
<ows:Identifier>MVDEMO:TEST_TL:EPSG:4326</ows:Identifier>
<ows:SupportedCRS>urn:ogc:def:crs:EPSG:4326</ows:SupportedCRS>
<TileMatrix>
<ows:Identifier>0</ows:Identifier>
<ScaleDenominator>5.590822641167623E8</ScaleDenominator>
<TopLeftCorner>-180.0  90.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
. . . . . . <!-- omitted to save space  -->

</TileMatrixSet>
</Contents>
<ServiceMetadataURL xlink:href="http://localhost:8088/mapviewer/wmts?SERVICE=WMTS&amp;VERSION=1.0.0&amp;REQUEST=getCapabilities"/>
</Capabilities>

例F-3および例F-4で、<ows:Value>要素の太字テキストは、リクエストのエンコーディングが異なる場合のそれぞれのレスポンスの違いを示しています。(使用するエンコーディングは、アプリケーション固有の設定です。)これらのレスポンス例で、GetTile操作のエンコーディングはGetCapabilitiesリクエストのエンコーディングと同じですが、GetFeatureInfo操作は常にKVPエンコーディングです。

MapViewer WMTSサーバーでは、使用する2つのエンコーディング間に大きなパフォーマンスの違いはありません。

F.2.2 GetTile操作のサポート

MapViewerサーバーがWMTS GetTileリクエストを受信すると、そのWMTSサーバーはリクエストされたタイルをマップ・キャッシュ・サーバーに要求します。マップ・キャッシュ・サーバーはWMTS層のアクセスを最初にチェックし、層にアクセスできる場合は、リクエストされたWMTSタイルのタイル行、タイル列およびその他のパラメータをMapViewerマップ・キャッシュ・タイル層の仕様に変換します。次に、マップ・キャッシュ・サーバーがそのタイルを準備し、MapViewerのWMTSサーバーに返します。言い換えると、WMTS GetCapabilities XML文書に公開されるMapViewer WMTS層は、MapViewerマップ・キャッシュ・サーバーによって管理されるMapViewerマップ・キャッシュ・タイル層に物理的にマップされる「仮想の」層として見ることができます。

WMTSサーバーはGetTileリクエストを受信すると、MapViewerマップ・キャッシュ・サーバーにそのタイルを作成するように要求し、WMTSサーバーがそれをクライアントに返します。マップ・キャッシュ・サーバーはWMTSサーバーからこのようなリクエストを受信すると、常に仕様に従って(画像サイズや枠ボックスなど)、画像を生成します。マップ・キャッシュ・サーバーの画像生成プロセスは、キャッシュから必要なタイルを取得して要求されたWMTSタイルを「アセンブルする」(モザイク操作や切取り)といった、きわめて簡単なものです。また、キャッシュにタイルがない場合、マップ・キャッシュ・サーバーは別のサーバー(MapViewerのマップ・サーバー)にタイルの生成を要求します。

この項には、KVPおよびRESTエンコーディングのGetTileリクエストおよびレスポンスが含まれています。

次はKVPコーディングのGetTileリクエストです(すべてのWMTSリクエストは1行である必要があることに注意してください)。

http://localhost:8088/mapviewer/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=MVDEMO:TEST_TL&STYLE=_null&format=image/png&TileMatrixSet=MVDEMO:TEST_TL:EPSG:4326&TileMatrix=MVDEMO:TEST_TL:EPSG:4326:8&TileRow=33&TileCol=77

図F-1は、このリクエストに対するレスポンスのタイル画像を示しています。

図F-1 GetTileリクエストに対するレスポンスの画像タイル

次は同じ基本GetTileリクエストですが、RESTエンコーディングです(すべてのWMTSリクエストは1行である必要があることに注意してください)。

http://localhost:8088/mapviewer/wmts/MVDEMO:TEST_TL/MVDEMO:TEST_TL:EPSG:4326/8/33/77.png

レスポンスの画像は、図F-1「GetTileリクエストに対するレスポンスの画像タイル」と同じです。

F.2.2.1 WMTS層およびマップ・キャッシュ・タイル層のマップ・タイル

MapViewerマップ・キャッシュ・サーバーはタイル層のマップ・タイルをキャッシュできますが、WMTSサーバーはWMTS層のマップ・タイルをキャッシュしません。言い換えると、WMTSサーバーのマップ・タイルは物理的に存在するものではなく、むしろMapViewerマップ・キャッシュ・タイル層にマップされています。

たとえば、F.2.2.1項「WMTS層およびマップ・キャッシュ・タイル層のマップ・タイル」のWMTS GetTileリクエストを送信する前にマップ・キャッシュ・タイル層のキャッシュを空にした場合は、次の処理が発生します。

1. WMTSサーバーはリクエストを受信すると、それをマップ・キャッシュ・サーバーに渡します。

2. マップ・キャッシュ・サーバーは、リクエストを内部画像マップ・リクエストに変換してタイル画像を生成します(タイルの枠ボックスで定義された空間ディメンション、画像サイズで定義された256x256などのサイズを使用)。

3. 必要なマップ・キャッシュ・タイル層のタイルが識別されます。

4. 各マップ・キャッシュ・タイル層のタイルについて、マップ・キャッシュ・サーバーはキャッシュからの取得を試みます。キャッシュからタイルを得られない場合は、別のサーバー、つまりMapViewerマップ・サーバーにマップ・リクエストを送信してタイル画像を生成します(この事例ではキャッシュを空にした直後であるため、こうなります)。

5. すべての必要なマップ・キャッシュ・タイル層のマップ・タイルがフェッチされると、WMTSタイル画像がレンダリングされ、返されます(必要に応じて、モザイク操作および切取りが行われる)。

その後クライアントが同じWMTSタイルのリクエストを送信した場合、前述のステップが繰り返されますが、唯一の違いはステップ4です。ステップ4で、必要なマップ・キャッシュ・タイル層のタイルはキャッシュから得られます。同じタイルの再度の要求では、ステップ4の最も高価な処理が回避されるため、はるかに高速になります。

通常、マップ・キャッシュ・タイル層のタイルと、GetTileリクエストで指定されるWMST層のタイルの間には、1対1の一致はありません。それは、MapViewerマップ・キャッシュ・タイル層が使用する座標系は左下隅に原点がありますが(tile_x, tile_y)、WMTSでは左上隅を原点とする座標系を使用するためです(tile_column, tile_row)。たとえば、(tile_x=0, tile_y=0)のMapViewerの画像タイルは左下隅のタイルですが、(tile_column=0, tile_row=0)のWMTSタイルは左上隅にあります。

データ領域全体は、その対応する原点から始まる、複数のタイルに分割されています。また各ズーム・レベルの最後のタイル(tile_x, tile_y)または(tile_column, tile_row)は、常にデータの上限(MapViewerタイルの座標系の場合)または下限(WMTSタイルの座標系の場合)で正確に位置合せされるとは限りません。したがって、2つのシステム間にはタイルの1対1の一致がない場合もあります。ただし、最後のタイルがデータの境界で正確に位置合せされている場合は、1対1の一致が存在します。

たとえば、F.2.2.1項「WMTS層およびマップ・キャッシュ・タイル層のマップ・タイル」のGetTileリクエストを使用してズーム・レベル8のWMTSタイル(tile_column=77, tile_row=33)を要求した場合、そのタイルはマップ・キャッシュ・タイル層の(tile_x=77, tile_y=94)のタイルと正確に一致します。これらの2つのタイルが一致する理由は次のとおりです。

- タイル層の定義により(例F-2「データソースのタイル層定義」を参照)、どちらの座標系も最後のタイルがデータ境界で正確に位置合せされているため、WMTSタイルとマップ・キャッシュ・タイル層のタイルには1対1の一致があることが確実になります。

- WMTSのtile_row 33は、総タイル行が128となるように、マップ・キャッシュ・サーバーのtile_y 94を補完します(一方の原点は左上隅で、他方は左下です)。例F-3「KVPエンコーディングのGetCapabilitiesリクエストからのレスポンス」に示すように、<MaxTileRow>要素の値は128です。
また、tile_xおよびtile_columnの値はどちらも西の境界から開始して右方向に進むため、これらの値が同じであることにも注意してください。

MapViewerにWMTSサービス用のタイル層を作成する場合は、<tile_dpi>要素の値を0.28 mmにする必要があります。この値は、ドット/インチ(dpi)表記で<tile_dpi value="90.7142857"/>と同等です。この要素が指定されていない場合、MapViewerのマップ・キャッシュ・タイル層では、タイルを生成するときにタイル層に対して異なる値が使用される場合があります(たとえば、dpiを96に設定するなど)。WMTSが使用するdpi値は90.7142857であるため、この値が異なると、WMTSサービスが遅くなり、マップ・タイルの品質が低下する場合があります。

WGS84 (経度・緯度)測地基準系を使用してWMTSサービス用のタイル層をMapViewerに作成する場合、<tile_meters_per_unit>要素には、赤道に沿って1度の弧長に対応する値(<tile_meters_per_unit value="111319.49079327358"/>)を指定する必要があります。<tile_meters_per_unit>要素が指定されていない場合は、MapViewerが内部で値を計算します。ただし、111319.49079327358の値は、WGS84測地基準系で他のWMTSサービス・プロバイダによって一般的に使用されているため、<tile_meters_per_unit value="111319.49079327358"/>を指定すると、MapViewerのWMTS層と他のサービス・プロバイダのタイル層が一致するようになります。

F.2.3 GetFeatureInfo操作のサポート

MapViewerでは、次のGetFeatureInfo操作オプションがサポートされます。

- 標準OGC GetFeatureInfoリクエスト

- ポイント(x,y)でのMapViewer固有のGetFeatureInfoリクエスト

- 枠ボックス内のMapViewer固有のGetFeatureInfoリクエスト

これらの操作によって返される地物情報は、MapViewerのベース・マップ定義、テーマ定義、および対象領域に応じて選択された地物に基づいています。ベース・マップには、各テーマの参照可能なスケール範囲が定義され、各テーマの情報列は<styling_rules>要素の子要素である<hidden_info>の子要素<field>に定義されます。テーマの<styling_rules>要素に情報列が指定されていない場合、GetFeatureInfoレスポンスにはそのテーマの地物に関する情報が含まれません。

GetFeatureInfoプロセスの各オプションの対象領域は次のように計算されます。

- 標準OGC GetFeatureInfoリクエストの場合、ピクセルの列と行、および与えられたズーム・レベルでのそのタイルの位置を、ピクセルの重心でマップ・キャッシュ・タイル層の座標系のポイント(x,y)に変換できます。このポイントを中心とした、このズーム・レベルの5x5ピクセルのウィンドウにより対象領域が定義されます。

- MapViewer固有の(x, y)ポイントでのリクエストの場合も、指定された(x,y)値を中心とした、そのレベルの5x5ピクセルのウィンドウが対象領域として使用されます。

- MapViewer固有の枠ボックスのGetFeatureInfoリクエスト・オプションの場合、指定された枠ボックス(min_x, min_y, max_x, max_y)と、そのズーム・レベルの画像タイルのそれらに対応する(column, row)の値が対象領域として使用されます。

MapViewerでは、GetFeatureInfoリクエストで追加のMapViewer固有のパラメータであるchildLayer属性を指定できます(例: childLayer=myTheme1, myTheme2)。このパラメータが指定されている場合、指定されたテーマ(この例ではmyTheme1およびmyTheme2のみ)の地物情報のみが含まれます。このパラメータが指定されていない場合は、ベース・マップ定義内のすべてのテーマがGetFeatureInfoリクエスト用として考慮されます。

内容は次のとおりです。

- OGC GetFeatureInfoリクエスト

- ポイント(x,y)でのMapViewer GetFeatureInfoリクエスト

- 枠ボックス内のMapViewer GetFeatureInfoリクエスト

これらのサブトピックの例(例F-5および例F-6)では、TEST_TLというタイル層のベース・マップ定義およびテーマ定義が使用されています。

例F-5 タイル層TEST_TLのベース・マップ定義

<?xml version="1.0" standalone="yes"?>
<map_definition>
<theme name="THEME_DEMO_STATES" min_scale="" max_scale="0.0" scale_mode="RATIO"/>
<theme name="THEME_DEMO_COUNTIES" min_scale="8500000.0" max_scale="0.0" scale_mode="RATIO"/>
<theme name="THEME_DEMO_HIGHWAYS_LINE" min_scale="1.0E8" max_scale="4.5E7" scale_mode="RATIO"/>
<theme name="THEME_DEMO_HIGHWAYS" min_scale="4.5E7" max_scale="0.0" scale_mode="RATIO"/>
<theme name="THEME_DEMO_BIGCITIES" min_scale="" max_scale="0.0" scale_mode="RATIO"/>
<theme name="THEME_DEMO_CITIES" min_scale="7500000.0" max_scale="0.0" scale_mode="RATIO"/>
</map_definition>

例F-6 タイル層TEST_TLのテーマの名前およびスタイリング・ルール

THEME_DEMO_STATES
<?xml version="1.0" standalone="yes"?>
<styling_rules>
<hidden_info>
<field column="STATE" name="Name"/>
<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>

THEME_DEMO_COUNTIES
<?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>

THEME_DEMO_CITIES
<?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 ) </featu
res>
<label column="city" style="T.S07_CITIES_L2"> 1 </label>
</rule>
<rule>
<features style="M.ALL_CITY_L3"> (pop90 &lt; 200000) </features>
<label column="city" style="T.S07_CITIES_L3"> 1 </label>
</rule>
</styling_rules>

THEME_DEMO_HIGHWAYS
<?xml version="1.0" standalone="yes"?>
<styling_rules>
<hidden_info>
<field column="HIGHWAY" name="Name"/>
<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>

F.2.3.1 OGC GetFeatureInfoリクエスト

次はOGC標準を使用したサンプルGetFeatureInfoリクエストです(すべてのWMTSリクエストは1行である必要があることに注意してください)。

http://localhost:8088/mapviewer/wmts?SERVICE=WMTS&REQUEST=GetFeatureInfo&VERSION=1.0.0&LAYER=MVDEMO:TEST_TL&STYLE=_null&format=image/png&TileMatrixSet=MVDEMO:TEST_TL:EPSG:4326&TileMatrix=MVDEMO:TEST_TL:EPSG:4326:8&TileRow=33&TileCol=76&I=238&J=240&InfoFormat=application/gml%2bxml; version=3.1

例F-7は、このリクエストからのレスポンスを示しています。

例F-7 OGC GetFeatureInfoリクエストからのレスポンス

<?xml version="1.0" encoding="UTF-8"?>
<layers>
<layer name="THEME_DEMO_CITIES">
<feature id="1">
<City>Worcester</City>
<Population>169759</Population>
</feature>
</layer>
<layer name="THEME_DEMO_BIGCITIES">
</layer>
<layer name="THEME_DEMO_HIGHWAYS">
</layer>
<layer name="THEME_DEMO_HIGHWAYS_LINE">
</layer>
<layer name="THEME_DEMO_COUNTIES">
<feature id="1">
<County>Worcester</County>
<Fips>25027</Fips>
<Population>709705</Population>
<State>MA</State>
</feature>
</layer>
<layer name="THEME_DEMO_STATES">
<feature id="1">
<State>Massachusetts</State>
<Abrv.>MA</Abrv.>
<Population>6016424</Population>
</feature>
</layer>
</layers>

F.2.3.2 ポイント(x,y)でのMapViewer GetFeatureInfoリクエスト

次のサンプルMapViewer GetFeatureInfoリクエストは、経度および緯度(xおよびy)の値によって識別されるポイント(この例ではボストン市内のポイント)でのテキスト/HTML形式によるすべてのテーマに関する情報を要求しています(WMTSリクエストは1行である必要があることに注意してください)。

http://localhost:8088/mapviewer/wmts?SERVICE=WMTS&REQUEST=GetFeatureInfo&VERSION=1.0.0&infoformat=text/html&LAYER=MVDEMO:TEST_TL&zoomlevel=8&x=-71.01522133879438&y=42.33731136863662&SRID=8307

このリクエストでは、ポイントの(x,y)座標がパラメータとして指定されています。このポイントはMapViewerによって、ポイントを中心とする、指定されたズーム・レベル(この例では8)の5x5ピクセルの矩形領域に変換され、地物情報を取得する対象領域とされます。リクエストにはchildLayerパラメータがないため、デフォルトで対象領域内のすべての地物が考慮されます。

座標(x, y)が、タイル層で使用されているものとは異なる座標系である場合(空間参照システム)、座標をタイル層の系に変換するためにオプションのSRIDパラメータを指定する必要があります。デフォルト値は、タイル層のSRID値です。

図F-2は、このリクエストからのレスポンスです。

図F-2 ポイント(x,y)でのMapViewer GetFeatureInfoリクエストからのレスポンス

F.2.3.3 枠ボックス内のMapViewer GetFeatureInfoリクエスト

次のサンプルMapViewer GetFeatureInfoリクエストは、枠ボックスで定義された対象領域内(この例ではボストン市および一部の周辺コミュニティを含む矩形領域)の2つのテーマ(THEME_DEMO_CITIESおよびTHEME_DEMO_COUNTIES)に関する情報を要求しています(WMTSリクエストは1行である必要があることに注意してください)。

http://localhost:8088/mapviewer/wmts?SERVICE=WMTS&REQUEST=GetFeatureInfo&VERSION=1.0.0&infoformat=text/xml&LAYER=MVDEMO:TEST_TL&childLayer=THEME_DEMO_COUNTIES,THEME_DEMO_CITIES&zoomlevel=8&bbox=-71.32151786220001,42.19361670333521,-70.96354167846667,42.52386233762441&SRID=8307

座標(x, y)が、タイル層で使用されているものとは異なる座標系である場合(空間参照システム)、枠ボックスの座標をタイル層の系に変換するためにオプションのSRIDパラメータを指定する必要があります。デフォルト値は、タイル層のSRID値です。

図F-2は、このリクエストの枠ボックスを示しています。

図F-3 MapViewer GetFeatureInfoリクエストの枠ボックス

例F-8は、このリクエストからのXML形式のレスポンスです。

例F-8 枠ボックス内のMapViewer GetFeatureInfoリクエストからのレスポンス

<layers>
...<layer name="THEME_DEMO_CITIES">
......<feature id="1">
......<City>Boston</City>
......<Population>574283</Population>
......</feature>
...</layer>
...<layer name="THEME_DEMO_COUNTIES">
......<feature id="1">
.........<County>Middlesex</County>
.........<Fips>25017</Fips>
.........<Population>1398468</Population>
.........<State>MA</State>
......</feature>
......<feature id="2">
.........<County>Norfolk</County>
.........<Fips>25021</Fips>
.........<Population>616087</Population>
.........<State>MA</State>
......</feature>
......<feature id="3">
.........<County>Suffolk</County>
.........<Fips>25025</Fips>
.........<Population>663906</Population>
.........<State>MA</State>
......</feature>
......<feature id="4">
.........<County>Essex</County>
.........<Fips>25009</Fips>
.........<Population>670080</Population>
.........<State>MA</State>
......</feature>
...</layer>
</layers>

F.3 MapViewerのWMTSサービスの準備

MapViewerのWMTSサービスを使用するための準備は、次の主要手順に従います。

1. 事前定義済ジオメトリ・テーマの準備。

2. ベース・マップの準備。

3. タイル層の準備。

4. wmtsConfig.xmlポリシー・ファイルでのタイル層の公開。

5. MapViewer WMTSサービスの検証。

F.3.1 事前定義済ジオメトリ・テーマの準備

getFeatureInfoサービスで事前定義済ジオメトリ・テーマから地物情報を取得する必要がある場合、1つ以上の<field>子要素を持つ<hidden_info>要素を使用する必要があります。<field>要素のcolumn属性がgetFeatureInfoレスポンスで返されます。

<hidden_info>要素は、<styling_rules>要素である必要があります。例:

<?xml version="1.0" standalone="yes"?>
<styling_rules>
<hidden_info>
<field column="NAME" name="name"/>
<field column="MAINPAGE" name="mainpage"/>
</hidden_info>
.
.
.
</styling_rules>

事前定義済ジオメトリ・テーマでのスタイリング・ルールの使用の詳細は、2.3.1.1項「事前定義済空間ジオメトリ・テーマのスタイリング・ルール」を参照してください。

F.3.2 ベース・マップの準備

WMTSテーマを使用できるようにベース・マップ(テーマの集合体)を準備するには、ベース・マップにテーマを追加します。

ベース・マップへのテーマの追加の詳細は、2.4項「マップ」を参照してください。

WMTSテーマの詳細は、2.3.8項「WMTSテーマ」を参照してください。

F.3.3 タイル層の準備

wmtsConfix.xmlポリシー・ファイルに制約がない場合は、MapViewerのタイル層がMapViewer WMTSサーバーのWMTS層になります。たとえば、例F-2「データソースのタイル層定義」でDEMO_MAPというベース・マップが作成されている場合、そのベース・マップを使用してタイル層を作成できます。この項には、次の例が含まれています。各例では、OGC WMTS 1.0.0実装標準の付属書Eに見られるよく知られたスケール・セットを使用しています。

- 例F-9「スケール・セットGlobalCRS84Scaleのタイル定義」

- 例F-10「スケール・セットGlobalCRS84Pixelのタイル定義」

- 例F-11「スケール・セットGoogleCRS84Quadのタイル定義」

- 例F-12「スケール・セットGoogleMapsCompatibleのタイル定義」

これらの例では、ピクセル・サイズが0.28mmであるOGC WMTS 1.0.0の実装標準に応じて、<tile_dpi>および<tile_meters_per_unit>要素が指定されています。座標(空間参照)系がWGS84の場合、赤道上の1度は111319.49mです。

例F-9 スケール・セットGlobalCRS84Scaleのタイル定義

insert into user_sdo_cached_maps values(
'WMTS_E1',
'wmts annex e1 scale set for GlobalCRS84Scale',
'',
'YES',
'YES',
'<map_tile_layer name="WMTS_E1" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3">
<internal_map_source base_map="DEMO_MAP" data_source="MVDEMO" />
<coordinate_system srid="8307" minX="-180" maxX="180" minY="-90" maxY="90"/>
<internal_map_source base_map="DEMO_MAP" data_source="MVDEMO" db_tile_table=""/>
<cache_storage root_path=""/>
<coordinate_system srid="8307" minX="-180" maxX="180" minY="-90" maxY="90"/>
<tile_image width="256" height="256"/>
<tile_dpi value="90.7142857"/>
<tile_meters_per_unit value="111319.49079327358"/>
<zoom_levels levels="21" min_scale="100" max_scale="5.0E8">
<zoom_level scale="5.0E8" tile_width="321.9561978791382" tile_height="321.9561978791382"/>
<zoom_level scale="2.5E8" tile_width="160.9780989395691" tile_height="160.9780989395691"/>
<zoom_level scale="1.0E8" tile_width="64.39123957582764" tile_height="64.39123957582764"/>
<zoom_level scale="5.0E7" tile_width="32.19561978791382" tile_height="32.19561978791382"/>
<zoom_level scale="2.5E7" tile_width="16.09780989395691" tile_height="16.09780989395691"/>
<zoom_level scale="1.0E7" tile_width="6.439123957582764" tile_height="6.439123957582764"/>
<zoom_level scale="5.0E6" tile_width="3.219561978791382" tile_height="3.219561978791382"/>
<zoom_level scale="2.5E6" tile_width="1.609780989395691" tile_height="1.609780989395691"/>
<zoom_level scale="1.0E6" tile_width="0.6439123957582763" tile_height="0.6439123957582763"/>
<zoom_level scale="5.0E5" tile_width="0.32195619787913815" tile_height="0.32195619787913815"/>
<zoom_level scale="2.5E5" tile_width="0.16097809893956908" tile_height="0.16097809893956908"/>
<zoom_level scale="1.0E5" tile_width="0.06439123957582764" tile_height="0.06439123957582764"/>
<zoom_level scale="5.0E4" tile_width="0.03219561978791382" tile_height="0.03219561978791382"/>
<zoom_level scale="2.5E4" tile_width="0.01609780989395691" tile_height="0.01609780989395691"/>
<zoom_level scale="1.0E4" tile_width="0.006439123957582764" tile_height="0.006439123957582764"/>
<zoom_level scale="5.0E3" tile_width="0.003219561978791382" tile_height="0.003219561978791382"/>
<zoom_level scale="2.5E3" tile_width="0.001609780989395691" tile_height="0.001609780989395691"/>
<zoom_level scale="1.0E3" tile_width="6.439123957582763E-4" tile_height="6.439123957582763E-4"/>
<zoom_level scale="5.0E2" tile_width="3.2195619787913813E-4" tile_height="3.2195619787913813E-4"/>
<zoom_level scale="2.5E2" tile_width="1.6097809893956906E-4" tile_height="1.6097809893956906E-4"/>
<zoom_level scale="1.0E2" tile_width="6.439123957582763E-5" tile_height="6.439123957582763E-5"/>
</zoom_levels>
</map_tile_layer>',
'DEMO_MAP','');

例F-10 スケール・セットGlobalCRS84Pixelのタイル定義

insert into user_sdo_cached_maps values(
'WMTS_E2',
'wmts annex e2 scale GlobalCRS84Pixel',
'',
'YES',
'YES',
'<map_tile_layer name="WMTS_E2" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3">
<internal_map_source base_map="DEMO_MAP" data_source="MVDEMO"/>
<coordinate_system srid="8307" minX="-180" maxX="180" minY="-90" maxY="90"/>
<tile_image width="256" height="256"/>
<tile_dpi value="90.7142857"/>
<tile_meters_per_unit value="111319.49079327358"/>
<zoom_levels levels="19" min_scale="1104.360027711047" max_scale="795139219.9519541">
<zoom_level scale="795139219.9519541" tile_width="512.000000" tile_height="512.000000"/>
<zoom_level scale="397569609.9759771" tile_width="256.000000" tile_height="256.000000"/>
<zoom_level scale="198784804.9879885" tile_width="128.000000" tile_height="128.000000"/>
<zoom_level scale="132523203.3253257" tile_width="85.333333" tile_height="85.333333"/>
<zoom_level scale="66261601.66266284" tile_width="42.666666" tile_height="42.666666"/>
<zoom_level scale="33130800.83133142" tile_width="21.333333" tile_height="21.333333"/>
<zoom_level scale="13252320.33253257" tile_width="8.5333333" tile_height="8.5333333"/>
<zoom_level scale="6626160.166266284" tile_width="4.2666666" tile_height="4.2666666"/>
<zoom_level scale="3313080.083133142" tile_width="2.1333333" tile_height="2.1333333"/>
<zoom_level scale="1656540.041566571" tile_width="1.0666666" tile_height="1.0666666"/>
<zoom_level scale="552180.0138555236" tile_width="0.3555555" tile_height="0.3555555"/>
<zoom_level scale="331308.0083133142" tile_width="0.2133333" tile_height="0.2133333"/>
<zoom_level scale="110436.0027711047" tile_width="0.0711111" tile_height="0.0711111"/>
<zoom_level scale="55218.00138555237" tile_width="0.0355555" tile_height="0.0355555"/>
<zoom_level scale="33130.80083133142" tile_width="0.0213333" tile_height="0.0213333"/>
<zoom_level scale="11043.60027711047" tile_width="0.00711111" tile_height="0.00711111"/>
<zoom_level scale="3313.080083133142" tile_width="0.00213333" tile_height="0.00213333"/>
<zoom_level scale="1104.360027711047" tile_width="7.111111E-4" tile_height="7.111111E-4"/>
</zoom_levels>
</map_tile_layer>',
'DEMO_MAP',
'');

例F-11 スケール・セットGoogleCRS84Quadのタイル定義

insert into user_sdo_cached_maps values(
'WMTS_E3',
'wmts annex e3 scale set GoogleCRS84Quad',
'',
'YES',
'YES',
'<map_tile_layer name="WMTS_E3" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3">
<internal_map_source base_map="DEMO_MAP" data_source="MVDEMO"/>
<coordinate_system srid="8307" minX="-180" maxX="180" minY="-90" maxY="90"/>
<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_level tile_width="360.0000" tile_height="360.0000" scale="5.590822640287178E8"/>
<zoom_level tile_width="180.0000" tile_height="180.0000" scale="2.795411320143589E8"/>
<zoom_level tile_width="90.0000" tile_height="90.00000" scale="1.3977056600717944E8"/>
<zoom_level tile_width="45.0000" tile_height="45.00000" scale="6.988528300358972E7"/>
<zoom_level tile_width="22.5000" tile_height="22.50000" scale="3.494264150179486E7"/>
<zoom_level tile_width="11.2500" tile_height="11.25000" scale="1.747132075089743E7"/>
<zoom_level tile_width="5.6250" tile_height="5.62500" scale="8735660.375448715"/>
<zoom_level tile_width="2.8125" tile_height="2.81250" scale="4367830.1877243575"/>
<zoom_level tile_width="1.40625" tile_height="1.40625" scale="2183915.0938621787"/>
<zoom_level tile_width="0.703125" tile_height="0.703125" scale="1091957.5469310894"/>
<zoom_level tile_width="0.3515625" tile_height="0.3515625" scale="545978.7734655447"/>
<zoom_level tile_width="0.17578125" tile_height="0.17578125" scale="272989.38673277234"/>
<zoom_level tile_width="0.087890625" tile_height="0.087890625" scale="136494.693366386"/>
<zoom_level tile_width="0.0439453125" tile_height="0.0439453125" scale="68247.34668319"/>
<zoom_level tile_width="0.02197265625" tile_height="0.02197265625" scale="34123.6733415"/>
<zoom_level tile_width="0.010986328126" tile_height="0.010986328126" scale="17061.8366707"/>
<zoom_level tile_width="0.0054931640633" tile_height="0.0054931640633" scale="8530.91833539"/>
<zoom_level tile_width="0.00274658203168" tile_height="0.00274658203168" scale="4265.45916769"/>
<zoom_level tile_width="0.001373291015841" tile_height="0.001373291015841" scale="2132.72958384"/>
</zoom_levels>
</map_tile_layer>',
'DEMO_MAP',
'');

例F-12 スケール・セットGoogleMapsCompatibleのタイル定義

insert into user_sdo_cached_maps values(
'WMTS_E4',
'wmts annex e4 scale set',
'',
'YES',
'YES',
'<map_tile_layer name="WMTS_E4" image_format="PNG" http_header_expires="168.0" concurrent_fetching_threads="3">
<internal_map_source base_map="DEMO_MAP" data_source="MVDEMO"/>
<coordinate_system srid="3857" minX="-20037508" maxX="20037508" minY="-20037508" maxY="20037508"/>
<tile_image width="256" height="256"/>
<tile_dpi value="90.7142857"/>
<tile_meters_per_unit value="1"/>
<zoom_levels levels="19" min_scale="2132.729583849784" max_scale=" 559082264.0287178">
<zoom_level tile_width="4.0075016692E7" tile_height="4.0075016692E7" scale="5.5908226403E8"/>
<zoom_level tile_width="2.0037508346E7" tile_height="2.0037508346E7" scale="2.7954113201E8"/>
<zoom_level tile_width="1.0018754173E7" tile_height="1.0018754173E7" scale="1.3977056601E8"/>
<zoom_level tile_width="5009377.086486" tile_height="5009377.086486" scale="6.9885283004E7"/>
<zoom_level tile_width="2504688.543243" tile_height="2504688.543243" scale="3.4942641502E7"/>
<zoom_level tile_width="1252344.27162" tile_height="1252344.27162" scale="1.747132075089E7"/>
<zoom_level tile_width="626172.135810" tile_height="626172.135810" scale="8735660.3754487"/>
<zoom_level tile_width="313086.067905" tile_height="313086.067905" scale="4367830.1877243"/>
<zoom_level tile_width="156543.033952" tile_height="156543.033952" scale="2183915.0938621"/>
<zoom_level tile_width="78271.5169763" tile_height="78271.5169763" scale="1091957.5469311"/>
<zoom_level tile_width="39135.7584882" tile_height="39135.7584882" scale="545978.77346554"/>
<zoom_level tile_width="19567.8792441" tile_height="19567.8792441" scale="272989.38673277"/>
<zoom_level tile_width="9783.93962204" tile_height="9783.93962204" scale="136494.69336638"/>
<zoom_level tile_width="4891.96981102" tile_height="4891.96981102" scale="68247.346683193"/>
<zoom_level tile_width="2445.98490551" tile_height="2445.98490551" scale="34123.673341596"/>
<zoom_level tile_width="1222.99245275" tile_height="1222.99245275" scale="17061.836670798"/>
<zoom_level tile_width="611.496226378" tile_height="611.496226378" scale="8530.9183353991"/>
<zoom_level tile_width="305.748113189" tile_height="305.748113189" scale="4265.4591676995"/>
<zoom_level tile_width="152.874056594" tile_height="152.874056594" scale="2132.7295838498"/>
</zoom_levels>
</map_tile_layer>',
'DEMO_MAP',
'');

F.3.4 wmtsConfig.xmlポリシー・ファイルでのタイル層の公開

タイル層を公開するには、mapViewerConfig.xmlと同じ場所に保存されているwmtsConfig.xmlポリシー・ファイルの<public_datasources>要素を編集し、情報を追加できます。例F-13は、データソースMVDEMOの5つのタイル(TEST_EL、WMTS_E1、WMTS_E2、WMTS_E3およびWMTS_E4)およびデータソースTILSMENVのすべてのタイル層を公開するためのエントリを示しています。

例F-13 タイル層の公開

<public_datasources>
<public_datasource name="MVDEMO">
<tile_layers>
<tile_layer name="TEST_TL"/>
<tile_layer name="WMTS_E1"/>
<tile_layer name="WMTS_E2"/>
<tile_layer name="WMTS_E3"/>
<tile_layer name="WMTS_E4"/>
</tile_layers>
</public_datasource>
<public_datasource name="TILSMENV" include_all_tile_layers="TRUE">
</public_datasources>

F.3.5 MapViewer WMTSサービスの検証

MapViewer WMTSサービスが適切に機能していることを確認する手順は次のとおりです。

1. MapViewerサーバーを再起動して、データソースからタイル層定義を取得し、WMTSポリシー・ファイルを適用します。

2. タイル層が公開され、すべてのスケール・セットが期待どおりに表示されることを確認するには、次の形式でGetCapabilitiesリクエストを発行します。

http://<url>:<port>/mapviewer/wmts?REQUEST=GetCapabilities&SERVICE=WMTS&VERSION=1.0.0

索引
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z

A

アクセラレータ・キー

Map Builderツールのメニュー, 7.2

アクティブなテーマ

取得, 4.3.5

add_data_source要素, 5.1.1 addBucketStyleメソッド, 4.3.4 addCollectionBucketStyleメソッド, 4.3.4 addColorSchemeStyleメソッド, 4.3.4, 4.3.4 addColorStyleメソッド, 4.3.4 addGeoRasterThemeメソッド, 4.3.3 addImageAreaStyleFromURLメソッド, 4.3.4, 4.3.4 addImageMarkerStyleFromURLメソッド, 4.3.4, 4.3.4, 4.3.4, 4.3.4 addImageThemeメソッド, 4.3.3 マップへのテーマの追加, 2.4 addJDBCThemeメソッド, 4.3.3 addLinearFeatureメソッド, 4.3.3 addLineStyleメソッド, 4.3.4, 4.3.4 addLinksWithinCostメソッド, 4.3.3 addMarkerStyleメソッド, 4.3.4 addNetworkLinksメソッド, 4.3.3 addNetworkNodesメソッド, 4.3.3 addNetworkPathsメソッド, 4.3.3 addNetworkThemeメソッド, 4.3.3 addPointFeatureメソッド, 4.3.3 addPredefinedThemeメソッド, 4.3.3 addShortestPathメソッド, 4.3.3 addStyleメソッド, 4.3.4 addTextStyleメソッド, 4.3.4 addThemesFromBaseMapメソッド, 4.3.3 addTopologyDebugThemeメソッド, 4.3.3 addTopologyThemeメソッド, 4.3.3 addVariableMarkerStyleメソッド, 4.3.4 addWMSMapThemeメソッド, E.3.4 管理要求, 5

ステータスの取得, 5.2.6

制限, 1.6.2.3

Workspace Managerのサポート, 2.8

管理タスク

停止、再開または削除, 5.2.5

拡張スタイル, 2.2

円グラフの例, 3.1.1.9

テーマ・マッピング, 2.3.12

定義用のXML形式, A.6

拡張スタイル

例, 3.1.1.12

ALL_SDO_CACHED_MAPSビュー, 2.9.4 ALL_SDO_MAPSビュー, 2.9, 2.9.3 ALL_SDO_STYLESビュー, 2.9, 2.9.1 ALL_SDO_THEMESビュー, 2.9, 2.9.2 allow_jdbc_theme_based_foi属性, 1.6.2.15 allow_local_adjustment属性, 1.6.2.5 アニメーション・ロード・バー, B.2 注釈テキスト・テーマ, 2.3.10 antialiasing

マップ・リクエストの属性, 3.1.2.1.1

setAntiAliasingメソッド, 4.3.2

API

Oracle Maps用のJavaScript, 6.2

MapViewerのJavaBean, 4

WMSマップ・テーマの追加, E.3.4

SVGマップ用のMapViewer JavaScript, B MapViewerのXML, 3

WMSマップ・テーマの追加, E.3.1

外観

テーマの外観に影響を与える属性, 2.3.13

領域スタイル, 2.2

定義用のXML形式, A.4

asis属性, 3.1.2.9 縦横比

保持, 3.1.2.2, 3.1.2.3

認証

WMSマップ・テーマ, E.3.3

自動凡例, 2.4.2 キャッシュされたマップ・タイルの自動更新, 3.3.3 AWT headlessモードのサポート, 1.3 正距方位図法

MapViewerでの球面投影に使用, 1.6.2.5

B

バックグラウンド・カラー

WMSリクエスト, E.2.1.3

設定, 4.3.2

バックグラウンド・イメージのURL

設定, 4.3.2

棒グラフ・マーカー・スタイル

定義用のXML形式, A.6.5

ベース・マップ, 2.4

ベース・マップから現行マップ・リクエストへのテーマの追加, 4.3.3

定義(例), 2.4

WMSリクエスト, E.2.1.1

データソースのリスト, 5.3

テーマのpart_of_basemap属性, 3.1.2.20

名前の設定, 4.3.2

use_cached_basemap属性, 3.1.2.1.1

XML形式, A

定義用のXML形式, A.8

basemap

マップ・リクエストの属性, 3.1.2.1.1

BASEMAPパラメータ(WMS), E.2.1.1 BBOXパラメータ(WMS), E.2.1.2 Bean

MapViewer API, 4

bgcolor

マップ・リクエストの属性, 3.1.2.1.1

BGCOLORパラメータ(WMS), E.2.1.3 bgimage

マップ・リクエストの属性, 3.1.2.1.1

バインディング・パラメータ, 2.3.1.3

例, 3.1.1.11

Bing Maps

組込みマップ・タイル層, 6.4

Microsoft Bing Maps座標系へのデータ変換, 6.5

ビットマップ・マスク

GeoRasterテーマ, 2.3.4.2

枠線のマージン

枠テーマ, 3.1.2.2

枠ボックス

WMSリクエスト, E.2.1.2

マップ用の指定, 3.1.2.3

枠テーマ

マップ用の指定, 3.1.2.2, 4.3.2

bounding_themes要素, 3.1.2.2 box要素, 3.1.2.3 bring_cache_online要素, 5.2.10 バケット・スタイル

マップ・リクエストへの追加, 4.3.4, 4.3.4

バケットのラベルの指定, 2.2.2

定義用のXML形式, A.6.1

バグ, 8.1.5 組込みマップ・タイル層, 6.4

C

キャッシュ

キャッシュされたマップ・タイルの自動更新, 3.3.3

メタデータ, 2.5, 5.8.1

空間データ, 1.6.2.6, 5.8.2

事前定義済テーマ, 2.3.1.6

キャッシュ・インスタンス

作成または再定義, 5.2.7

削除, 5.2.8

キャッシュ・ステータス

取得, 5.2.2

caching属性

事前定義済テーマ, 2.3.1.6, A.7

カタログ・データ・ソース, 2.5.1 center要素, 3.1.2.4 中心点

設定, 4.3.2

classgen.jarファイル, E.1.1 clear_cache要素, 5.8.1 clear_theme_cache要素, 5.8.2 クリッカブル(ライブ)地物, 4.3.10 クラスタ

中間層クラスタでのMapViewerのデプロイ, 1.8.1

コレクション・バケット・スタイル

マップ・リクエストへの追加, 4.3.4

離散値, A.6.1.1

コレクション・スタイル

定義用のXML形式, A.6.6, A.6.7

カラー・スキーム・スタイル

マップ・リクエストへの追加, 4.3.4, 4.3.4

定義用のXML形式, A.6.2

カラー・ストップ(ヒート・マップ), A.6.8 色スタイル, 2.2

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.1

MapViewerの構成, 5.9 マージ時の競合

解決, 8.1.4.10

接続情報

データソースの追加, 5.1.1

コンテナ・データソース, 1.6.2.15, 5.1.1 コンテナ・テーマ名(ヒート・マップ), A.6.8 container_ds属性, 1.6.2.15, 5.1.1, 5.1.1 コンテナ制御のロギング, 1.6.2.1 Cookie

認証済ユーザー名の取得, 1.9.2

座標系, 2.4

MapViewerによるマップ・リクエストへの変換, 3.1.1.8

座標系ID

「SRID」を参照

コスト分析

ネットワーク・ノード, 4.3.3

スキーマ間のマップ・リクエスト, 2.7 カスタム・イメージ・レンダラ

作成および登録, C

custom_image_renderer要素, 1.6.2.8

カスタム空間プロバイダ

作成および登録, D

s_data_provider要素, 1.6.2.9

D

データ・プロバイダ

非空間, 1.6.2.10

データソース・メソッド

使用, 4.3.8

データソース

追加, 5.1.1

カタログ, 2.5.1

存在のチェック, 4.3.8, 5.1.5

メタデータ・キャッシュの消去, 5.8.1

container_ds属性, 1.6.2.15, 5.1.1

説明, 2.5

WMSリクエスト, E.2.1.4

リスト, 5.1.4

ベース・マップのリスト, 5.3

名前のリスト, 4.3.8

テーマのリスト, 5.4

管理, 5.1

再定義, 5.1.3

削除, 5.1.2

名前の設定, 4.3.2

マップ・リクエストでの複数のデータソースの使用(themeのdatasource属性), 3.1.2.20, 3.1.2.20

サポートされているデータ型, 8.1.1 data_source_exists要素, 5.1.5 データソース

マップ・リクエストの属性, 3.1.2.1.1

マップ・リクエストでのテーマ属性の指定, 3.1.2.20, 3.1.2.20

DATASOURCEパラメータ(WMS), E.2.1.4 dataSourceExistsメソッド, 4.3.8 DBA_SDO_STYLESビュー, 2.9.1 デバッグ・モード

トポロジ・テーマ, 2.3.6

テーマの追加, 4.3.3

装飾的な外観

テーマの外観に影響を与える属性, 2.3.13

deleteAllThemesメソッド, 4.3.5 deleteMapLegendメソッド, 4.3.2 deleteStyleメソッド, 4.3.4 deleteThemeメソッド, 4.3.5 デモ

MapViewerのJavaBean API, 4.2

MapViewerのデプロイ, 1.4 キャッシュ内のダーティ・マップ・タイル, 3.3.3 dirty_tile_auto_update要素, 3.3.3 disableFeatureSelect関数, B.3.1 disablePolygonSelect関数, B.3.1 disableRectangleSelect関数, B.3.1 doQueryメソッド, 4.3.9 doQueryInMapWindowメソッド, 4.3.9 ドット密度マーカー・スタイル

定義用のXML形式, A.6.4

描画ツール, 8.2.4.2 drawLiveFeaturesメソッド, 4.3.10 DTD

例外, 3.1.5

Geometry(Open GIS Consortium), 3.1.6

情報リクエスト, 3.1.3

マップ・リクエスト, 3.1.2

例, 3.1.1

マップ・レスポンス, 3.1.4 動的テーマ

マップ・リクエストへの追加, 4.3.3

DYNAMIC_STYLESパラメータ(WMS), E.2.1.5 動的に定義されるスタイル, 2.2, 3.1.2.18

マップ・リクエストへの追加, 4.3.4

WMSリクエスト, E.2.1.5

削除, 4.3.4

動的に定義されるテーマ, 2.3.2, 3.1.2.9, 3.1.2.20

「JDBCテーマ」も参照

E

編集セッション領域, 8.2.2

edit_config_file要素, 5.9

編集モード, 8.1.3.1

編集セッション, 8.1.3

enableFeatureSelect関数, B.3.1

enablePolygonSelect関数, B.3.1

enableRectangleSelect関数, B.3.1

enableThemesメソッド, 4.3.5

ESPG

SRSパラメータ(WMS), E.2.1.14

MapViewerを使用したプログラム例

Java, 3.1.1.15

PL/SQL, 3.1.1.16

例外DTD, 3.1.5 EXCEPTIONSパラメータ(WMS)

GetFeatureInfoリクエスト, E.2.3.2

GetMapリクエスト, E.2.1.6

外部属性データ, 2.3.12.1

F

fast_unpickle属性, 3.1.2.20

地物ラベル

翻訳のサポート, 2.3.1.7

対象地物(FOI), 6.1 地物の選択

有効化と無効化, B.3.1

地物ツール, 8.2.4.1 FEATURE_COUNTパラメータ(WMS), E.2.3.3 機能

新規, Preface

対象地物(FOI)

allow_jdbc_theme_based_foi属性, 1.6.2.15

field要素

非表示情報, 3.1.2.9, A.7

フィルタ(空間)

取得, 4.3.9, 4.3.9

fixed_svglabel属性, 3.1.2.20 FOI(対象地物), 6.1 FOI

allow_jdbc_theme_based_foi属性, 1.6.2.15

footnote属性, 3.1.2.1.1, 3.1.2.1.1

マップ・リクエスト, 3.1.2.1.1

footnote_style属性, 3.1.2.1.1, 3.1.2.1.1

マップ・リクエスト, 3.1.2.1.1

書式

マップ・リクエストの属性, 3.1.2.1.1

FORMATパラメータ(WMS), E.2.1.7

G

測地データ

ローカルの非測地座標系への投影, 1.6.2.5

geoFeature要素, 3.1.2.5 Geometry DTD(Open GIS Consortium), 3.1.6 ジオメトリ・ツール, 8.2.4.5 GeoRasterテーマ, 2.3.4

現行マップ・リクエストへの追加, 4.3.3

ビットマップ・マスク, 2.3.4.2

jdbc_georaster_query要素の定義, 3.1.2.6

再投影, 2.3.4.3

ポリゴン・マスクの設定, 2.3.4, 4.3.5

スタイリング・ルールのtheme_type属性, A.7

get_admin_request_task要素, 5.2.6 get_cache_status要素, 5.2.2 get_client_config要素, 5.2.1 get_style_definition要素, 5.7 getActiveThemeメソッド, 4.3.5 getAntiAliasingメソッド, 4.3.2 GetCapabilitiesリクエストおよびレスポンス, E.2.2 getDataSourcesメソッド, 4.3.8 getEnabledThemesメソッド, 4.3.5 GetFeatureInfoリクエスト

検索する属性の指定, E.2.3.10

サポートされる機能, E.2.3

getGeneratedMapImageメソッド, 4.3.7 getGeneratedMapImageURLメソッド, 4.3.7 getInfo関数, B.3.1 getLiveFeatureAttrsメソッド, 4.3.10 GetMapリクエスト

パラメータ, E.2.1

getMapMBRメソッド, 4.3.7 getMapResponseStringメソッド, 4.3.7 getNumLiveFeaturesメソッド, 4.3.10 getScreenCoordinate関数, B.4 getSelectedIdList関数, B.3.1 getSelectPolygon関数, B.3.1 getSelectRectangle関数, B.3.1 getSpatialFilterメソッド, 4.3.9, 4.3.9 getThemeEnabledメソッド, 4.3.5 getThemeNamesメソッド, 4.3.5 getThemePositionメソッド, 4.3.5 getThemeVisibleInSVGメソッド, 4.3.5 スタート・ガイド, 8.1.4 getUserCoordinate関数, B.4 getUserPointメソッド, 4.3.9, 4.3.9, 4.3.9 getWhereClauseForAnyInteractメソッド, 4.3.9, 4.3.9 getXMLResponseメソッド, 4.3.6 GIF形式, 3.1.2.1.1 GIF_STREAM形式, 3.1.2.1.1 GIF_URL形式, 3.1.2.1.1 球面投影, 1.6.2.5 Google Maps

組込みマップ・タイル層, 6.4

Google Maps座標系へのデータ変換, 6.5

グリッド・サンプル係数(ヒート・マップ), A.6.8 GridLinkデータ・ソース, 1.7.1.1 グループ化ツール, 8.2.4.4

H

hasLiveFeaturesメソッド, 4.3.10

hasThemesメソッド, 4.3.5

headless AWTモードのサポート, 1.3

ヒート・マップ・スタイル

定義用のXML形式, A.6.8

height

マップ・リクエストの属性, 3.1.2.1.1

HEIGHTパラメータ(WMS), E.2.1.8 非表示情報(SVGマップ)

マウスを移動したときに表示, 3.1.2.1.1, 4.3.2

hidden_info要素, 3.1.2.9, 3.1.2.9, A.7

非表示テーマ

getThemeVisibleInSVGメソッド, 4.3.5

setThemeVisibleメソッド, 4.3.5

hidden_info属性, 3.1.2.5 hidden_info要素, 3.1.2.9, 3.1.2.9, A.7 hideTheme関数, B.2 高可用性

MapViewerの使用, 1.8

highlightFeaturesメソッド, 4.3.10

I

identifyメソッド, 4.3.9

画像領域のスタイル

マップ・リクエストへの追加, 4.3.4, 4.3.4

画像形式

WMSリクエスト, E.2.1.7

設定, 4.3.2

画像マーカー・スタイル

マップ・リクエストへの追加, 4.3.4, 4.3.4

定義用のXML形式, A.2.2

イメージ・レンダラ

作成および登録, C

custom_image_renderer要素, 1.6.2.8

画像のスケール変更

スケールの自動変更の設定, 4.3.2

イメージ・テーマ, 2.3.3

追加, 4.3.3

jdbc_image_query要素の定義, 3.1.2.7

例, 3.1.1.6

スケール値の設定, 4.3.5

透明度の値の設定, 4.3.5

単位および解像度の値の設定, 4.3.5

スタイリング・ルールのtheme_type属性, A.7

イメージ

スタイルのサンプル画像の取得, 2.2.5

imagescaling

マップ・リクエストの属性, 3.1.2.1.1

索引付きのPNG形式のサポート, 3.1.2.1.1 INFO_FORMATパラメータ(WMS), E.2.3.4 info_request要素, 3.1.3 infoon属性, 3.1.2.1.1 情報リクエストDTD, 3.1.3 初期スケール, 3.1.2.1.1 initscale属性, 3.1.2.1.1 MapViewerのインストール, 1.4 国際化

地物ラベルの翻訳, 2.3.1.7

isClickableメソッド, 4.3.10 問題, 8.1.5

J

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

JAVA_IMAGE形式, 3.1.2.1.1

MapViewerのJavaBeanベースAPI, 4

デモ, 4.2

Javadoc, 4.2

Javadoc

MapViewerのJavaBean API, 4.2

Oracle Maps用のJavaScript API, 6.2 SVGマップのJavaScript関数, B JDBCテーマベースの対象地物, 1.6.2.15 JDBCテーマ, 2.3.2

追加, 4.3.3

複雑なSQL問合せの格納, 2.3.2.2

円グラフ・スタイルの使用, 3.1.1.9

jdbc_georaster_query要素, 3.1.2.6 jdbc_host属性, 5.1.1 jdbc_image_query要素, 3.1.2.7 jdbc_mode属性, 5.1.1 jdbc_network_query要素, 3.1.2.8 jdbc_password属性, 5.1.1 jdbc_port属性, 5.1.1 jdbc_query要素, 3.1.2.9 jdbc_sid属性, 5.1.1 jdbc_tns_name属性, 5.1.1 jdbc_topology_query要素, 3.1.2.10 jdbc_user属性, 5.1.1 結合ビュー

結合ビューで定義されるテーマに必要なスタイリング・ルールのkey_column属性, A.7

JPEG画像形式のサポート, 3.1.2.1.1

K

keepthemesorder属性, 3.1.2.1.1

key_column属性

結合ビューで定義されるテーマ, A.7

既知の問題, 8.1.5

L

label属性, 2.3.12

label_always_on属性, 3.1.2.20

label_max_scale属性, 2.4.1

label_min_scale属性, 2.4.1

空間地物のラベル付け, 2.3.1.1

個々のバケットのラベル・スタイル, 2.2.2

地物ラベルの翻訳, 2.3.1.7

LAYERSパラメータ(WMS), E.2.1.9 凡例, 2.4.2

自動, 2.4.2

削除, 4.3.2

要素, 3.1.2.11

例, 2.4.2

WMSリクエスト, E.2.1.10

設定, 4.3.2, 4.3.2, 4.3.2

LEGEND_REQUESTパラメータ(WMS), E.2.1.10 legendSpecパラメータ, 4.3.2 線スタイル, 2.2

マップ・リクエストへの追加, 4.3.4, 4.3.4

定義用のXML形式, A.3

線形地物

追加, 4.3.3

削除, 4.3.3

線形参照システム(LRS)テーマ, 2.3.11 list_data_sources要素, 5.1.4 list_maps要素, 5.3 list_predefined_themes要素, 5.4 list_styles要素, 5.5 list_theme_styles要素, 5.6 list_workspace_name要素, 2.8 list_workspace_session要素, 2.8 ライブ地物, 4.3.10 ロード・バランサ

MapViewerの使用, 1.8.1

ロード・バー, B.2 ローカル測地データ調整

マップ用の指定, 1.6.2.5

logging要素, 1.6.2.1 ログ情報, 1.6.2.1

コンテナ制御, 1.6.2.1

ロゴ

マップ用の指定, 1.6.2.5

経度/緯度座標系, 2.4 LRS (線形参照システム)テーマ, 2.3.11

M

メイン・ウィンドウ, 8.1.2

Map Builderツール, 7, 7

実行, 7.1

ユーザー・インタフェース(UI), 7.2

Webバージョン, 7.3

マップ・キャッシュの自動更新, 3.3.3 マップ・キャンバス, 8.2.3 マップ・データ・サーバー, 3.2 マップ・データ・サーバー(MDS), 1.6.2.16 マップ画像ファイル情報, 1.6.2.2 マップ凡例, 2.4.2

削除, 4.3.2

例, 2.4.2

legend要素, 3.1.2.11

設定, 4.3.2, 4.3.2, 4.3.2

マップのロゴ, 1.6.2.5 マップの注釈, 1.6.2.5 マップのレンダリング, 1.9 mapリクエストのDTD, 3.1.2

例, 3.1.1

mapリクエスト

スキーマ間, 2.7

MapViewerサービスへの送信, 4.3.6

XML API, 3

mapレスポンス

情報の抽出, 4.3.7

mapレスポンスのDTD, 3.1.4 mapレスポンスの文字列

取得, 4.3.7

結果のマップのファイル名

設定, 4.3.2

マップ・スケール・バー, 8.2.3.2 マップ・サーバー, 3.1 マップ・サイズ

設定, 4.3.2

マップ・タイル層

組込み, 6.4

定義用のXML形式, A.9

マップ・タイル・サーバー, 3.3

構成, 1.6.2.14

マップ・タイトル, 1.6.2.5

設定, 4.3.2

map_request要素, 3.1.2.1

属性, 3.1.2.1.1

map_tile_server要素, 1.6.2.14 map_tile_theme要素, 3.1.2.12 mapbuilder.jarファイル, 7.1 mapdefinition.sqlファイル, 2.9 マップレベルのマウスクリック・イベント・コントロール関数, B.3.2.1 マッパー(レンダラ), 2.5

数, 1.6.2.15, 5.1.1

マッピング・プロファイル, 2.1 マップ, 1.9, 2.4

テーマの追加による作成とレンダリング, 2.4

説明, 2.4

生成方法, 2.6

リスト, 5.3

メタデータ・ビュー, 2.9

スケール, 2.4.1

サイズ, 2.4.1

MapViewer構成ファイル

編集, 5.9

サンプル, 1.6.2

MapViewer Editor

概要, 8.1.1

メイン・ウィンドウ, 8.1.2

MapViewer例外DTD, 3.1.5 MapViewer情報リクエストDTD, 3.1.3 MapViewerマップ・データ・サーバー, 3.2 MapViewerマップ・サーバー, 3.1 MapViewerマップ・タイル・サーバー, 3.3 MapViewerサーバー

再起動, 5.10

MapViewerサーバー, 3 mapViewerConfig.xml構成ファイル

編集, 5.9

サンプル, 1.6.2

マーカー・スタイル, 2.2

マップ・リクエストへの追加, 4.3.4, 4.3.4, 4.3.4

方向設定, 2.2.3.2

線上での使用, A.2.4

定義用のXML形式, A.2

マーキー・ズーム, 8.2.3.1 マスク

ビットマップ(GeoRasterテーマ), 2.3.4.2

max_scale属性, 2.4.1 MBR

マップの取得, 4.3.7

マップ・データ・サーバー(MDS), 1.6.2.16 mds.xmlファイル, 1.6.2.16 編集内容のマージ, 8.1.4.10 メタデータ・キャッシュ, 2.5

消去, 5.8.1

メタデータ・ビュー, 2.9

mapdefinition.sqlファイル, 2.9

Microsoft Bing Maps

組込みマップ・タイル層, 6.4

Microsoft Bing Maps座標系へのデータ変換, 6.5

中間層クラスタ

MapViewerのデプロイ, 1.8.1

min_dist属性, 3.1.2.20 min_scale属性, 2.4.1 最小外接矩形(MBR)

マップの取得, 4.3.7

minimum_pixels属性, 3.1.2.20 複数テーマ・スケール・モード, 3.1.1.10 mode属性, 3.1.2.20 マウス・クリック

SVGマップのイベント・コントロール関数, B.3

関連付けられたポイントの取得, 4.3.9, 4.3.9, 4.3.9

マウスクリック・イベント・コントロール関数, 3.1.2.20, B.3.2.2 マウス移動イベント・コントロール関数, 3.1.2.20, B.3.2.2 マウスアウト・イベント・コントロール関数, 3.1.2.20, B.3.2.2 マウスオーバー・イベント・コントロール関数, 3.1.2.20, B.3.2.2 moveThemeDownメソッド, 4.3.5 moveThemeUpメソッド, 4.3.5 マルチ・データソース, 1.7.1.1 MVTHEMESパラメータ(WMS), E.2.1.11

N

navbar属性, 3.1.2.1.1

ナビゲーション・バー(SVGマップ), 3.1.2.1.1, 4.3.2

ナビゲーション・パネル, 8.2.3.1

ネットワーク分析

最短パス, 2.3.5.2, 4.3.3

コスト内, 2.3.5.2, 4.3.3

ネットワーク接続情報

データソースの追加, 5.1.1

ネットワーク・テーマ, 2.3.5

追加, 4.3.3

jdbc_network_query要素の定義, 3.1.2.8

ラベルの設定, 4.3.5

スタイリング・ルールのtheme_type属性, A.7

ネットワーク・ドライブ

MapViewerの使用, 1.8.1

新機能, はじめに non_map_request要素, 5 non_map_response要素, 5 非mapリクエスト

「管理リクエスト」を参照

非空間属性

識別, 4.3.9

問合せ, 4.3.9

非空間データ・プロバイダ, 2.3.12.1 非空間データ・プロバイダ

登録, 1.6.2.10

north_arrow要素, 3.1.2.13 注釈

マップ用の指定, 1.6.2.5

ns_data_provider要素, 1.6.2.10 number_of_mappers属性, 1.6.2.15, 2.5, 5.1.1

O

OGC(Open GIS Consortium)

ジオメトリDTD, 3.1.6

MapViewerでのWMSサポート, E

MapViewerによるWMTSのサポート, F

oms_error要素, 3.1.5 omserver (URL内)

スタイルのサンプル画像の取得, 2.2.5

onclick属性, 3.1.2.5, 3.1.2.20

マップ・リクエスト, 3.1.2.1.1

onClick関数(SVGマップ), 4.3.2, 4.3.5 onmousemove属性, 3.1.2.20

マップ・リクエスト, 3.1.2.1.1

onmouseout属性, 3.1.2.20 onmouseover属性, 3.1.2.20 onpolyselect属性, B.3.2.3

マップ・リクエスト, 3.1.2.1.1

onrectselect属性, B.3.2.3

マップ・リクエスト, 3.1.2.1.1

Open GIS Consortium

ジオメトリDTD, 3.1.6

MapViewerでのWMSサポート, E

MapViewerによるWMTSのサポート, F

operation要素, 3.1.2.14 operations要素, 3.1.2.15 Oracle Map Builderツール, 7 Oracle Maps, 2.10, 6

対象地物サーバー, 6.1

JavaScript API, 6.2

マップ・タイル・サーバー, 3.3

Oracle Real Application Clusters(RAC)

MapViewerの使用, 1.7

方位ベクター, 3.1.2.5

方位ポイントの使用, 2.2.3

方位ポイント

方位ベクターの方向へのラベルまたはマーカーの方向付け, 2.2.3

範囲外の色(タイル), 3.3.1.7

P

panメソッド, 4.3.6

parameter要素, 3.1.2.16

パラメータ

バインディング, 2.3.1.3

part_of_basemap属性, 3.1.2.20 PDF画像形式のサポート, 3.1.2.1.1 Pickle化

fast_unpickleテーマ属性, 3.1.2.20

setThemeFastUnpickleメソッド, 4.3.5

円グラフ

mapリクエスト, 3.1.1.9

MapViewerを使用したPL/SQLプログラムの例, 3.1.1.16 plsql_package属性, 1.6.2.15 PNG画像形式のサポート, 3.1.2.1.1 PNG8(索引付き)画像形式のサポート, 3.1.2.1.1 ポイント地物

追加, 4.3.3

削除, 4.3.3

ポリゴン・マスク

GeoRasterテーマ用の設定, 2.3.4, 4.3.5

ポリゴンの選択

有効化と無効化, B.3.1

polygon_mask属性, 2.3.4 事前定義済マウスクリック・イベント・コントロール関数, B.3.1 事前定義済テーマ, 2.3.1, 3.1.2.20

追加, 4.3.3

バインディング・パラメータの例, 3.1.1.11

キャッシュ, 2.3.1.6

LAYERSパラメータ(WMS), E.2.1.9

リスト, 5.4

使用されるスタイルのリスト, 5.6

WMSマップ, E.3.2

プリファレンス, 8.2.1 MapViewerのソフトウェア要件, 1.3 preserve_aspect_ratio属性, 3.1.2.2, 3.1.2.3 問題, 8.1.5 進行状態の表示

マップのロード, B.2

ローカルの非測地座標系への測地データの投影, 1.6.2.5 プロパティ, 8.2.1 MapViewerサービスに対するプロキシ(Web)

設定, 4.3.2

Q

問合せタイプ

WMSリクエスト, E.2.3.6

問合せウィンドウ

設定, 4.3.2

QUERY_LAYERSパラメータ(WMS), E.2.3.5 QUERY_TYPEパラメータ(WMS), E.2.3.6

R

RAC (Oracle Real Application Clusters)

MapViewerの使用, 1.7

半径

WMSリクエスト, E.2.3.7

RADIUSパラメータ(WMS), E.2.3.7 rasterbasemap属性, 3.1.2.1.1 比率スケール・モード

例, 3.1.1.10

Real Application Clusters (Oracle RAC)

MapViewerの使用, 1.7

recenter関数, B.1 矩形の選択

有効化と無効化, B.3.1

redefine_data_source要素, 5.1.3 レッドライニング, 6.2 remove_cache_instance要素, 5.2.8 remove_data_source要素, 5.1.2 removeAllDynamicStylesメソッド, 4.3.4 removeAllLinearFeaturesメソッド, 4.3.3 removeAllPointFeaturesメソッド, 4.3.3 レンダラ

カスタム・イメージ・レンダラの作成および登録, C

custom_image_renderer要素, 1.6.2.8

レンダラ(マッパー), 2.5

number_of_mappers属性, 1.6.2.15, 5.1.1

マップのレンダリング, 2.4

セキュアなマップのレンダリング, 1.9

レンダリング・ルール

例, 3.1.1.12

レンダリング・スタイル

スケール範囲, 2.3.1.5

再投影

GeoRasterテーマ, 2.3.4.3

REQUESTパラメータ(WMS)

GetMapまたはGetCapabilities, E.2.1.12

MapViewerのソフトウェア要件, 1.3 解像度

setThemeUnitAndResolutionメソッド, 4.3.5

「競合の解決」ダイアログ・ボックス, 8.1.4.10 mapのレスポンス文字列

取得, 4.3.7

restart要素, 5.10 restart_cache_server要素, 5.2.9 MapViewerサーバーの再起動, 5.10 制限事項, 8.1.5 rotation属性, 3.1.2.1.1 ルール

スタイリング, 2.3.1.1

runメソッド, 4.3.6

S

サンプル画像

スタイルのサンプル画像の取得, 2.2.5

save_images_at要素, 1.6.2.2 編集内容の保存, 8.1.4.10 スケーラブルなスタイル, 2.2.1 スケール・バー, 3.1.2.17, 8.2.3.2 スケール・モード

複数テーマの例, 3.1.1.10

比率の例, 3.1.1.10

マップのスケール, 2.4.1

テーマ用の設定, 4.3.5

スケール範囲

レンダリング・スタイル, 2.3.1.5

scale_bar要素, 3.1.2.17 スケール変更

画像, 3.1.2.1.1

SDO_GEOMETRY 2Dデータ・サポート, 8.1.1 セキュア, 1.9 セキュアなマップのレンダリング, 1.9

plsql_package属性, 1.6.2.15

web_user_type属性, 1.6.2.15

セキュアなレンダリング, 1.9 セキュリティ

security_config要素, 1.6.2.7

security_config要素, 1.6.2.7 選択可能なテーマ(SVGマップ), 4.3.5 selectable_in_svg属性, 3.1.2.5, 3.1.2.20 selectFeature関数, B.3.1 選択イベントのマウスクリック・イベント・コントロール関数, B.3.2.3 sendXMLRequestメソッド, 4.3.6 seq属性, 2.3.12 SERVICEパラメータ(WMS), E.2.1.13 setAllThemesEnabledメソッド, 4.3.5 setAntiAliasingメソッド, 4.3.2 setBackgroundColorメソッド, 4.3.2 setBackgroundImageURLメソッド, 4.3.2 setBaseMapNameメソッド, 4.3.2 setBoundingThemesメソッド, 4.3.2 setBoxメソッド, 4.3.2 setCenterメソッド, 4.3.2 setCenterAndSizeメソッド, 4.3.2 setClickableメソッド, 4.3.10 setDataSourceNameメソッド, 4.3.2 setDefaultStyleForCenterメソッド, 4.3.2 setDeviceSizeメソッド, 4.3.2 setFullExtentメソッド, 4.3.2 setGeoRasterThemePolygonMaskメソッド, 4.3.5 setImageFormatメソッド, 4.3.2 setImageScalingメソッド, 4.3.2 setLabelAlwaysOnメソッド, 4.3.5 setMapLegendメソッド, 4.3.2, 4.3.2, 4.3.2 setMapRequestSRIDメソッド, 4.3.2 setMapResultFileNameメソッド, 4.3.2 setMapTitleメソッド, 4.3.2 setNetworkThemeLabelsメソッド, 4.3.5 setSelectPolygon関数, B.3.1 setSelectRectangle関数, B.3.1 setServiceURLメソッド, 4.3.2 setShowSVGNavBarメソッド, 4.3.2 setSizeメソッド, 4.3.2 setSVGOnClickメソッド, 4.3.2 setSVGShowInfoメソッド, 4.3.2 setSVGZoomFactorメソッド, 4.3.2 setSVGZoomLevelsメソッド, 4.3.2 setSVGZoomRatioメソッド, 4.3.2 setThemeAlphaメソッド, 4.3.5 setThemeEnabledメソッド, 4.3.5 setThemeFastUnpickleメソッド, 4.3.5 setThemeOnClickInSVGメソッド, 4.3.5 setThemeScaleメソッド, 4.3.5 setThemeSelectableInSVGメソッド, 4.3.5 setThemeUnitAndResolutionメソッド, 4.3.5 setThemeVisibleメソッド, 4.3.5 setWebProxyメソッド, 4.3.2 setZoomRatio関数, B.1 ショートカット・キー

Map Builderツールのメニュー, 7.2

最短パス分析, 2.3.5.2

addShortestPathメソッド, 4.3.3

showLoadingBar関数, B.2 showTheme関数, B.2 simplify_shapes属性, 3.1.2.20 サイズ(マップ)

設定, 4.3.2

マップのサイズ, 2.4.1 size_hint属性, 3.1.2.2 snap_to_cache_scale属性, 3.1.2.1.1 空間データ・キャッシュ

消去, 5.8.2

カスタマイズ, 1.6.2.6

空間データ・プロバイダ

カスタム, 1.6.2.9

空間フィルタ

取得, 4.3.9, 4.3.9

空間参照ID

「SRID」を参照

spatial_data_cache要素, 1.6.2.6 スポットライト半径(ヒート・マップ), A.6.8 srid

マップ・リクエストの属性, 3.1.2.1.1

SRID

MapViewerによるマップ・リクエストへの変換, 3.1.1.8

設定, 4.3.2

SRSマッピング

カスタマイズ, 1.6.2.11

SRSパラメータ(WMS), E.2.1.14 srs_mapping要素, 1.6.2.11 積上げスタイル

例, 3.1.1.13

テキスト・スタイルのsticky属性, 2.2.4 style要素, 3.1.2.18 スタイル, 2.2

マップ・リクエストへの追加, 4.3.4

拡張, 2.2

円グラフの例, 3.1.1.9

テーマ・マッピング, 2.3.12

定義用のXML形式, A.6

領域, 2.2

定義用のXML形式, A.4

棒グラフ

定義用のXML形式, A.6.5

バケット

マップ・リクエストへの追加, 4.3.4

バケットのラベルの指定, 2.2.2

定義用のXML形式, A.6.1

コレクション

定義用のXML形式, A.6.6, A.6.7

色, 2.2

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.1

カラー・スキーム

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.6.2

ドット密度

定義用のXML形式, A.6.4

動的な定義, 2.2, 3.1.2.18

マップ・リクエストへの追加, 4.3.4

サンプル画像の取得, 2.2.5 スタイル定義の取得, 5.7 ヒート・マップ

定義用のXML形式, A.6.8

画像マーカー

マップ・リクエストへの追加, 4.3.4, 4.3.4, 4.3.4, 4.3.4

定義用のXML形式, A.2.2

バケットのラベル・スタイル, 2.2.2 線, 2.2

マップ・リクエストへの追加, 4.3.4, 4.3.4

定義用のXML形式, A.3

リスト, 5.5 事前定義済テーマで使用されるもののリスト, 5.6 マーカー, 2.2

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.2

メタデータ・ビュー, 2.9 削除, 4.3.4 サイズのスケール変更, 2.2.1 積上げ

例, 3.1.1.13

テキスト, 2.2

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.5

TrueTypeフォントベースのマーカー

定義用のXML形式, A.2.3

可変マーカー

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.6.3

ベクトル・マーカー

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.2.1

XML形式, A styles要素, 3.1.2.19 STYLESパラメータ(WMS), E.2.1.15 スタイリング・ルール, 2.3.1.1, A

指定用のXML形式, A.7

SVG Basic (SVGB)画像形式のサポート, 3.1.2.1.1 SVG圧縮(SVGZ)画像形式のサポート, 3.1.2.1.1 SVGマップ

display control関数, B.2

fixed_svglabel属性, 3.1.2.20

非表示テーマ, 4.3.5

hidden_info属性, 3.1.2.5

infoon属性, 3.1.2.1.1

initscale属性, 3.1.2.1.1

JavaScript関数, B

マウスクリック・イベント・コントロール関数, B.3

navbar属性, 3.1.2.1.1

ナビゲーション・バー, 4.3.2

ナビゲーション・コントロール関数, B.1

onclick属性, 3.1.2.1.1, 3.1.2.5, 3.1.2.20

onClick関数, 4.3.2, 4.3.5

onmousemove属性, 3.1.2.1.1, 3.1.2.20

onmouseout属性, 3.1.2.20

onmouseover属性, 3.1.2.20

onpolyselect属性, 3.1.2.1.1, B.3.2.3

onrectselect属性, 3.1.2.1.1, B.3.2.3

その他のコントロール関数, B.4

part_of_basemap属性, 3.1.2.20

rasterbasemap属性, 3.1.2.1.1

選択可能なテーマ, 4.3.5

selectable_in_svg属性, 3.1.2.5, 3.1.2.20

setSVGShowInfoメソッド, 4.3.2

setSVGZoomFactorメソッド, 4.3.2

setSVGZoomLevelsメソッド, 4.3.2

setSVGZoomRatioメソッド, 4.3.2

setThemeOnClickInSVGメソッド, 4.3.5

setThemeSelectableInSVGメソッド, 4.3.5

setThemeVisibleメソッド, 4.3.5

SVG_STREAMおよびSVG_URL形式の属性値, 3.1.2.1.1

SVGTINY_STREAMおよびSVGTINY_URL形式の属性値, 3.1.2.1.1

SVGZ_STREAMおよびSVGZ_URL形式の属性値, 3.1.2.1.1

表示テーマ, 4.3.5

visible_in_svg属性, 3.1.2.20

zoomfactor属性, 3.1.2.1.1

zoomlevels属性, 3.1.2.1.1

zoomratio属性, 3.1.2.1.1

SVG Tiny (SVGT)画像形式のサポート, 3.1.2.1.1 switchInfoStatus関数, B.2 switchLegendStatus関数, B.2

T

take_cache_offline要素, 5.2.10

テンプレート付きテーマ, 2.3.1.3

一時スタイル

「動的に定義されるスタイル」を参照

テキスト・スタイル, 2.2

マップ・リクエストへの追加, 4.3.4

方向設定, 2.2.3.1

sticky属性, 2.2.4

定義用のXML形式, A.5

テーマ・マッピング, 2.3.12

外部属性データの使用, 2.3.12.1

theme要素, 3.1.2.20 theme_modifiers要素, 3.1.2.22 theme_type属性

特定の種類の事前定義済テーマ用, A.7

テーマレベルのマウスイベント・コントロール関数, B.3.2.2 テーマ, 2.3

マップへの追加, 2.4

注釈テキスト, 2.3.10

外観に影響を与える属性, 2.3.13

チェック, 4.3.5

空間データ・キャッシュの消去, 5.8.2

削除, 4.3.5, 4.3.5

無効化, 4.3.5 4.3.5

動的

マップ・リクエストへの追加, 4.3.3

動的な定義, 2.3.2, 3.1.2.9, 3.1.2.20 有効化, 4.3.5, 4.3.5, 4.3.5 高速な非Pickle化, 3.1.2.20, 4.3.5 地物の選択

有効化と無効化, B.3.1

SVGの固定ラベル, 3.1.2.20 WMSリクエスト, E.2.1.11 GeoRaster, 2.3.4

現行マップ・リクエストへの追加, 4.3.3

jdbc_georaster_query要素の定義, 3.1.2.6

ポリゴン・マスクの設定, 2.3.4, 4.3.5

スタイリング・ルールのtheme_type属性, A.7

取得, 4.3.5 非表示情報の表示, 3.1.2.1.1 画像, 2.3.3

追加, 4.3.3

jdbc_image_query要素の定義, 3.1.2.7

透明度の値の設定, 4.3.5

単位および解像度の値の設定, 4.3.5

スタイリング・ルールのtheme_type属性, A.7

初期スケール, 3.1.2.1.1 クリック時にコールするJavaScript関数, 3.1.2.5, 3.1.2.20 マウス移動イベント時にコールするJavaScript関数, 3.1.2.20 マウスアウト・イベント時にコールするJavaScript関数, 3.1.2.20 マウスオーバー・イベント時にコールするJavaScript関数, 3.1.2.20 ポリゴン選択時にコールするJavaScript関数, B.3.2.3 矩形選択時にコールするJavaScript関数, B.3.2.3 JDBC, 2.3.2 順序に従った保持, 3.1.2.1.1 リスト, 4.3.5, 5.4 線形参照システム(LRS), 2.3.11 map_tile_theme要素, 3.1.2.12 メタデータ・ビュー, 2.9 最小距離, 3.1.2.20 下に移動, 4.3.5 上に移動, 4.3.5 ナビゲーション・バー, 3.1.2.1.1 ネットワーク, 2.3.5

追加, 4.3.3

jdbc_network_query要素の定義, 3.1.2.8

ラベルの設定, 4.3.5

スタイリング・ルールのtheme_type属性, A.7

north_arrow要素, 3.1.2.13 ベース・マップの一部, 3.1.2.20 事前定義, 2.3.1, 3.1.2.20 ラスター・ベース・マップ, 3.1.2.1.1 解像度の値

設定, 4.3.5

SVGマップ内で選択可能, 3.1.2.5, 3.1.2.20, 4.3.5 GeoRasterテーマのポリゴン・マスクの設定, 2.3.4, 4.3.5 常にラベルを表示, 3.1.2.20, 4.3.5 ネットワーク・テーマ・ラベルの設定, 4.3.5 スケール値の設定, 4.3.5 表示または非表示の設定, 4.3.5 スタイリング・ルール, A.7 テンプレート付き, 2.3.1.3 トポロジ, 2.3.6

追加, 4.3.3

デバッグ・モード, 2.3.6

デバッグ・モード(テーマの追加), 4.3.3

jdbc_topology_query要素の定義, 3.1.2.10

スタイリング・ルールのtheme_type属性, A.7

単位の値

設定, 4.3.5

仮想モザイク, 2.3.4.4 SVGマップでの表示, 3.1.2.20 WFS, 2.3.7 WMSマップ

追加, E.3

追加(JavaBeanベースAPI), E.3.4

追加(XML API), E.3.1

認証, E.3.3

WMTS, 2.3.8 Workspace Managerのサポート, 2.8 XML形式, A ズーム係数, 3.1.2.1.1 ズーム・レベル, 3.1.2.1.1 ズーム比, 3.1.2.1.1 themes要素, 3.1.2.21 シック・クライアント

最適なMapViewer Beanメソッドの使用, 4.3.10

タイルの背景色, 3.3.1.7 タイル層キャッシュ・サーバー

再起動, 5.2.9

タイル層インスタンス

オンライン化, 5.2.10

オフライン化, 5.2.10

タイル層

キャッシュ・ステータスの取得, 5.2.2

クライアント構成の取得, 5.2.1

管理, 5.2

タイルの範囲外の色, 3.3.1.7 タイル・サーバー(MapViewer), 3.3 tile_admin_task要素, 5.2.3, 5.2.5, 5.2.7 タイル

消去, 5.2.3

プリフェッチ, 5.2.3

リフレッシュ, 5.2.3

tiny SVG画像

SVG Tiny (SVGT)画像形式のサポート, 3.1.2.1.1

ヒント

hidden_info属性を使用した指定, 3.1.2.5

タイトル

マップ・リクエストの属性, 3.1.2.1.1

マップ用の指定, 1.6.2.5

title_style属性, 3.1.2.1.1, 3.1.2.1.1

マップ・リクエスト, 3.1.2.1.1

ツール領域, 8.2.4 トポロジ・テーマ, 2.3.6

追加, 4.3.3

デバッグ・モード, 2.3.6

テーマの追加, 4.3.3

jdbc_topology_query要素の定義, 3.1.2.10 スタイリング・ルールのtheme_type属性, A.7 変換ツール, 8.2.4.6 翻訳

地物ラベル, 2.3.1.7

透明度

setThemeAlphaメソッド, 4.3.5

transparency属性, 3.1.2.20 透過

マップ・リクエストの属性, 3.1.2.1.1

TRANSPARENTパラメータ(WMS)

PNG形式でのサポート, E.2.1.16

TrueTypeフォントベースのマーカー・スタイル

定義用のXML形式, A.2.3

U

単位

setThemeUnitAndResolutionメソッド, 4.3.5

測定単位

WMSリクエスト, E.2.3.8

UNITパラメータ(WMS), E.2.3.8 非Pickle化

fast_unpickleテーマ属性, 3.1.2.20

setThemeFastUnpickleメソッド, 4.3.5

use_cached_basemap属性, 3.1.2.1.1 use_globular_projectionオプション, 1.6.2.5 ユーザー・インタフェース(UI)メイン・ウィンドウ, 8.1.2 USER_SDO_CACHED_MAPSビュー, 2.9.4 USER_SDO_EDIT_SESSIONSビュー, 8.1.4.1 USER_SDO_GEOM_METADATAビュー

ビューに基づく事前定義済テーマのエントリ, 2.3.1

行の挿入, 2.3.1

USER_SDO_MAPSビュー, 2.9, 2.9.3 USER_SDO_STYLESビュー, 2.9, 2.9.1 USER_SDO_THEMESビュー, 2.9, 2.9.2 USER_SDO_TILE_ADMIN_TASKSビュー, 2.9 ユーザー定義のマウス・イベント・コントロール関数, B.3.2

テーマレベル, B.3.2.2

ユーザー定義のマウスクリック・イベント・コントロール関数

マップレベル, B.3.2.1

選択イベント, B.3.2.3

V

可変マーカー・スタイル

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.6.3

ベクトル・マーカー・スタイル

マップ・リクエストへの追加, 4.3.4

定義用のXML形式, A.2.1

VERSIONパラメータ(WMS), E.2.1.17 頂点ツール, 8.2.4.3 ビュー

結合ビューで定義されるテーマに必要なスタイリング・ルールのkey_column属性, A.7

メタデータ, 2.9

仮想モザイク・テーマ, 2.3.4.4 表示テーマ

getThemeVisibleInSVGメソッド, 4.3.5

setThemeVisibleメソッド, 4.3.5

visible_in_svg属性, 3.1.2.20

W

Web Map Service (WMS)プロトコル, E

WMSマップ・テーマの追加, E.3

MapViewer用の設定, E.1

WMSで始まるエントリも参照

Web Map Service (WMTS)プロトコル

WMTSで始まるエントリも参照

Web Map Tile Service (WMTS)プロトコル, F MapViewerサービスに対するWebプロキシ

設定, 4.3.2

web_user_type属性, 1.6.2.15 WFSマップ・リクエスト

例, 3.1.1.14

WFSテーマ, 2.3.7 WGS 84座標系, 2.4 WHERE句

取得, 4.3.9, 4.3.9

幅

マップ・リクエストの属性, 3.1.2.1.1

WIDTHパラメータ(WMS), E.2.1.18 コスト内分析, 2.3.5.2

addLinksWithinCostメソッド, 4.3.3

WMS Capabilitiesレスポンス

カスタマイズ, 1.6.2.12

WMSデータソース

GetMapリクエストのデフォルト, E.2.1

WMSマップ・テーマ

追加, E.3

JavaBeanベースAPI, E.3.4

XML API, E.3.1

認証, E.3.3 事前定義済, E.3.2 wms_config要素, 1.6.2.12 wms_getmap_request要素, E.3.1 WMSFilter.jarファイル, E.1.1 WMTS Capabilitiesレスポンス

カスタマイズ, 1.6.2.13

WMTSテーマ, 2.3.8 wmts_config要素, 1.6.2.13 ワークフロー(一般的), 8.1.4 Workspace Manager

MapViewerでのサポート, 2.8

workspace_date属性, 2.8 workspace_date_format属性, 2.8 workspace_date_nlsparam属性, 2.8 workspace_date_tswtz属性, 2.8 workspace_name属性, 2.8 workspace_savepoint属性, 2.8

X

Xパラメータ(WMS), E.2.3.9

X11 DISPLAY変数

AWT Headlessモード使用時には設定不要, 1.3

XML

MapViewerのAPI, 3

ベース・マップの形式、マップ・タイル層

XML形式, A

マップ・タイル層の形式, A スタイルの形式, A テーマの形式, A xmlparserv2.jarファイル, E.1.1

Y

Yパラメータ(WMS), E.2.3.9

Z

ズーム, 8.2.3.1

ズーム係数, 3.1.2.1.1, 4.3.2

ズーム・レベル, 3.1.2.1.1, 4.3.2

ズーム比, 3.1.2.1.1, 4.3.2

設定, B.1

zoomfactor属性, 3.1.2.1.1 zoomInメソッド, 4.3.6, 4.3.6, 4.3.6 zoomlevels属性, 3.1.2.1.1 zoomOutメソッド, 4.3.6, 4.3.6 zoomratio属性, 3.1.2.1.1

オラクルの法律上の注意点について

コピーライトについて

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

アルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のアルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが非公開の試作版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のベータ・トライアル契約のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle PartnerNetwork Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティについて

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。