6
votes

Comment puis-je faire une référence au polygon cliqué? (Google Maps API V3)

J'ai mis en place des polygones, les a dessinés sur la carte juste bien. J'ai également réussi à incendier la console.log quand ils ont été cliqués. Cependant, comment allait-je continuer à déterminer quel polygone a été en fait cliqué sur?

Comme vous pouvez le voir dans mon code d'échantillon ici, je stocke chaque objet dans la collection "lots", cependant - en cliquant seulement, ne me donne que le lat-Long du clic. Je pensais que j'aurais peut-être besoin de boucler à travers mes polygones et de vérifier si le point a été cliqué si le point a été cliqué sur les intersecter et précise ainsi quel polygone il est ... y a-t-il une solution plus facile? P>

var lot = new google.maps.Polygon({
    paths: me.area,
    strokeColor: 'black',
    strokeOpacity: 0.35,
    strokeWeight: 1,
    fillColor: fillcol,
    fillOpacity: 0.35
});

lot.setMap(map);
var obj = {
    'id':me.id,
    'rented':me.rented,
    'area':lot
};

google.maps.event.addListener(lot, 'click', function(event) {
    console.log(event);
});

lots.push(lot);


2 commentaires

Issu GetPath () fonctionne comme un charme. Je n'ai pas réalisé que j'avais réellement eu la référence du polygone passé sur l'événement de clic, pour correspondre à cela avec mes "lots" stockés, je me suis tout simplement en boucle sur mes lots stockés et comparer cela.getpath à d'autres.getpath, s'ils correspondent, je sais quel lot était cliqué et peut maintenant afficher des informations relatives à cet objet particulier.


Vous devrez peut-être attendre quelques heures avant que le site vous laisse le faire, mais vous devriez poster cela comme une réponse si vous le pouvez.


3 Réponses :


0
votes

a été avéré getsPath () fonctionne comme un charme. Je n'ai pas réalisé que j'avais réellement eu la référence du polygone passé sur l'événement de clic, pour correspondre à cela avec mes "lots" stockés, je me suis tout simplement en boucle sur mes lots stockés et comparer cela.getpath à d'autres.getpath, s'ils correspondent, je sais quel lot était cliqué et peut maintenant afficher des informations relatives à cet objet particulier.

Voici un échantillon de code: (Là où le stationnement est un éventail d'objets de stationnement qui ont eux-mêmes des matrices contenant des objets de stationnement) xxx


1 commentaires

Selon la suggestion des Trottes, j'ai posté mon commentaire ci-dessus comme réponse ainsi que de fournir un exemple de code - ne me laissera pas marquer cela comme ma réponse jusqu'à demain tho;)



14
votes

Pourquoi ne pas attribuer à chaque polygone une propriété d'identification lorsque vous les créez et utilisez plus tard simplement this.myid ? Vraiment parler, vous pouvez accrocher toutes les informations dont vous avez besoin sur cet objet polygone. XXX

Il serait plus efficace que la comparaison des chemins dans une boucle, ou je manque quelque chose? :)


4 commentaires

hmm, je ne suis pas sûr, chose que je n'ai jamais vraiment pensé à ajouter mes propres propriétés à l'objet polygone, mais je suppose que c'est plus lisse puis comparant le chemin OUI =)


@Bisa et à partir de magasins JavaScript, les références à des objets et des tableaux, pas des excédents, la consommation de mémoire dans ce cas reste la même.


À droite, c'est un argument solide, dans ma solution originale, je copierais les valeurs et les comparerais plutôt que de comparer les références - je vais réécrire mon code un peu ^^ thnx


Avec une petite correction, au lieu de se référer à Lot.Objinfo dans la fonction d'événement, je devais utiliser cela.Objinfo - une solution beaucoup plus propre (à ne pas mentionner plus rapide), a changé cette réponse comme la réponse correcte à ma question.



8
votes

Si je peux passer un peu tard avec une solution différente, j'avais le même problème et j'ai découvert que vous pouvez définir des propriétés personnalisées sur un polygone.

Mon exemple (qui crée un état sur une carte des États-Unis. ) p> xxx pré>

dans ce cas "map_state_id" est la propriété personnalisée. Je l'ai défini comme étant l'identifiant de l'état (1 pour Alabama, 2 pour l'Alaska, etc.) P>

alors lorsque l'état particulier est cliqué ultérieurement, ce "MAP_STATE_ID" peut être transmis dans la fonction Event . P>

google.maps.event.addListener(poly, 'click', function() 
    {
    var map_state_id = this.map_state_id; //retrieve correct state_id

    $.ajax(
        {
        type: "POST",
        url: "http://www...get_state_info.php",
        data: {state_id : map_state_id},
        dataType: "html",
        success: function(data)
            {
            $("#state_info").html(data); //display some info
            }                       
        });
    });


1 commentaires

Merci d'avoir souligné l'utilisation de la "ceci". - C'était nécessaire pour désambiguez les polys.