【问题标题】:Disable click behavior of POI markers in Google Maps JS API在 Google Maps JS API 中禁用 POI 标记的点击行为
【发布时间】:2012-02-12 17:47:16
【问题描述】:

从 Google Maps API v3.6 开始,地图现在包括“兴趣点”,即嵌入到地图中的灰色标记。当用户单击此图标时,会出现一个信息窗口,其中包含有关该企业(或公园、医院等)的信息

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

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

我尝试过并考虑过的事情: 在单击地图时添加事件侦听器不起作用,因为单击的是嵌入的标记而不是地图。添加“可点击:假”作为属性是在黑暗中拍摄,没有结果。设置“可见性:关闭”会删除所有内容,使地图内容更少。设置“可见性:简化”会删除该位置的名称,尽管 onclick 行为仍然存在。将不可见的 DIV 覆盖在地图上可能会起作用,但它会删除平移/缩放/拖动地图的能力,而不会增加复杂性。

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

【问题讨论】:

标签: google-maps-api-3


【解决方案1】:

需要注意的几点:

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

2) 这只是我的猜测,但我注意到这些 POI 是我自己并被他们惹恼了。我很确定这些是付费的“内嵌广告”,可以这么说。一些加油站和餐饮连锁店有它们,所以你很快就会看到谷歌地图上充斥着这些 POI 标记。如果他们允许在 API 中将其关闭,这有点违背那些为 POI 图标付费的人的商业利益……所以我非常怀疑您是否能够将其删除。

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

【讨论】:

    【解决方案2】:

    此问题已通过 google 记录在:

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

    请在此处加注星标并评论您对此问题的需求。

    【讨论】:

      【解决方案3】:

      我不确定这是否违反 Google Maps TOS,它有点 hacky,并且在 IE

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

      【讨论】:

        【解决方案4】:

        通过引用这个 URL (https://stackoverflow.com/a/24234818/6160436),我设法隐藏了 POI 的 Info 窗口,并在用户单击 POI 时调用 map 的单击事件侦听器。 但我不确定这是否违反 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');
                });
        

        【讨论】:

        【解决方案5】:

        我不确定这是否仍然与您相关,但 Google 确实在 2016 年 4 月解决了该问题,您只需在 MapOptions 中将 clickableIconsfalse 即可

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-24
          • 1970-01-01
          • 2012-08-27
          • 1970-01-01
          • 1970-01-01
          • 2012-12-22
          • 2016-08-19
          相关资源
          最近更新 更多