Déclencher un événement de clic sur la carte Leaflet?


15

Est-il possible de faire se produire un événement de clic à un lat / lon particulier sur une carte de brochure?

Je voudrais faire apparaître une fenêtre contextuelle associée à un point à un emplacement particulier.

J'ai essayé plusieurs combinaisons de map.fireEvent('click', latLon)et map.fire('click', latLon)mais je ne peux pas trouver un des exemples ou des références décrivant cette approche. Est-ce quelque chose qui peut être fait?

Une approche que j'ai essayée (et qui fonctionne) consiste à identifier l'objet dans la couche de feuillet et à déclencher un événement de clic à l'aide layer[id].fireEvent('click'). Cependant, cela nécessite que je connaisse l'ID d'objet et que je souhaite pouvoir simplement utiliser un lat / lon pour déclencher ce clic.


Je souhaite ouvrir une fenêtre contextuelle à l'emplacement cliqué et je ne veux pas ajouter de marqueur ou ajouter une nouvelle fenêtre contextuelle à cet emplacement. Ce que j'essaie de faire, c'est de déclencher un événement de clic sur un lat / lon particulier où un point existe déjà et de déclencher le popup qui existe déjà.

Réponses:


21

Je pense que vous pensez que c'est plus complexe que vous ne le pensez!

Essaye ça:

var popLocation= new L.LatLng(-42.8585,147.2468);
var popup = L.popup()
    .setLatLng(popLocation)
    .setContent('<p>Hello world!<br />This is a nice popup.</p>')
    .openOn(map);

Provenant de l' excellente documentation .

Je sais ce que tu veux faire maintenant. Voici comment ouvrir une fenêtre contextuelle à un emplacement cliqué arbitrairement:

map.on('click', function(e) {        
        var popLocation= e.latlng;
        var popup = L.popup()
        .setLatLng(popLocation)
        .setContent('<p>Hello world!<br />This is a nice popup.</p>')
        .openOn(map);        
    });

Édition finale: Je pense sérieusement que si vous souhaitez déclencher un événement de «clic» pour réaliser quelque chose, votre conception doit être examinée. Si vous voulez vraiment le faire, cela semble possible en javascript . Ce n'est pas une question SIG, cependant.


Merci pour la suggestion. Savez-vous s'il est possible de déclencher cela, sans créer de popup? Dans mon cas, j'ajoute 70 points à une carte (liant une popup), et je veux déclencher une de ces popups plus tard.
djq

Vous pouvez créer toutes les fenêtres contextuelles, les stocker en quelque sorte / où, puis les ouvrir sur la carte. Lisez la documentation et essayez-la. Je ne comprends pas ce que vous essayez de faire. Peut-être devriez-vous modifier votre question pour définir votre point final?
Alex Leith

Je comprends comment ouvrir le popup s'il est stocké dans un tableau, je veux essayer de l'ouvrir en cliquant sur un endroit sur la carte. Je vais essayer de clarifier cela dans la question.
djq

Vous souhaitez donc ouvrir la popup la plus proche d'un clic? Ou ouvrir une fenêtre contextuelle à l'emplacement cliqué? Et vous ne voulez pas de marqueurs?
Alex Leith

Je voudrais ouvrir une fenêtre contextuelle à l'emplacement cliqué et je ne veux pas de marqueurs.
djq

1

J'utilise l' autre réponse dans une carte de brochure pour permettre aux utilisateurs de m'envoyer des demandes de fonctionnalités en fonction de l'emplacement cliqué sur une carte, qui ouvre ensuite un formulaire Google pré-rempli avec le lat long de cette position. Ces points sont ensuite affichés sur la carte à l'aide de Sheetsee / Tabletop. J'ai ajouté un map.hasLayer (ma couche de requêtes) afin que l'utilisateur ne voit pas toujours le popup lorsque la carte est cliquée:

    map.on('click', function(e) { 
    if (map.hasLayer(requests)) {
        var requestform = e.latlng;
        var formpopup = L.popup();
        .setLatLng(requestform)
        .setContent('<a href=" google form ' + e.latlng.lat + 
                    '" target="_blank">Form</a>') 
        .openOn(map);
    }
});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.