禁用Google Maps JS API中POI标记的点击行为

时间:2012-01-17 22:52:32

标签: google-maps-api-3

从谷歌地图API v3.6开始,地图现在包含“兴趣点”,它们是嵌入到地图中的灰色标记。当用户点击此图标时,会出现InfoWindow,其中包含有关该业务(或公园,医院等)的信息。

可以通过设置样式来关闭它们。 (参见“样式数组示例”)

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

一旦关闭,图标,名称和阴影区域(公园和医院)就会消失。

在Google Maps API v3.6之前,没有图标;只有名字和地区。

问题:有没有办法删除这些兴趣点的“点击图标打开信息窗口”行为?我仍然想保留图标,名称和区域;只想删除点击行为。

替代问题:有没有办法下载/保存Google Maps API v3.5的JavaScript以存储在我的服务器上?目前,v3.5正在满足我的需求。 2月,Google将不再提供v3.5代码,而只提供v3.6,v3.7,v3.8。

停用次要版本的Google Maps API v3,并使用API​​的“冻结”版本:

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

我尝试过并考虑过的事情:点击地图时添加事件监听器不起作用,因为点击嵌入的标记而不是地图。添加“clickable:false”作为属性是在黑暗中拍摄,没有结果。设置“visiblility:off”会将其全部删除,从而使地图内容更少。设置“visibility:simplified”会删除位置的名称,但onclick行为仍然存在。将不可见的DIV覆盖在地图上可能会有效,但它会消除平移/缩放/拖动地图的能力,而不会增加复杂性。

设置样式以使featureType:poi,elementType:labels,visibility:off将导致显示医院/墓地/公园的粉红色/灰色/绿色区域,而不显示标记或名称。它会向地图返回更多颜色。

5 个答案:

答案 0 :(得分:13)

此问题已在Google上记录:

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

请在那里担任此问题的明星和评论。

答案 1 :(得分:9)

我不确定这是否仍与您相关,但Google确实在2016年4月解决了这个问题,您需要做的就是clickableIconsfalse的MapOptions

答案 2 :(得分:1)

我不确定这是不是违反谷歌地图服务条款,它有点hacky,并不适用于IE< 9,但你可以听dom事件, 使用Mutation Observer

检测窗口的创建

这是一个用来演示的傻瓜:http://plnkr.co/edit/pGep9OZFligLhRtHlhgk 您可以在控制台中检查,当您点击POI时会触发事件(实际上是两次),并且窗口是隐藏的

答案 3 :(得分:1)

通过引用此URL(https://stackoverflow.com/a/24234818/6160436),我以某种方式设法隐藏POI的信息窗口,并在用户点击POI时调用map的click事件监听器。 但我不确定这是否违反了服务条款,因此请自担风险。

        //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');
        });

答案 4 :(得分:0)

需要注意以下几点:

1) 如果您的地图流量很大,您可能会发现自己违反了Google地图服务条款。你应该使用官方版本。如果这是你自己的博客或其他低流量的东西,没有人会注意到或关心。

2) 这只是我的猜想,但我注意到这些POI是我自己并且被他们惹恼了。我很确定这些都是付费的“内联广告”,可以这么说。有些加油站和餐车连锁店都有这些加油站,因此您很快就会看到谷歌地图被这些POI标记垃圾邮件。如果他们允许在API中关闭这些,那么这有点违背了为POI图标付费的人的商业利益......所以我非常怀疑你是否能够删除它们。

如果您确实找到了办法,请发布解决方案!感谢。