0

バグが発生したか、何かを見落としたようです。

OpenLayers Vectorレイヤー上のすべてのベクター機能を列挙するコードを作成しました。マウスがベクター機能内にあるかどうかを確認します。内部にある場合は、機能に基づいて情報が表示されます。

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

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

マップをパンして何かを更新した後、何かをする必要がありますか(機能のジオメトリ)

4

2 に答える 2

2

この質問はほぼ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);
}

...そして物事は魔法のようにあなたのために働くはずです。

于 2010-04-06T03:45:55.797 に答える
0

サンプルコードスニペットがなければ、これに答えるのは非常に困難です。OpenLayersは、マウスクリックで複数のオブジェクトを選択できます。OpenLayers 2.8をすでに試しましたか?

于 2009-07-23T16:47:41.010 に答える