谷歌地图街景信息窗口在地图上的打开

3
当我在我的Google Maps应用程序中添加标记和InfoWindow时,标记被正确地添加到地图和默认的StreetView全景图中。
我还通过将我的bindInfoWindow函数分别传入地图和StreetView全景图作为参数来向两个副本的标记添加了InfoWindows。
这在几周前一直很完美地工作着。
现在,由于某种原因,两个InfoWindows都显示在地图上,附加在地图标记上。
我创建了一个simple fiddle(基于this公共fiddle),其中展示了该问题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上。
这个fiddle中,您可以清楚地看到,尽管已指定在StreetView上打开,但StreetView InfoWindow已经打开在了主地图InfoWindow的上方。
请注意,map是我的地图对象,defaultStreetViewPanorama是通过获取的StreetView Panormama对象。
var defaultStreetViewPanorama = map.getStreetView();

在创建地图对象后,设置街景选项之前,请注意。请注意,街景选项已正确设置,因此似乎map.getStreetView()返回了正确的对象。

1
谷歌于2016年5月24日发布了新的3.24版本。您的代码中使用了实验性的3.25版本。我发现存在问题只能在实验版本中重现。我认为值得在公共问题跟踪器https://code.google.com/p/gmaps-api-issues/中创建一个问题。 - xomena
已在https://code.google.com/p/gmaps-api-issues/issues/detail?id=9925上记录问题9925。 - Fat Monk
非常奇怪...突然在这个周末,问题也开始出现在v3.24中!(或者至少在调用页面的<script>标签中指定v3.24时是如此。现在问题似乎也发生在所有版本回到3.21...我已经更新了Google问题。(请注意,尽管Google承认了这个问题,但它在最新的3.27实验版本中也没有得到解决) - Fat Monk
阅读了gMaps发布页面后,似乎随着实验性v3.27的发布,当前版本变为3.26,冻结版本变为3.25。所有早期版本都已退役。这意味着即使请求v3.24,您实际上也会得到v3.25,因此您将受到错误的影响,并且在他们修复之前无法获得没有错误的gMaps版本!太好了! - Fat Monk
2个回答

1
谷歌在v3.25版中破坏了此功能。
v3.24是最后一个正常工作的版本。
v3.24已经停用,不再可用 - 目前似乎没有任何简单的解决方法。
该问题已在谷歌的错误跟踪器https://code.google.com/p/gmaps-api-issues/issues/detail?id=9925上记录,并已被接受,但在撰写本文时尚未修复。
如果有任何进展,我将更新此答案。

您还可以查看关于在InfoWindow.open()方法的锚参数中不传递任何内容的答案。 - Abel Callejo

0

这里有一个重复的问题: 在StreetView中的标记上使用InfoWindows

当您尝试在Google地图和该地图的StreetViewPanorama中使用相同的标记实例并希望在两者中都显示infoWindows时,就会出现此问题。

如果您在StreetViewPanorama对象的open方法中指定了标记,则应该在StreetView中显示的infowindow会显示在地图中。 这是不正确的行为。

我的解决方案如下:

我创建了一个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.

如果您想在街景和地图上同时显示同一标记的信息窗口,则必须按照以下方式进行操作:

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.

链接到 Google 问题跟踪器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接