2009-04-29 8 views
0

私はバグを起こしたか、何か見落としたようです。OpenLayers .containsPointパン後

OpenLayers Vectorレイヤーのすべてのベクトル機能を列挙するコードを記述しました。これは、マウスがベクトル機能の内側にあるかどうかを確認するためのものです。

既存のOpenLayersコントロール(選択など)がマウスの下で機能を見つけた後に停止し、複数の機能が互いに積み重ねられる可能性があるため、これを行う独自のメソッドを作成しなければなりませんでした。

私の問題は、.containsPointメソッドが 'パン'の前のコードを使用しているようです。 ズームインまたはズームアウト後、ジオメトリは正しい場所にあるように見え、マップ上にマウスを置くと、.containsPointが正しく機能します。

マップは、サンプルコードがなければ何か(フィーチャのジオメトリ)

答えて

2

私はこの質問がほとんどの初めの誕生日だったことを実感しています。それはもはや有効ではないかもしれませんが、とにかくそれに答えるための打撃を与えます。

パニングが完了すると、OpenLayers.Control.DragPanはマップを呼び出します。

// only call setCenter if not dragging or there has been a change 

機能で、次のロジックは、このコメントが反映されています。あなたはOpenLayers.Mapパン機能を確認する場合は、内部のこのコメントが表示されます。

はそうです、あなたがパンに行われるたびに、あなたのような何か実行する必要があります。

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); 
} 

を...との事は魔法のあなたのために働く必要があります。

+0

..あなたが言ったように、それはほとんどの質問で最初の誕生日です - 私はこれを修正しました...私は別の方法を呼び出す必要があったことを覚えておくことができます。私は答えを投稿しようとしていました - しかし、その時、私は自分の質問に答えることに「心配しました」。 – Adrian

0

を更新するためにパンされた後、私は何かをする必要はありますが、これを答えることは非常に困難であるスニペット。 OpenLayersはマウスクリックで複数のオブジェクトを選択できます。既にOpenLayers 2.8を試しましたか?

関連する問題