Отключить поведение щелчков маркеров POI в Google Maps JS API - PullRequest
14 голосов
/ 18 января 2012

Начиная с версии Google Maps API v3.6, карты теперь содержат «точки интереса», которые представляют собой серые маркеры, встроенные в карту. Когда пользователь нажимает на этот значок, появляется информационное окно с информацией об этом бизнесе (или парке, больнице и т. Д.)

Их можно отключить, установив стиль. (См. «Пример массива стилей»)

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

Как только они выключены, значки, названия и затененные области (для парков и больниц) исчезают.

До Google Maps API v3.6 значков не было; только имена и регионы.

Вопрос: есть ли способ убрать поведение этих точек интереса «щелкнуть значок, чтобы открыть информационное окно»? Я все еще хочу сохранить значки, имена и регионы; только хочу удалить поведение клика.

Альтернативный вопрос: есть ли способ загрузить / сохранить JavaScript версии 3.5 Google Maps API для хранения на моем сервере? В настоящее время v3.5 отлично работает для того, что мне нужно. В феврале Google больше не будет предоставлять v3.5 кода и вместо этого будет предоставлять только v3.6, v3.7, v3.8.

Удаление второстепенных версий API Карт Google v3 и использование «замороженной» версии API:

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

Вещи, которые я пробовал и рассматривал: Добавление прослушивателя событий при нажатии на карту не работает, поскольку вместо карты щелкают встроенные маркеры. Добавление "clickable: false" в качестве свойства было выстрелом в темноте, безрезультатно. Установка «visiblility: off» удаляет все это, оставляя карту с меньшим содержанием. Параметр «видимость: упрощенный» удаляет имя местоположения, хотя поведение при нажатии все еще присутствует. Помещение невидимого DIV-оверлея на карту может сработать, хотя это уберет возможность панорамирования / масштабирования / перетаскивания карты без увеличения сложности.

Установка стиля таким образом, чтобы featureType: poi, elementType: tags, visibility: off приводил к отображению розовых / серых / зеленых областей для больниц / кладбищ / парков без маркера или названия. Возвращает больше цвета на карту.

Ответы [ 5 ]

13 голосов
/ 12 октября 2012

Эта проблема была зарегистрирована с Google на:

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

Пожалуйста, отметьте и прокомментируйте ваши потребности по этому вопросу.

10 голосов
/ 22 июня 2016

Я не уверен, что это все еще относится к вам, но Google действительно разрешил проблему в апреле 2016 года, все, что вам нужно сделать, это clickableIcons до false в MapOptions

1 голос
/ 06 апреля 2016

С помощью ссылки на этот URL (https://stackoverflow.com/a/24234818/6160436), мне каким-то образом удалось скрыть информационные окна POI и вызвать прослушиватель события click карты, когда пользователь нажимает на POI. Но я не уверен, нарушает ли это TOSили нет, поэтому используйте на свой страх и риск.

        //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 голос
/ 09 октября 2013

Я не уверен, что это не является нарушением TOS Google Maps, он немного хакерский и не работает в IE <9, но вы можете прослушать событие dom, обнаружить создание окна, используя Mutation Observer </p>

Вот пример для демонстрации: http://plnkr.co/edit/pGep9OZFligLhRtHlhgk Вы можете проверить в консоли, происходит ли событие (фактически дважды), когда вы нажимаете на POI, и окно скрыто

0 голосов
/ 13 июля 2012

Несколько вещей, о которых следует знать:

1) Если на вашей карте много посетителей, вы можете нарушить Условия использования Google Maps. Вы должны использовать официальную версию. Если это ваш собственный блог или что-то еще с низким трафиком, никто не заметит или не заботится.

2) Это только предположение с моей стороны, но я сам заметил эти POI и был раздражен ими. Я почти уверен, что это платные «встроенные объявления», так сказать. Некоторые автозаправочные станции и закусочные имеют их, поэтому вы скоро увидите, что на картах Google есть спам с этими маркерами POI. Если они позволяют отключать их в API, это противоречит деловым интересам тех, кто заплатил за значок POI ... поэтому я очень сомневаюсь, что вы сможете удалить их.

Если вы найдете способ, пожалуйста, отправьте решение! Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...