2011年4月27日水曜日

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

9.4. Trigger the web service call
ウェッブサービス呼び出しトリガー

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

*****
次のときにWebサービスを呼び出す必要があります:

* 2つのポイントが描かれている
* ポイントの一つが移動している
* ルーティング方式が変更されている

新しいフィーチャが追加されたときに、ベクトルレイヤは(featureadded と呼ばれる)イベントを発生します。すなわち、このイベントを待ち受け、pgrouting 関数(この関数はすぐに表示されます)を呼び出すことができます。:

draw_layer.events.on({
featureadded: function() {
pgrouting(store, draw_layer, method.getValue());
}
});

注意
イベントに関するいくつかの説明を続ける前に:OpenLayers のイベント(ExtJSや他のフレームワークの同じ apply)は、何かが起こったときに呼び出される関数を許可するシステムです。例えば、レイヤがマップに追加されるときや、マウスがフィーチャと重なるときです。複数の関数は、同じイベントに接続することができます。

ポイントの移動のとき発生するイベントがない、幸いに、点が移動したときに呼びだすための DragFeature コントロールに関数を与えることができます。:

drag_points.onComplete = function() {
pgrouting(store, draw_layer, method.getValue());
};

method combo のために、(ユーザが値を変更したときイベントが発生する)選択引数によって待ち受けオプションをコンストラクタに追加することができます:

var method = new Ext.form.ComboBox({
renderTo: "method",
triggerAction: "all",
editable: false,
forceSelection: true,
store: [
["SPD", "Shortest Path Dijkstra"],
["SPA", "Shortest Path A*"],
["SPS", "Shortest Path Shooting*"]
],
listeners: {
select: function() {
pgrouting(store, draw_layer, method.getValue());
}
});

pgrouting 関数を提供するとき:

// global projection objects (uses the proj4js lib)
var epsg_4326 = new OpenLayers.Projection("EPSG:4326"),
epsg_900913 = new OpenLayers.Projection("EPSG:900913");

function pgrouting(store, layer, method) {
if (layer.features.length == 2) {
// erase the previous route
store.removeAll();

// transform the two geometries from EPSG:900913 to EPSG:4326
var startpoint = layer.features[0].geometry.clone();
startpoint.transform(epsg_900913, epsg_4326);
var finalpoint = layer.features[1].geometry.clone();
finalpoint.transform(epsg_900913, epsg_4326);

// load to route
store.load({
params: {
startpoint: startpoint.x + " " + startpoint.y,
finalpoint: finalpoint.x + " " + finalpoint.y,
method: method
}
});
}
}

pgrouting 関数は、ストアの引数を介してWebサービスを呼び出します。

最初に、2つのポイントが引数で渡された場合、関数がチェックします。その次に、store.removeAll()はレイヤ(ストアとベクトルレイヤが結びついていることを思い出してください)​​から前の結果を消去するために呼び出されます。 2つの点の座標が次に OpenLayers.Projection インスタンスを使用して投影されます。

最後に、store.load()は pgrouting.php 引数を表す params で呼び出されます(それらがHTTP GET 呼び出しへ渡されます)。
*****
続く ...

0 件のコメント: