Question Désactiver le comportement de clic des marqueurs de POI dans l'API JS de Google Maps


À partir de l'API Google Maps v3.6, les cartes incluent désormais des «points d'intérêt», marqueurs gris intégrés à une carte. Lorsque l'utilisateur clique sur cette icône, une info-fenêtre apparaît avec des informations sur cette entreprise (ou parc, hôpital, etc.)

Ceux-ci peuvent être désactivés en réglant le style. (Voir "Exemple de tableau de styles")

https://code.google.com/apis/maps/documentation/javascript/styling.html

Une fois désactivés, les icônes, les noms et les régions ombrées (pour les parcs et les hôpitaux) disparaissent.

Avant Google Maps API v3.6, il n'y avait pas d'icônes; seulement les noms et les régions.

La question est la suivante: y a-t-il un moyen de supprimer le comportement de ces points d’intérêt dans le "clic sur l’icône pour ouvrir la fenêtre d’information"? Je veux toujours garder les icônes, les noms et les régions; voulez seulement supprimer le comportement du clic.

Autre question: existe-t-il un moyen de télécharger / enregistrer le code JavaScript de la v3.5 de l'API Google Maps pour le stocker sur mon serveur? À l'heure actuelle, v3.5 fonctionne bien pour ce dont j'ai besoin. En février, Google ne fournira plus la version 3.5 du code et fournira uniquement la version 3.6, la version 3.7, la version 3.8.

Retrait des versions mineures de Google Maps API v3 et utilisation de la version "gelée" d'une API:

https://code.google.com/apis/maps/documentation/javascript/basics.html#Versioning

Les choses que j'ai essayées et considérées: L'ajout d'un écouteur d'événement lorsque l'utilisateur clique sur la carte ne fonctionne pas, car les marqueurs incorporés sont cliqués à la place de la carte. L'ajout de "cliquable: faux" en tant que propriété était un tir dans l'obscurité, sans résultat. Définir "Visiblility: off" supprime tout, laissant la carte avec moins de contenu. La définition de "visibility: simplifié" supprime le nom de l'emplacement, même si le comportement onclick est toujours présent. Le fait de superposer un DIV invisible à la carte pourrait fonctionner, mais cela supprimerait la possibilité de faire un panoramique / zoom / glisser sur la carte sans augmenter la complexité.

Définir un style pour que featureType: poi, elementType: libellés, visibilité: off entraîne l'affichage des régions rose / gris / vert pour les hôpitaux / cimetières / parcs, sans le marqueur ou le nom. Il renvoie plus de couleur à la carte.


14
2018-01-17 22:52


origine


Réponses:


Ce problème a été consigné avec google à l'adresse suivante:

http://code.google.com/p/gmaps-api-issues/issues/detail?id=3866

S'il vous plaît étoile et commenter vos besoins sur cette question là-bas.


13
2017-10-11 21:25



Je ne suis pas sûr si cela est toujours pertinent pour vous, mais Google a effectivement résolu le problème en avril 2016, tout ce que vous avez à faire est de clickableIcons à false dans MapOptions


9
2018-06-21 23:19



Je ne suis pas sûr que ce ne soit pas une violation du TOS de Google Maps, il est un peu piraté, et ne fonctionne pas sur IE <9, mais vous pouvez écouter sur un événement dom, pour détecter la création de la fenêtre, en utilisant Mutation Observer

Voici un plunkr pour démontrer: http://plnkr.co/edit/pGep9OZFligLhRtHlhgk Vous pouvez archiver la console, un événement est déclenché (en fait deux fois) lorsque vous cliquez sur un POI, et la fenêtre est masquée


1
2017-10-09 07:29



En référençant cette URL (https://stackoverflow.com/a/24234818/6160436), J'ai réussi à masquer les fenêtres d’information du POI et à appeler l’écouteur d’événements de clic de la carte lorsque l’utilisateur clique sur le POI. Mais je ne suis pas sûr que cela viole ou non TOS, donc utilisez à vos risques et périls.

        //keep a reference to the original setPosition-function
        var fx = google.maps.InfoWindow.prototype.setPosition;

        //override the built-in setPosition-method
        google.maps.InfoWindow.prototype.setPosition = function () {

            //this property isn't documented, but as it seems
            //it's only defined for InfoWindows opened on POI's
            if (this.logAsInternal) {
                if (this.getPosition()) {
                    console.log(this.getPosition());
                    google.maps.event.trigger(map, 'click', {latLng: this.getPosition()});
                }
                else{
                    google.maps.event.addListenerOnce(this, 'map_changed',function () {
                        console.log(this.getPosition());
                        google.maps.event.trigger(map, 'click', {latLng: this.getPosition()});

                        // var map = this.getMap();
                        // //the infoWindow will be opened, usually after a click on a POI
                        // if (map) {
                            //trigger the click

                            var removeInfoWindow = null;

                            removeInfoWindow = setInterval(function(){
                                if ($('.gm-style-iw').parent().length) {
                                    $('.gm-style-iw').parent().hide();
                                    clearInterval(removeInfoWindow);
                                };
                            },1);
                        // }
                    });
                };
            }

            //call the original setPosition-method
            fx.apply(this, arguments);
        };

        google.maps.event.addListener(map,'click',function(e){
            alert('clicked @'+e.latLng.toString())
            console.log('ok');
        });

1
2018-04-06 06:02



Quelques points à prendre en compte:

1) Si votre carte est très fréquentée, vous risquez de violer le TOS Google Maps. Vous êtes censé utiliser une version officielle. Si c'est votre propre blog ou autre chose à faible trafic, personne ne le remarquera ni ne s'en souciera.

2) Ce n'est qu'une conjecture de ma part, mais j'ai remarqué ces POI moi-même et j'ai été contrarié par eux. Je suis presque sûr que ces "annonces en ligne" sont payantes, pour ainsi dire. Certaines stations-service et chaînes de restaurants en possèdent, et vous verrez bientôt des cartes Google contenant ces marqueurs de points d'intérêt. S'ils permettent de les désactiver dans l'API, cela va à l'encontre des intérêts commerciaux de ceux qui ont payé pour l'icône du POI ... alors je doute fort que vous puissiez les supprimer.

Si vous trouvez un moyen, s'il vous plaît, s'il vous plaît, POSTEZ la solution! Merci.


0
2017-07-13 01:47