ユーザーがドラッグせずにマーカーを移動する方法に取り組んでいます。基本的に、ユーザーがマーカーをクリックすると、情報ウィンドウのバブルが開きます。吹き出しには、地図上でクリック イベントを設定する 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 を誤って計算しているようです。
何か案は?