Javascript 我是否可以删除POI';谷歌地图API v3中的s?
所以我正在开发一个新的网络应用程序,它非常关注地图。使用Google Maps API v3并对此非常满意,但注意到兴趣点(POI)会自动显示更多细节和指向Google Places页面的链接。我不要这些。这是我的密码: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
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);