2011-02-26 15 views
7

次のコードに示すように、マーカーはドラッグ可能です。場合によっては、マーカーが間違った領域(ポリゴン)にドロップされた場合、ドロップイベントを取り消したいので、マーカーが元の位置に自動的に戻ってくることがあります。どのようにGoogleマップのマーカーのドラッグ操作をキャンセルするには?

function placeMarker(latlng, color, isDraggable) { 
    var marker = new GMarker(latlng, { icon: getIcon(color), draggable: true }); 
    map.addOverlay(marker); 
    GEvent.addListener(marker, "dragend", function() { 
     //redraw polygons again 
    }); 
    GEvent.addListener(marker, "click", function() { 
     var latlng = marker.getPoint(); 
     map.openInfoWindowHtml(marker.getPoint(), latlng.y + ", " + latlng.x); 
    }); 
    return marker; 
} 

問題は、それがすでにdragendイベントにドロップだとき、私は、マーカーのドラッグイベントをキャンセルすることができる方法ですか?

+1

理由だけではなく、すべてのマーカーをドラッグ可能にするマーカーの緯度/経度を表示する情報ウィンドウを使用して、いないではありませんか? –

+0

ドラッグ可能なプロパティをfalseに、クリック可能なプロパティをtrueに宣言するだけです。彼らはまだクリックやマウスオーバーイベントを聞きます。 – amenadiel

+0

@MattBall私はドラッグ可能にする必要があります。 –

答えて

1

この問題が発生しても解決策が見つからない場合は、この問題が再び発生します。電話するにはevent.cancelDrag()があればいいです。

  • dragstartでは、現在の保存場所preLocation
  • としてdragend使用containsLocation(e.latLng, mypolygon)上:

    私は考えることができるすべてのバックそれは前にあった場所に移動しない場合は、マーカーはmypolygonに属しているかどうかを確認することです

    • はい=>何も
    • 何もしない:preLocationにマーカーの場所を設定。

google map containsLocation

google map Events

1

私はGoogle Maps APIをサポートしていることを覚えていませんが、マーカの動きをスタックに保存し、必要なときに古い位置を抽出することで、この機能を利用できます。 私はそれが反駁できない答えであることを知っています。それは単に一般的なアイデアです。しかし、私はそれが役に立つと願っています。

+0

本当に、あなたはなぜマーカーをぼかしできないようにしたくないのですか? –

+0

これは、ここに実装されているメソッドです:[Duncanのブログ - Google Maps API - draggable markerをロック](https://duncan99.wordpress.com/2015/03/21/google-maps-api-locked-draggable-markers /) – ChrisW

関連する問題