从谷歌地图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将导致显示医院/墓地/公园的粉红色/灰色/绿色区域,而不显示标记或名称。它会向地图返回更多颜色。
答案 0 :(得分:13)
答案 1 :(得分:9)
我不确定这是否仍与您相关,但Google确实在2016年4月解决了这个问题,您需要做的就是clickableIcons
到false
的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图标付费的人的商业利益......所以我非常怀疑你是否能够删除它们。
如果您确实找到了办法,请发布解决方案!感谢。