10. Metacat で Geoserver を使用する

GeoServer 2.0.2 (Java で書かれたオープンソースの Web Mapping Service (WMS))が Metacat に同梱されており、 空間データをウェブ配布地図として表示するのに使用できる。 Metacat は OpenLayers (http://openlayers.org/) を使って 生成された地図の操作ができるウェブベースのユーザインタフェイスを 提供する。 どんな WMS互換クライアントであっても使うことができる。 (たとえば ArcGIS, QGIS, JUMP, UDig, OpenLayers, Mapbender, Map Builder)

重要: この地図機能を使うつもりがあるかどうかにかかわらず、 安全のため、初期パスワードを使用しないようにするために GeoServer の設定を実行するべきである。 そのやり方については「Geoserver の設定」を参照のこと。

_images/image051.jpg

Metacat の GeoServer によって生成された地図。 点と「四角い境界線」は KNB の Metacat リポジトリに格納されたデータセットの 地理的な範囲を示している。

GeoServer はさまざまな種類のベクトル GIS データをサポートしており、 それを Styled Layer Descriptors (SLDs) を使って整形したり、画像として 出力したり(初期状態)、未加工のベクトルデータ(GML や KML)として 出力できる。

現時点では、GeoServer には下記の制限がある。

  • GeoServer は誰でも使える文書しか地図化できない。 地図サーバのアクセス制御機能が Metacat ほどには細かくないからである。

Metacat の開発者たちは Metacat の地図機能を拡張し改良し続けるつもりである。 もしこのような活動に貢献することに関心があるなら、または 地図化ソフトウェアのアーキテクチャと将来的な計画についてより学ぶことに 関心があるなら、ぜひ Metacat 開発チームに連絡して欲しい (metacat-dev@ecoinformatics.org).

10.1. インストールと設定

GeoServer ウェブアプリは Metacat の兄弟としてインストールされるべきである。 GeoServer を実行したくない場合は、配置作業を省くことができる。 しかしその場合は地図を使用するスキンは正しく表示されないだろう。 (註: GeoServer は PermGen 空間として最低でも 128MB を設定するように 推奨している)

Metacat は GeoServer 用に予め設定されたデータディレクトリを用意している。 これには、世界の国々の基本レイヤーと、Metacat の空間キャッシュを見るように 設定した初期設定が含まれている。 Metacat の設定インタフェイスを使ってGeoServer がこの共有データディレクトリを 使用するように設定できる。 GeoServer を更に設定するには、ウェブベースの設定ユーティリティを使う。 これは http://your.server.com/context/geoserver.jsp で使用可能である (たとえば http://knb.ecoinformatics.org/metacat/geoserver.jsp)。

一般設定には以下のものが含まれる。

  • ウェブページやスキンに地図を追加する
  • 地図の大きさと初期範囲を設定する
  • HTML の地図インタフェイスのレイアウトを設定する
  • 場所を選択するドロップダウンメニューを設定する
  • 地理データの見栄えを設定する(シンボルや色分け)
  • 地図に他の空間データを追加する
_images/image053.png

GeoServer のウェブベースの管理インタフェイス

註: いくつかの設定は XML ファイルにも作る必要があるかもしれない。

OpenLayers(Metacat はこれを GeoServer の WMS サービスのフロントエンドとして 使用する)はインタフェイス用部品や「ウィジェット」(たとえば、地図、 拡大/縮小、レイヤ一覧、「場所を選ぶ」ドロップダウンメニュー、縮尺、 緯度経度座標、検索フォーム)を提供し、ウェブベースの地図アプリケーションを 最小の労力で簡単に配置できるようにしてくれる。

OpenLayers は地図インタフェイスを調整するために 3つの設定ファイルを持っている。 初期設定は以下にある:

$METACAT/lib/style/common/spatial/
文書 場所 説明
地名ファイル locations.jsp 予め定義された場所の一覧(名前と緯度経度の境界)
主地図表示機能 maps.js 地図、ウィジェットとそれらの振る舞いを定義
地図表示とページレイアウト map.jsp 地図の読み込みとウィジェットのレイアウトの制御

註: 初期状態では、Metacat の初回再起動時に、Metacat はリポジトリ内の 文書についての地理的情報を含む「空間キャッシュ」を生成する。 その振る舞いは lib/metacat.properties に指定されており、 regenerateCacheOnRestart パラメータが true に設定されている。 その空間キャッシュ内の情報は GIS互換のフォーマット (ESRI シェイプファイル)で格納されており、文書名と地理的範囲が含まれている。 文書が Metacat リポジトリに追加、削除、更新された時、 Metacat は自動的に空間キャッシュに変更を反映させる。 キャッシュの生成にはかなりの時間がかかる(数千の文書の場合、 数分)ため、Metacat は空間キャッシュが生成されたら regenerateCacheOnRestart プロパティを false に再設定する。 なお、Metacat をアップグレードしたり再インストールした場合は、 空間キャッシュは再度生成される。

10.1.1. 地図をウェブページやスキンに追加する

地図をウェブページに追加するには、単に iframe を使って地図インタフェイスを 読み込ませる:

<iframe scrolling="no" frameborder="0" width="780" height="420"
        src="/metacat/style/common/spatial/map.jsp">
</iframe>

地図のURL /metacat/style/common/spatial/map.jsp はデフォルトの地図 インタフェイスである。 地図インタフェイスを調整するつもりの場合は、この map.jsp ファイルを 各自のスキンのディレクトリにコピーする (default または独自スキンのディレクトリに)。

cp -r style/common/spatial/map.jsp /style/skins/<myskin>/spatial

調整された地図には /metacat/style/skins/<myskin>/spatial/map.jsp というURLでアクセスできる。

10.1.2. 地図の大きさと初期範囲を設定する

地図の大きさと初期範囲を設定する前に、 地図のレイアウトページを各自のスキンディレクトリにコピーしておくこと。 (ディレクトリについては Metacat の設定 を参照) ファイルをコピーしたら、 ${skin.dir}/spatial/map.jsp にある地図の初期範囲を修正する。

地図の初期範囲を変更するには、境界線を編集する。 初期状態では地球全体が見えるようになっている。 また initMap() 関数にスキン名が与えるようにし、 空間検索の結果が正しく整形できるようにするべきである。

<script type="text/javascript">
    function init() {
       var bounds = new OpenLayers.Bounds(-180,-90,180,90);
       // make the map for this skin
       initMap("<%=GEOSERVER_URL%>", "<%=SERVLET_URL%>", "default", bounds);
    }
</script>

地図の大きさ(高さ/幅)は、 map.jsp ページ内にある #map という CSS 項目によって制御できる。

10.1.3. HTML 地図インタフェイスのレイアウトを設定する

地図の大きさと初期範囲は ${skin.dir}/spatial/map.jsp で編集できる。

map.jsp は単純なコンテナであるが、他のより複雑なページの中に 読み込ませることができる。 map.jsp には地図、ウィジェットと場所ドロップダウンメニューが含まれている。

10.1.4. 「場所を選ぶ」ドロップダウンメニューの設定

「場所を選ぶ」ドロップダウンメニューに出て来る場所は locations.jsp ファイルに指定されている。 locations.jsp は共通の空間テンプレートから各自のスキンディレクトリにコピー できる。 それぞれの場所は HTML の <option/> タグによって定義される。 値とラベルを編集して新しい場所を編集したり追加する。

<option value=“-149.725,68.475 -149.3254,68.725”> Arctic LTER (ARC)</option>

10.1.5. 地理データの見栄えを設定する(たとえばシンボルや色分け)

地理空間データは Styled Layer Descriptors (SLD) を使って整形する。 データの点や境界線用のデフォルトの SLD は /lib/spatial/geoserver/data/styles/ 内の data_points_style.sld とdata_bounds_style.sld である。

GeoServer で SLD を使うための詳しい解説については GeoServer の説明書を見ること。:

http://docs.geoserver.org/

10.1.6. 他の空間データをウェブ地図に追加する

サーバ上にベクトルGISデータ(たとえば気象情報や地形情報)があり、 それを地図に読み込ませたい場合は、 まずそのデータを GeoServer に登録しなければならない。 データを登録したら、地図にそのレイヤを追加することができる。 また WMS を通じて誰でも利用できる空間レイヤを追加することもできる (何百もの空間データが利用可能である。wms-sites.com に良いカタログがあるので 調べてみなさい)。 誰でも使えるレイヤを追加するやり方についてはこの節の最後に記す。

データを登録して地図に追加するには、

  1. http://your.server/geoserver を開いて GeoServer にログインし、 Data > Stores にある “data stores” 設定ページに進む。
  2. “metacat” ワークスペースにあるシェイプファイルから、 新しいベクトルデータソースを作成する。
_images/image055.png

GeoServer のウェブベース管理インタフェイスを使って新しいシェイプファイルを 作成する。

  1. Description は、他の管理者にこの DataStore についての情報を提供するのに 内部的によく使われるものである。「送信」をクリックする
  2. Data > Layers から “Layers” 設定ページに進む。 作成した新しいデータソースから新しいレイヤを追加する。
  3. また、新しいレイヤに空間参照システム(SRS)番号を定義するべきである。 だいたいの緯度経度データは “4326” である。 他の投影法を使用している場合は、ヘルプを参照して空間参照システムを 決めること。
_images/image057.png

GeoServer の FeatureType 設定。手順5 のSRS設定の部分を強調表示してある。

  1. Publishing タブにあるドロップダウンメニューのスタイルを用いて レイヤを整形する。または新しい SLD を作成して新しいスタイルオブジェクトと 対応するSLDを作成する(この方法はスタイルをより高度に制御できる)。
  2. Layer Preview を用いて、整形されたデータを WMS レイヤとして出力してみる。
_images/image058.png

GeoServer の Layer Preview は OpenLayers に新しいレイヤを 表示させることができる。

  1. デフォルトの map.js ファイル(OpenLayers において地図を組み合わせる ためのもの。 style/common/spatial/map.js )を 各自のスキンのspatial ディレクトリにコピーする。
  2. init() メソッドを編集して、地図に新しいレイヤを読み込ませる。 重ね書きしてもいいし、基本レイヤとしてでもいい。
  3. ブラウザで地図インタフェイスを開く。既存のレイヤと一緒に新しいレイヤが 表示されるはずである。

10.1.7. WMS を通じて誰でも利用可能な外部の空間データを追加する

WMS を通じて誰でも利用できる空間データが何百もある。 (wms-sites.com に良いカタログがあるので調べてみなさい)。 これらのデータソースを地図に追加するには、各自のスキンの spatial/map.js ファイルにそのレイヤを追加する。

10.2. 空間検索

指定された地理的な区域の中に入る文書を Metacat リポジトリから見つけ出すには、 Metacat の spatial_query 操作を使って空間キャッシュを検索する。 Metacat は WFS/WMS 標準によってサポートされている検索ならどのようなものでも 実行できる。

空間検索文字列の例は、:

http://localhost/metacat/metacat?action=spatial_query&xmin=-117.5&xmax=-64&ymin=3&ymax=46&skin=default

ここで xmin, xmax, ymin, ymax は、それぞれ、 西、東、南、北の境界座標(境界区画)を表している。 空間検索操作は、指定された空間座標に重なるか、その中に含まれる全文書を 返す。 検索結果は指定されたスキンのスタイルを用いてHTML化されて返される (この例では、default スキン)。