2016-05-30 33 views
7

Sto provando a utilizzare Leaflet per ottenere le coordinate della mappa di un utente che ha fatto clic con il pulsante destro del mouse. Ho esaminato l'API di Leaflet e finora ho capito che ho bisogno di ascoltare l'evento contextmenu e utilizzare mouseEventToLatLngmethod per ottenere le coordinate quando si fa clic. Tuttavia, quando eseguo e eseguo il debug del mio codice, non vedo una variabile latLng accessibile da nessuna parte. Mi è mancato di capire qualcosa nell'API?Come ottenere le coordinate della mappa dall'opuscolo

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

Quello che vuoi è quello di rendere "coords" variabile accessibile da tutto il mondo? –

+0

In realtà, mi piacerebbe accedere alle corde dall'interno di quella funzione. Il problema è quando eseguo il codice, la console mi dà un messaggio di errore che dice "mouseEventToLatLng non è definito". – tylerbhughes

risposta

6

Che cosa si vuole ottenere è mousemove evento. Questo è fondamentalmente come lo si fa,

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

Ma uno dei miei casi d'uso è quello di impostare il marcatore facendo clic destro sulla mappa in questo modo posso ancora usare il tasto sinistro del mouse per spostare la mappa intorno. Se utilizzo Mousemove, ripristinerà continuamente il marcatore mentre il mouse si sposta sulla mappa. Ho frainteso qualcosa sul tuo frammento? – tylerbhughes

+0

@RandomlyKnighted L'evento 'mousemove' della mappa non ripristinerà continuamente il marker. Puoi anche usare ancora il tasto sinistro del mouse per spostare la mappa. Ciò che sostanzialmente fa è catturare il cursore sulla mappa e tradurlo in 'latlng'. Quindi, quando fai clic con il tasto destro sulla mappa, dovrebbe solo creare il marker in cui quella 'latlng' è .. – choz

+1

Grazie che ha aiutato molto! – tylerbhughes

3

Le coordinate della manifestazione del tasto destro dovrebbero essere direttamente disponibile come latlng property della event argomento del "contextmenu" ascoltatore.

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

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

+0

Grazie! Questo è esattamente quello che stavo cercando. – tylerbhughes