2016-05-30 11 views
7

リーフレットを使用して、ユーザーが右クリックした場所の地図座標を取得しようとしています。私はリーフレットAPIを使っていますが、これまでのところ、contextmenuイベントを聞いて、クリックしたときに座標を取得するにはmouseEventToLatLngmethodを使用する必要があることを理解しました。しかし、私は私のコードをデバッグして、アクセス可能なlatLng変数をどこにも見ていません。私はAPIで何かを理解できなかったのですか?リーフレットから地図座標を取得する

function setMarkers() { 
     document.getElementById("transitmap").addEventListener("contextmenu", function(event) { 
      // Prevent the browser's context menu from appearing 
      event.preventDefault(); 

      var coords = L.mouseEventToLatLng(event); 
     }); 
    }; 
+0

何をしたいがどこからでもづけし、 "COORDSは" 変数にすることですか? –

+0

実際に、私はその機能の中からコードにアクセスすることを望んでいます。問題は、コンソールが 'mouseEventToLatLng is not defined 'というエラーメッセージを出すコードを実行するときです。 – tylerbhughes

答えて

6

欲しいものはmousemoveイベントです。これは、あなたがそれを行う方法基本的に、

var lat, lng; 

map.addEventListener('mousemove', function(ev) { 
    lat = ev.latlng.lat; 
    lng = ev.latlng.lng; 
}); 

document.getElementById("transitmap").addEventListener("contextmenu", function (event) { 
    // Prevent the browser's context menu from appearing 
    event.preventDefault(); 

    // Add marker 
    // L.marker([lat, lng], ....).addTo(map); 
    alert(lat + ' - ' + lng); 

    return false; // To disable default popup. 
}); 
+0

しかし、私のユースケースの1つは、マップを右クリックしてマーカーを設定し、左クリックを使用して地図を移動できるようにすることです。 mousemoveを使用すると、マウスが地図の周りを移動する際にマーカーがリセットされ続けます。あなたのスニペットについて何か誤解しましたか? – tylerbhughes

+0

@RandomlyKnightedマップの 'mousemove'イベントはマーカーを連続的にリセットしません。左クリックを使用して地図を移動することもできます。これは基本的には、マップ上のカーソルがどこにあるかをキャプチャして、それを 'latlng'に変換することです。次に、地図上で右クリックすると、それは 'latlng'があるマーカーを作成するだけです。 – choz

+1

おかげで多くの助けになりました! – tylerbhughes

3

右クリックイベントの座標が"contextmenu"リスナーのevent引数のlatlng propertyとして直接利用可能であるべきです。

map.on("contextmenu", function (event) { 
    console.log("Coordinates: " + event.latlng.toString()); 
    L.marker(event.latlng).addTo(map); 
}); 

デモ:http://plnkr.co/edit/9vm81YsQxnkAFs35N8Jo?p=preview

+0

ありがとう!それはまさに私が探していたものです。 – tylerbhughes

関連する問題