当我将标记和InfoWindow添加到我的Google地图应用程序时,标记会正确添加到地图和默认的街景全景中。
我还将InfoWindows添加到标记的两个副本中,方法是将地图作为参数调用我的bindInfoWindow
函数,然后将StreetView全景图作为参数调用一次。
直到几个星期前,它才能完美运作。
现在,出于某种原因,两个InfoWindows都显示在地图上,附在地图标记上。
我创建了simple fiddle(基于this公共小提琴),显示问题here。
基本上我以正常方式创建标记和InfoWindows:
var myMarker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(-34.397, 150.644),
title: "My Marker",
draggable:true,
});
然后我使用我的bindInfoWindow函数
function bindInfoWindow(marker, mapOrStreetView, whichInfoWindow, html, openWindow,markerId) {
openWindow = ((typeof openWindow === 'undefined')?false:openWindow);
markerId = ((typeof markerId === 'undefined')?'':markerId);
google.maps.event.addListener(marker, 'click', function() {
whichInfoWindow.setContent(html);
whichInfoWindow.open(mapOrStreetView, marker);
});
if ( openWindow === true ) {
whichInfoWindow.setContent(html);
whichInfoWindow.open(mapOrStreetView, marker);
}
}
为标记创建onClick操作,并在需要时自动打开InfoWindows。
var myMarkerInfoWindow = new google.maps.InfoWindow;
bindInfoWindow(myMarker, map, myMarkerInfoWindow, "<h1>My Map Info Window Text<br /> <br /></h1>", true);
var myMarkerStreetViewInfoWindow = new google.maps.InfoWindow;
bindInfoWindow(myMarker, defaultStreetViewPanorama, myMarkerStreetViewInfoWindow, "<h1>My StreetView Info Window Text</h1>", true);
直到大约一两个星期前,这个工作完美无缺,但InfoWindows突然出现在地图上,而不是一个出现在地图上,一个出现在默认的StreetView上。
在the fiddle中,您可以清楚地看到StreetView InfoWindow已在主要地图InfoWindow的顶部打开,尽管已指定在StreetView上打开。
请注意,map
是我的地图对象,defaultStreetViewPanorama
是使用
var defaultStreetViewPanorama = map.getStreetView();
在创建地图对象之后,就在设置StreetView选项之前。请注意,正确设置了StreetView选项 ,因此似乎map.getStreetView()
正在返回正确的对象。
答案 0 :(得分:1)
Google在v3.25中破坏了这项功能。
v3.24是最后一个正常工作的版本。
v3.24已经退役并且不再可用 - 在此期间似乎没有任何简单的解决方法。
Google已在https://code.google.com/p/gmaps-api-issues/issues/detail?id=9925的错误跟踪器上记录了此问题,并且已被接受,但在撰写本文时尚未修复。
如果/有任何进展,我会更新此答案。
答案 1 :(得分:0)
这里有一个重复的问题: InfoWindows on Markers in StreetView
当您尝试在Google Map和该地图的StreetViewPanorama中使用相同的标记实例并希望在两者中都显示infoWindows时,会发生此问题。
如果您在信息窗口的open方法中为StreetViewPanorama对象指定了标记,则应该在StreetView中显示的信息窗口将显示在地图中。 这是不正确的行为。
我的解决方法如下:
我创建了一个显示此修复程序的codepen: https://codepen.io/moutono/pen/KjZpZB
这里的问题似乎是当您打开infoWindow时,附加到标记的地图对象会替换infoWindow中的地图对象:
streetViewInfowindow.open(panorama, marker); //Won't work because the panorama object is replaced by the map object attached to the marker.
因此,如果要在街景视图和地图中的同一标记上显示infoWindows,则必须这样做:
mapInfowindow.setPosition(position);
mapInfowindow.open(map);
streetViewInfowindow.setPosition(position);
streetViewInfowindow.open(panorama); //This works because panorama object is not replaced by map object from marker.