質問

バグを発見したか、何かを見落としているようです。

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をすでに試しましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top