質問
バグを発見したか、何かを見落としているようです。
OpenLayers Vectorレイヤー上のすべてのベクターフィーチャを列挙するコードを作成しました-マウスがベクターフィーチャ内にあるかどうかを確認します-そうであれば、フィーチャに基づいて情報を表示します。
既存のOpenLayers Controls(selectなど)がマウスの下で機能を見つけると停止するため、これを行うには独自のメソッドを作成する必要がありました。また、いくつかの機能が互いに重なり合う可能性があります。
私の問題は、.containsPointメソッドが「パン」前の座標を使用しているように見えることです。 ズームインまたはズームアウトした後、ジオメトリは適切な場所にあるように見え、マップ上でマウスを振ると.containsPointが正しく機能します。
何かを更新するためにマップをパンした後、何かをする必要がありますか(フィーチャのジオメトリ)
解決
この質問はほぼ1歳の誕生日であり、もう有効ではないかもしれませんが、とにかく答えてみましょう。
OpenLayers.Control.DragPanは、パンが完了するとマップを呼び出します。 OpenLayers.Mapパン機能をチェックすると、次のコメントが内部に表示されます。
// only call setCenter if not dragging or there has been a change
関数内の次のロジックは、このコメントを反映しています。
はい、パンが完了するたびに、次のようにする必要があります:
dragpan.handler.up = function(evt)
{
dx = dragpan.handler.last.x - evt.x;
dy = dragpan.handler.last.y - evt.y;
var centerPx = map.getViewPortPxFromLonLat(map.getCenter());
var newCenterPx = centerPx.add(dx, dy);
var newCenterLonLat = map.getLonLatFromViewPortPx(newCenterPx);
map.setCenter(map.getCenter() + dragpan.handler.xy);
}
...そして物事は魔法のように機能するはずです。
他のヒント
サンプルコードスニペットがなければ、これに答えることは非常に困難です。 OpenLayersは、マウスクリックで複数のオブジェクトを選択できます。 OpenLayers 2.8をすでに試しましたか?