2011年4月27日水曜日

16 pgRouting in Debian6 10 - ルーティングをブラウザで表示4

9.3. Call and receive data from web service
ウェッブサービスからデータを呼び出し受け取る

で、コードを説明しています。
訳しながらみていきたいと思います。

*****
ウェッブサービスからルートを取得する基本的なワークフローは、

1.点の座標を EPSG:900913 から EPSG:4326 へ変換する
(今回の東京都のマップの場合は、 EPSG:2456 から EPSG:4326 へ変換)
2.ウェッブサービスを正確な引数(メソッド名と2つの点の座標)で呼び出す
3.ウェッブサービスの応答を解析する: GeoJSON を OpenLayers.Feature.Vector へ変換する
4.すべての座標を EPSG:4326 から EPSG:900913 へ変換する
(今回の東京都のマップの場合は、 EPSG:4326 から EPSG:2456 へ変換)
5.この結果をベクトルレイヤへ追加する

最初の項目は、新しいものです。すなわち、地図は EPSG:900913(東京都のマップは EPSG:2456) 投影(OSM レイヤを使用するため)を使用して、Webサービスは EPSG:4326 座標を期待しています。そのため、データを送信する前に再投影する必要があります。これは大したことではありません。それには、Proj4js の JavaScript ライブラリを使用するだけです。

(2番目の項目は、次の章で説明されている Web サービスを呼び出します。)

pgrouting.php のルーティング Web サービスは、GeoJSON へ FeatureCollection オブジェクトを返します。FeatureCollection は、単にフィーチャの配列です。すなわち、各ルートセグメントに対して1つのフィーチャです。 OpenLayers と GeoExtは、この形式を処理するために必要なすべてのものを持っているので、これは非常に便利です。作業を効率的にするため、GeoExt.data.FeatureStore を使用します:

var store = new GeoExt.data.FeatureStore({
layer: route_layer,
fields: [
{name: "length"}
],
proxy: new GeoExt.data.ProtocolProxy({
protocol: new OpenLayers.Protocol.HTTP({
url: './php/pgrouting.php',
format: new OpenLayers.Format.GeoJSON({
internalProjection: epsg_900913,
externalProjection: epsg_4326
})
})
})
});

ストアは、単に情報を記憶するためのコンテナです:データを送り出し、取り出すことができます。

すべてのオプションを説明します:

layer:引数はベクトルレイヤです。すなわち、レイヤを指定することにより、FeatureStore は自動的にこのレイヤに受信されたデータを描画します。これは、上記のリストの最後の項目(ベクトルレイヤにこの結果を追加)に必要なものです。

fields:ジオメトリと一緒に返されるすべての属性を示します。すなわち、ここに設定することで pgrouting.php はセグメントの長さを返します。この情報は、このワークショップで使用されていないことに注意してください。

proxy:プロキシの項目はデータが取得される場所を指定します。すなわち、今回は HTTP サーバからの場合、になっています。プロキシ型は GeoExt.data.ProtocolProxy です。すなわち、このクラスは ExtJS の世界(ストア)と OpenLayers の世界(プロトコルオブジェクト)を接続します。

protocol:この OpenLayers コンポーネントは、URL(PHPスクリプト)にHTTP 要求を作成し、応答(フォーマットオプション)を解析することができます。 internalProjection と externalProjection オプションを追加することにより、形式によって座標の再投影が実行されます。

私たちは今、Webサービスによって返されたデータを処理するために必要なすべてのものを持っています。次の章では、サービスを呼び出すタイミングと方法を説明します:
*****
続く ...

0 件のコメント: