2. マップファイルの設定とWFSレイヤの提供

WMSサポートの多くと同様に、WFSの発行はある特殊なMETADATAキーワード/値のペアをマップファイルへ追加することで実現できる。

MapServer 以下の条件に合致したレイヤのみを提供、またそのWFS capabilitiesに含む。

  • データソースはベクタタイプとなる(shpファイル、OGR、PostGIS、SDE、SDO、…)
  • LAYER NAMEは必ず設定されなければならず、WFSサーバとして設定する場合には、その最初をアルファベットで始めなければならない(名称を数字で始めたりスペースを含んではならない)
  • LAYER TYPEは次のうちのいずれか: LINE, POINT, POLYGON
  • LAYER DUMP パラメータはTRUEに設定する
  • "wfs_onlineresource" メタデータ:

wfs_onlineresourceメタデータは地図のWebオブジェクトメタデータで設定し、そのサーバへのアクセスすべきURLを指定する。これはGetCapabilities?出力で必要とされるものである。もしwfs_onlineresourceが提供されなければ、Mapserverはデフォルトのものとしてホスト名とスクリプト名を用いようと試みるが、あまりこの仕組みを当てにしてはいけない。 wfs_onlineresourceメタデータを設定することが強く推奨される。

オンラインリソースURLについては WFS 1.0.0仕様 のセクション12.3.3を参照のこと。基本的には、必要なものはhttp://プレフィクス、ホスト名、スクリプト名、場合によっては"map="パラメータと"?"や"&"で終わるものを含んでいるHTTPのURLである。

ここに妥当なオンラインリソースURLを挙げる:

http://my.host.com/cgi-bin/mapserv?map=mywfs.map&

サーバ上のラッパースクリプトを生成することにより、"map="パラメータをURLから隠すことが可能であり、その場合、サーバのオンラインリソースURLは以下のようになる:

http://my.host.com/cgi-bin/mywfs?

これについての詳細はWMSサーバドキュメントの[*howto:wms-server-setting#toc6 オンラインリソースURLについてのより詳細な説明]を参照してください。

2.1 WFS サーバのマップファイル例

以下はWFSサーバとして機能する最小限のマップファイルの例である。必須パラメータに関するコメントに注意。

NAME WFS_server
STATUS ON
SIZE 400 300
SYMBOLSET ../etc/symbols.sym
EXTENT -2200000 -712631 3072800 3840000
UNITS METERS
SHAPEPATH "../data"
IMAGECOLOR 255 255 255
FONTSET ../etc/fonts.txt
 
WEB
  IMAGEPATH "/ms4w/tmp/ms_tmp/" 
  IMAGEURL "/ms_tmp/"
  METADATA
    "wfs_title"            "GMap WFS Demo Server"  ## REQUIRED
    "wfs_onlineresource"   "http://127.0.0.1/cgi-bin/mapserv.exe?"  ## Recommended
    "wfs_srs"               "EPSG:42304 EPSG:42101 EPSG:4269 EPSG:4326"  ## Recommended
    "ows_schemas_location" "http://ogc.dmsolutions.ca"  ## Optional
  END
END
 
PROJECTION
  "init=epsg:42304"
END
 
LAYER
  NAME province
  METADATA
    "wfs_title"    "Provinces" ## REQUIRED
    "gml_featureid" "ID" ## REQUIRED
    "gml_include_items" "all"  ## Optional (serves all attributes for layer)
  END
  TYPE POLYGON
  STATUS ON
  DATA province
  PROJECTION
    "init=epsg:42304"
  END
  DUMP TRUE           ## REQUIRED
  CLASS
    NAME "Canada"
    STYLE
      COLOR 200 255 0
      OUTLINECOLOR 120 120 120
    END
    TEMPLATE "ttt_query.html"
  END
END # Layer
 
END # Map File

2.2 MapserverのWFSでのSRSの取り扱いの規則

Contrary to WMS OGCのWFS仕様はひとつのレイヤ(地物のタイプ)が複数のSRSを配信することを認めていない。また、OGCのWFS仕様ではいずれのレイヤもデフォルトではいかなるデフォルトのSRSも適用されない。あるWFSサーバで配信される各レイヤが異なるSRSを持つことは可能である。

ここにMapserverが各レイヤについて配信し、使用するSRSをどのように決定するかを述べる:

  • もしトップレベルのMapオブジェクトのSRSが定義されているならば、このSRSが全てのレイヤに対して適用される。この場合、レイヤごとのSRS設定がなされていてもそれは単に無視される。
  • トップレベルのMapオブジェクトでのSRSが定義されていなければ、各レイヤはそれぞれのSRSで配信される。
  • SRSが定義されている、とは、EPSGコードを用いたPROJECTIONオブジェクトもしくは"wfs_srs"メタデータが存在しているという意味で用いている。

地図のトップレベルでの"wfs_srs"メタデータの値は、PROJECTIONブロックの設定より優先することに注意。

レイヤレベルでは、wfs_srsメタデータとPROJECTIONオブジェクトの双方が異なる値に設定されている場合、wfs_srsメタデータはこのレイヤを配信する際に用いる投影法として定義され(トップレベルのSRSがないと仮定すると)、PROJECTIONの値はデータの投影法であると仮定される。すなわちこれはデータがWFSクライアントへ提供される前に、PROJECTIONにあるSRSからwfs_srsメタデータで定義された投影法へと再投影されることを意味している。

混乱した? 規則をまとめると、Mapオブジェクトレベルでwfs_srsを設定(Webオブジェクトのメタデータとして)し、レイヤレベルでwfs_srsメタデータを定義しなければほとんどの場合には問題なく動作する。

2.3 WFSサーバのテスト

2.3.1 Capabilitiesメタデータの検証

マップファイルの用意ができたので、サーバが返すXML capabilitiesに間違いが無いかどうかを確認しよう。

webブラウザを用いて、"REQUEST=GetCapabilities?"のようなパラメータをお尻に付加したサーバ上のオンラインリソースURLへアクセスしてみよう。

http://www2.dmsolutions.ca/cgi-bin/mswfs_gmap?SERVICE=WFS&VERSION=1.0.0&REQUEST=getcapabilities

これはapplication/vnd.ogc.wfs_xmlのMIMEタイプを持つ文書を返すはずであり、ブラウザはファイル保存のための画面を用意するだろう。これを保存して、テキストエディタで開いてみよう。

もし全てがうまくいったのであれば、完全なXML capabilitiesドキュメントを手にしているはずである。 "WARNING"の単語を探してみよう…。もしマップファイル中のパラメータやメタデータを見付けられなかった場合、MapserverはXML出力中に"<!—WARNING: "で始まるコメントを挿入する。もしXML出力中になんらかの警告があったのであれば、サーバをWFSクライアントに登録する前にそれらを全て修正しなければならない。さもなければ物事はうまくすすまないであろう。

注意:SERVICEパラメータはすべてのWFSリクエストに設置する必要です。WMS, WFS及び WCSを区別して、それそれ処理を行う。

2.3.2 GetFeatureリクエストのテスト

続いて、我々のサーバが妥当なXML GetCapabilities?応答を生成しているかどうか確認するために、GetFeature?リクエストをテストしなければならない。単純に"VERSION=1.0.0&REQUEST=GetFeature?&TYPENAME=レイヤ名1,レイヤ名2"をサーバのURLについかすると、そのレイヤに関するGMLが帰ってこなければならない。

http://www2.dmsolutions.ca/cgi-bin/mswfs_gmap?SERVICE=WFS&VERSION=1.0.0&REQUEST=getfeature&TYPENAME=park

2.3.3 実際のクライアントでのテスト

WFSクライアントに触れたことがあるのであれば、新しいサーバのオンラインリソースを登録して実行してみよう。

もしWFSクライアントをインストールしていないのであれば、ここにいくつかのポインタを示す:

  • MapServer自身もWFSとして利用できる。WFS クライアントHOWTOを参照のこと。
  • DeegreeはWFSクライアントを提供している。
  • uDigはWMS/WFSよりレイヤ追加できる。
  • owsview Viewer Client Generatorはオンラインアプリケーションであり、WMSおよびWFSのレイヤを妥当なWMSおよびWFSのCapabilities XMLにより追加することができる。
2.3.4 GETおよびPOSTリクエストのサポート

Mapserver4.2から、MapserverはXML形式でのPOSTリクエストとGETリクエストをサポートしている。 MapserverでのデフォルトはPOSTである。

2.3.5 フィルタエンコーディングのサポート

Mapserver4.2から、MapserverはWFSのGetFeature?リクエストでのフィルタエンコーディング(FE)をサポートしている。より詳細なサーバサイドでの情報は フィルタエンコーディングHOWTO を参照のこと。

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License