Google地图StreetView InfowIndows在地图上打开

时间:2016-06-12 19:29:55

标签: javascript google-maps google-maps-api-3 google-street-view

当我将标记和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是使用

检索的StreetView Panormama对象
var defaultStreetViewPanorama = map.getStreetView();

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

2 个答案:

答案 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中显示的信息窗口将显示在地图中。 这是不正确的行为。

我的解决方法如下:

我创建了一个显示此修复程序的codepenhttps://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.

链接到Google Issue Tracker