在infowindow中显示时,检查街景是否存在

时间:2012-10-17 17:07:09

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

遵循此示例http://www.keypointpartners.com/test/mab/fromxml1.html和Google Maps API v3文档(https://developers.google.com/maps/documentation/javascript/streetview)我已经整理了一个从XML文件加载标记的地图并为每个加载的标记显示选项卡式infowindow。希望检查某个位置是否确实有街景视图,我已将我的createMarker修改为:


    function createMarker(latlng, name, html) {
      //var contentString = html;

      var contentString = [
        '',
        '',
        name,
        '',
        '',
          '
  • Località
  • ', '
  • Struttura
  • ', '
  • Voli
  • ', //'
  • Opzioni
  • ', '
  • Streetview
  • ', '', html, '' ].join(''); // Create a marker var marker = new google.maps.Marker({ position: latlng, title: name, map: inc_map }); // Add a listener to the marker to populate and open the infowindow google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(contentString); infowindow.open(inc_map, marker); google.maps.event.addListener(infowindow, 'domready', function() { inc_sv.getPanoramaByLocation(marker.position, 50, processSVData); //console.log("Adding tabs"); $('#tabs').tabs(); }); });

    getPanoramaByLocation使用的回调函数如下:

    
        function processSVData(data, status) {
          if (status == google.maps.StreetViewStatus.OK) {
            google.maps.event.addListener(infowindow, 'domready', function() {
              $('#stv-lnk').click(function() {
                var panoramaOptions = {
                  position: data.location.latLng, 
                  visible: true,
                  linksControl: false,
                  panControl: false,
                  addressControl: false,
                  zoomControlOptions: {
                    style: google.maps.ZoomControlStyle.SMALL
                  },
                  enableCloseButton: false
                };
                var panorama = new google.maps.StreetViewPanorama(document.getElementById("stvpano"), panoramaOptions);  
                inc_map.setStreetView(panorama);
              });
            });
            } else {
            google.maps.event.addListener(infowindow, 'domready', function() {
              $('#stv-lnk').click(function() {});
              document.getElementById("stvpano").innerHTML = "Streetview non è disponibile per questo luogo"
              });
              }
        }
    
    

    现在,发生的情况是第一个街景视图标签没有显示任何内容,而下一个单击的街景视图标签显示上一个标签的街景视图。与API文档中的上述示例相比,我为每个选项卡构建了一个单独的StreetViewPanorama对象(而该示例使用全局全景变量var来保存它)。 这是我的错吗?要么...? 链接到实际页面:http://turom-mice.it/condorincentive/incentive.html

    任何帮助/建议都非常感谢! 干杯, 皮疹*

    编辑:好的,我解决了其中一个问题。我正在嵌套太多的eventListener:我删除了函数processSVData中的那些并且每个infowindow now显示正确的streetview。代码现在看起来像这样:

    
        function processSVData(data, status) {
          if (status == google.maps.StreetViewStatus.OK) {
            $('#stv-lnk').click(function() {
              var panoramaOptions = {
                position: data.location.latLng, 
                visible: true,
                linksControl: false,
                panControl: false,
                addressControl: true,
                zoomControlOptions: {
                  style: google.maps.ZoomControlStyle.SMALL
                },
                enableCloseButton: false
              };
              var panorama = new google.maps.StreetViewPanorama(document.getElementById("stvpano"), panoramaOptions); 
             inc_map.setStreetView(panorama);
            });
           } else {
            $('#stv-lnk').click(function() {
               inc_map.setStreetView(null);
               document.getElementById("stvpano").innerHTML = "Streetview non è disponibile per questo luogo"
            });
            }
        }
    

    现在,问题是'else'分支看起来什么都不做:当一个位置没有街景可用时,你看到最后显示的街景,无论我把它设置为null并在div中放入一些警告文本(我应该显示一个替代画廊页面的链接)。问题是:这是对的吗?还是...?

    像往常一样,任何帮助/提示/建议......

    侨, 皮疹*

    编辑2 :好的,完全解决了。 else分支没有管理click事件,因此将其重新置于原位解决了。上面的代码已经过编辑以反映解决方案。

    非常感谢,等待回答让我重新思考整件事。希望这对任何人都有帮助。

    疹*

    0 个答案:

    没有答案