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が帰ってこなければならない。
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 を参照のこと。





