GeoExt、OpenLayers を使用して Web アプリケーションを開発しており、独自の GeoServer を使用してさまざまなマップを提供しています。それでも、必要に応じてユーザーが他の WMS を追加できるようにして、必要なすべてのレイヤーを操作できるようにしたいと考えています。
したがって、GetFeatureInfo リクエストに関する私の問題。現在、geoext のマップ パネルにツールバー ボタンが追加されています。
new GeoExt.Action({
iconCls: "feature",
map: map,
toggleGroup: "tools",
tooltip: "Feature",
control: featureControl
})
その制御属性は
var featureControl = new OpenLayers.Control.WMSGetFeatureInfo({
queryVisible: true,
drillDown: true,
infoFormat:"application/vnd.ogc.gml"
});
また、応答を受け取ったら本当にやりたいことを実行するイベント リスナーも定義しましたが、ここでは関係ありません。私の問題は次のとおりです。
2 つ以上の可視レイヤーがあり、そのうちの少なくとも 1 つが異なるソースからのものであるポイントをユーザーがクリックすることを考慮すると、OpenLayers は異なるソースごとに 1 つの AJAX 要求を実行する必要があり、OpenLayers 自身のドキュメントから、
GetFeatureInfo 応答を受信したときにトリガーされます。イベント オブジェクトには、応答の本文 (文字列) を持つ text プロパティ、解析された機能の配列を持つ features プロパティ、要求をトリガーしたマウス クリックまたはホバー イベントの位置を持つ xy プロパティ、および request プロパティがあります。リクエスト自体で。drillDown が true に設定され、すべてのレイヤーからフィーチャ情報を収集するために複数のリクエストが発行された場合、テキストとリクエストには、最後のリクエストのレスポンス ボディとリクエスト オブジェクトのみが含まれます。
だから、ええ、明らかにすぐにはうまくいきません。デバッガーを見ると、異なるソースから 2 つのレイヤーを指定すると、実際にはリクエストを処理します。最初の応答を待たずに次の応答にジャンプするだけです (明らかに非同期です)。つまり、上記のように最初のリクエストを実行し、それが完了して応答が保存されたら、次のリクエストに進みます。しかし、GeoExt が使用するデータ構造にはまだ慣れていません。
不足している API (GeoExt または OpenLayers) オプション/メソッドはありますか? 良い回避策はありますか?
読んでくれてありがとう :-)
PS: 説明不足で申し訳ありません。英語は私の母国語ではありません。上記の何かが十分に明確でない場合はお知らせください:)