2016-08-19 15 views
1

私はol.overlayがドラッグ可能であるようにしようとしていますが、私はそれを行うことができません。私はこの例(http://openlayers.org/en/v3.2.1/examples/drag-features.html?q=drag)を見つけましたが、ol.Featuresを使用しています。必要なものを表示するためにcustom -html divを使用できるので、必要なのはオーバーレイです。私はまた、私が望むことをすることができる非常に興味深い例を見つけましたが、Googleマップv3を使用して行われ、ol3のために必要です。
ありがとうございます。OpenLayers 3でol.Overlayをドラッグ可能にすることはできますか?

答えて

0

UPDATE:このol.Map.prototype.forEachOverlayAtPixel方法の必要はありません

https://github.com/openlayers/ol3/issues/5760を参照してください)。

DOMオーバーレイ要素にmousedownリスナーを登録するだけでよいです。 Fiddle updated


ol.Overlay OL3で貧弱タイプですが、いくつかの作品で、はい、あなたはそれを達成することができます。 ol.Featureは全能で、あなたが本当に必要ならば私はこれを思いついたdemo fiddle

考え方は次のとおりです。

  • pointerdownマップイベントをリッスンし、クリックしたピクセルのオーバーレイがありますかどうかをチェック。

    • ol.Map.prototype.forEachOverlayAtPixel - ちょうど質問
  • 無効ol.interaction.DragPanのために作成 - 地図のパン。

  • pointermoveを聞き、オーバーレイ位置を設定します。

  • pointerupをリッスンし、ol.interaction.DragPanを復元します。

+0

こんにちは、ありがとう、本当に助けてくれました!
よろしく:) – Alberto

1

オーバーレイのdivに「mousedown」イベントリスナーを登録するだけで済みます。そのリスナーの中で、ウィンドウに 'mousemove'イベントと 'mouseup'イベントを登録します。 'mousemove'の位置を更新するには、ol.Map#getEventPixel()メソッドを使用します。このメソッドは、引数として 'mousemove'イベントを受け取ります。 'mouseup'では、ウィンドウリスナーの登録を解除するだけです。

marker_el.addEventListener('mousedown', function(evt) { 
    function move(evt) { 
    marker.setPosition(map.getEventCoordinate(evt)); 
    } 
    function end(evt) { 
    window.removeEventListener('mousemove', move); 
    window.removeEventListener('mouseup', end); 
    } 
    window.addEventListener('mousemove', move); 
    window.addEventListener('mouseup', end); 
}); 

実例はhttp://jsfiddle.net/rnzgfg89/6/を参照してください。

関連する問題