Javascript 我是否可以删除POI';谷歌地图API v3中的s?

Javascript 我是否可以删除POI';谷歌地图API v3中的s?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,所以我正在开发一个新的网络应用程序,它非常关注地图。使用Google Maps API v3并对此非常满意,但注意到兴趣点(POI)会自动显示更多细节和指向Google Places页面的链接。我不要这些。这是我的密码: map = new google.maps.Map(document.getElementById("map"), { center:new google.maps.LatLng(default_latitude,default_longitude), zoom

所以我正在开发一个新的网络应用程序,它非常关注地图。使用Google Maps API v3并对此非常满意,但注意到兴趣点(POI)会自动显示更多细节和指向Google Places页面的链接。我不要这些。这是我的密码:

map = new google.maps.Map(document.getElementById("map"), {
    center:new google.maps.LatLng(default_latitude,default_longitude),
    zoom:11,
    mapTypeId:google.maps.MapTypeId.ROADMAP,
    mapTypeControl:false,
    panControl:false
});
我知道你可以完全移除POI。以下是我的代码:

map = new google.maps.Map(document.getElementById("map"),{
    center:new google.maps.LatLng(default_latitude,default_longitude),
    zoom:11,
    mapTypeId:google.maps.MapTypeId.ROADMAP,
    mapTypeControl:false,
    panControl:false,
    styles:[{
        featureType:"poi",
        elementType:"labels",
        stylers:[{
            visibility:"off"
        }]
    }]
});
这完全消除了一切,我仍然希望看到标签,因为我认为它们带来了价值,但只是认为泡沫太分散注意力了

以下是我要删除的气泡,以供参考:

这是完全移除POI的同一张地图:


我将使用firebug检查元素,并使用
显示:无!重要的
如果Google不允许您通过API直接访问这些样式(我认为您应该能够访问),请删除这些样式。

建议您查看我在此处给出的答案:


编辑:好的,看起来谷歌实施了一个解决方案,看看xomena的答案

好的,在搜索了所有地方后,看起来您不能仅通过单击“禁用”来显示POI,您可以在此处查看更多讨论:

特别是这次交流:


是否有可能使POI可见但不可单击

谢谢 洛伦佐


克里斯·布罗德福特

不幸的是,洛伦佐不是。您需要应用贴图样式来隐藏 poi标签:

[{featureType:“poi”,elementType:“标签”,样式器:[{ 可见性:“关闭”}]}]

(或者只是隐藏业务poi,“poi.business”)



这来自谷歌地图开发者,因此意味着你不能禁用弹出窗口,只有POI

找到了解决方法它相当脏,所以如果谷歌改变了一些东西,它可能会停止工作,但它可以工作

你必须找到谷歌为POI设置信息窗口的层。幸运的是,这些层与用于用户信息窗口的层不同。诀窍是找到合适的图层。阴影层很容易找到,但是infoWindow层是在创建了一些POI infoWindow之后创建的,因此您必须像google一样在同一个div上侦听click事件。然后您可以通过z索引或图像URL找到POI信息窗口层,但这并没有经过很好的测试。。。请注意,如果谷歌更改z索引,它将停止工作

var lis = google.maps.event.addListener(my_map, 'tilesloaded', function () {

    $('*').filter(function () { return $(this).css('z-index') == 104 }).remove();
        // remove layer for POI infoWindow shadow - has z-index: 104

    var eventDiv = $(my_map.getDiv()).children().children()[0];
        // this div is used by google to handle events

    $(eventDiv).click(function clickHandler() {
        var timeout = 100;
        var attempts = 20;
        setTimeout(function timeoutHandler() {
            // there are 2 ways how to find POI infoWindow layer
            // 1st way - by the z-index
            var poiInfoLayer = $('*').filter(function () { 
                return $(this).css('z-index') == 169 || 
                       $(this).css('z-index') == 248 
            });
            // 2nd way - by the images :-)
            // but not tested much - it may also find normal infoWindows!
            //var poiInfoLayer = $('[src*="/mapfiles/iw3.png"]').parent().parent();

            if (poiInfoLayer.length) {
                    poiInfoLayer.remove();
                    $(eventDiv).unbind('click', clickHandler);
            }
            else {
                    if (attempts > 0) {
                            setTimeout(timeoutHandler, timeout);
                            attempts--;
                    }
            }

        }, timeout);
    });
    google.maps.event.removeListener(lis);
});
自从谷歌地图API更新后不再工作。

我终于找到了

这是演示:(单击“打开”或POI什么也不做,单击“请打开”打开信息窗口)

我们的想法是修补InfoWindow.prototype.open,以便允许它接受第三个参数。谷歌没有通过,但我们应该通过

守则:

function fixInfoWindow() {
    var proto = google.maps.InfoWindow.prototype,
        open = proto.open;
    proto.open = function(map, anchor, please) {
        if (please) {
            return open.apply(this, arguments);
        }
    }
}
谷歌在POI上打开信息窗口如下:

myInfoWin.open(map, poiMarker)
窗口不会打开,因为谷歌没有说“请”。这就是我们打开信息窗口的方式:

myInfoWin.open(map, poiMarker, true);
编者按:这个答案在3.23版之前一直适用。自2016年3.24版发布以来,您可以使用地图选项

版本~3.12修复程序

这是一个新的补丁程序,它可以再次工作。我已经用3.14版测试过了

现在我们将修补
set()
而不是
open()

函数fixInfoWindow(){
//这里我们重新定义set()方法。
//如果为map选项调用,我们将隐藏InfoWindow,如果为“noSuppress”
//选项不正确。由于谷歌地图不知道此选项,
//其信息窗口将不会打开。
var set=google.maps.InfoWindow.prototype.set;
google.maps.InfoWindow.prototype.set=函数(键,val){
if(key=='map'&&!this.get('noSuppress')){
console.warn('此信息窗口被抑制');
log('要启用它,请将“noSuppress”选项设置为true');
返回;
}
set.apply(这个,参数);
}
}
您需要做的是为自己的
InfoWindow
设置选项
noSuppress
true
,以打开它们,例如:

var popup=new google.maps.InfoWindow({
内容:“砰!”,
无抑制:对
});
设置位置(新的google.maps.LatLng(-34.397150.644));
弹出。打开(地图);
或:

var popup=new google.maps.InfoWindow({
内容:“砰!”,
});
popup.set('noSuppress',true);
设置位置(新的google.maps.LatLng(-34.397150.644));
弹出。打开(地图);

从3.24版开始,Maps JavaScript API在MapOptions对象中有一个属性clickableIcons:

通过将clickableIcons属性设置为false,可以使用此属性关闭地图上的可单击图标。还存在一个setClickableIcons()方法

请看这个例子:

我可能正在使用自定义气泡,因此可能不适合我。我还怀疑有一种方法可以禁用它们[听起来你也这么做了]只是在谷歌文档中找不到任何关于这方面的详细信息。是否没有与自定义气泡相关的样式,过去,当GMAPAPI中的选项受到限制时,我只使用了一个选项,即使用CSS删除不需要的元素。如果您愿意,该API允许您使用自己的数据添加自己的气泡。我是说我可能会使用这个功能,所以禁用所有气泡对我来说可能不是一个选项。我正在研究这种可能性,这是一条死胡同。POI没有使用DOM完成(没有div,没有html映射区域…)。POI可点击区域必须以某种方式仅通过javascript处理,可能仅通过处理map click事件。所以用这种方式破解是很难做到的。你甚至运行过自己的代码吗?我做到了,你点击机场图标,就会看到一个信息窗口,当然我做到了。那么,您的目标是在单击时不显示气泡?我以为你只是在显示地图时自动得到了气泡。让我调查一下。和g
myInfoWin.open(map, poiMarker, true);