3

ユーザーがドラッグせずにマーカーを移動する方法に取り組んでいます。基本的に、ユーザーがマーカーをクリックすると、情報ウィンドウのバブルが開きます。吹き出しには、地図上でクリック イベントを設定する JavaScript 関数へのリンクがあります。ユーザーがマップ上のどこかをクリックすると、クリックしたポイントにマーカーが移動するはずです。

私のマップには、18 のズーム レベルがあります。ズーム レベル 15 では、このプロセスは完全に機能します。一度クリックした後にズームインすると、マーカーはクリックした場所に正確に移動します。しかし、ズーム レベル 16 で更新して最初からやり直し、どこかをクリックしようとすると、マーカーがより高い位置に移動し、左に移動します。より高いズーム レベルでこのプロセスを繰り返すと、マーカーはマップ上でさらに上と左 (距離) に移動します。

15 未満のズーム レベルで上記を実行しても問題なく動作します。

コードのスニペットを次に示します。

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation");
map.addLayer(lmLayer);
var marker = landmark['landmark_1234'];// this just pulls the marker out of storage
map.events.register("click", lmLayer, function(evt){
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
    marker.moveTo(pixel);
    OpenLayers.Event.stop(evt);
});

clientX と clientY のクリックをコンソールからログアウトしましたが、ブラウザの左端と上端から正しい x/y 座標が登録されています。しかし、OL は 15 を超えるズーム レベルで moveTo を誤って計算しているようです。

何か案は?

4

1 に答える 1

1

バグ修正を待っている間の少しの回避策

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation");
map.addLayer(lmLayer);
var marker = landmark['landmark_1234'];

map.events.register("click", lmLayer, function(evt){
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
    marker.lonlat = pixel;
    marker.moveTo(pixel);
    // workaround
    marker.draw();
    lmLayer.redraw();
    OpenLayers.Event.stop(evt);
});

乾杯、J。

于 2011-03-08T15:29:12.753 に答える