【问题标题】:Raising an exception for a grey streetview location in Google Maps JavaScript API v3在 Google Maps JavaScript API v3 中引发灰色街景位置异常
【发布时间】:2013-07-03 09:21:07
【问题描述】:

看,我正在使用 Google Maps JavaScript API v3。用户填写地址,我显示该地址的街景。一切都很好(很多地方都很好),直到进入像“湖”这样的地方。它只是显示灰色,没有别的。我想阻止用户继续使用灰色图像而不是谷歌地图街景的下一页。

当我填写 Laken 时,getPanoramaByLocation() 函数返回 status == "OK",因为它找到了一些东西,但它不是可见的图像,它只是灰色的。如何防止 API 这样做?例如,当您无法显示此位置(为灰色)时,显示附近的下一个可用位置。

以下是代码摘录:

功能:

<script type="text/javascript">
//this is a standard location that I show when te user starts
 var map;
    var huis_lat,huis_lng;
    $(document).ready(function(){
      map = new GMaps({
        el: '#map',
        lat: -12.043333,
        lng: -77.028333
      });

      //SAVE HOMELAT&LONGT 
      $('#geocoding_form').submit(function(e){



        var address=document.getElementById("address").value;
    e.preventDefault();
        GMaps.geocode({
          address: $('#address').val().trim(),
          callback: function(results, status)
          {

            if(status=='OK'){
              var latlng = results[0].geometry.location;          
              huis_lat=latlng.lat();
              huis_lng=latlng.lng();
              verander(huis_lat,  huis_lng);
              document.getElementById("div_overlayStart").style.display="none";
              document.getElementById("div_overlayThuis").style.display="block";          

            }
            else if(!address) //no address
            {
            alert("fout?")
            document.getElementById('alarm1').innerHTML = 'FILL IN ADDRESS';
            }
            else if(status=='UNKNOWN_ERROR')
            {
            document.getElementById('alarm1').innerHTML = 'UNKNOWN ERROR!';
            }
            else if(status=='ZERO_RESULTS')
            {
            document.getElementById('alarm1').innerHTML = 'UNKNOWN ADDRESS!';
            }
          }
        }); 

      });
    });
</script>

HTML:

EX:填写:Kongingslaan 1, Laken

<body>

<form method="post" id="geocoding_form">

<div class="input">

<input type="text" id="address" name="address" />

<button type="submit" class="linksSocial" style="border: 0; background: transparent">
<img src="images/btn_job.png" width="231" heght="36" alt="submit" />
</button>

</div>
</form>
</body>

函数verander():

<script type="text/javascript">
function verander(google_lat, google_lng) {
    var bryantPark = new google.maps.LatLng(google_lat, google_lng);
    var panoramaOptions = {
      position:bryantPark,
      pov: {
        heading: 185,
        pitch:0,
        zoom:1,
      },
      panControl : false,
      streetViewControl : false,
      mapTypeControl: false,
      overviewMapControl: false ,
      linksControl: false,
      addressControl:false,
      zoomControl : false,
    }
    map = new google.maps.StreetViewPanorama(document.getElementById("map_canvas"), panoramaOptions);
    map.setVisible(true);
  }
</script>

【问题讨论】:

  • 当我搜索无效地址时没有灰色的东西(顺便说一句:“湖”对我来说返回结果,挪威的海)。请告诉我们verander()
  • 你不能简单地在回调中测试results.length并相应地分支吗?
  • @Dr.Molle :在此处的文本框中插入 Laken,您会明白我的意思 (jobadvisor.scriptonite.be/jobadvisor.html)。我在描述中添加了 verander()。
  • @Beetroot-Beetroot :如果我在错误的位置测试长度,它会是 null 还是 ...?
  • 发布答案对我来说可能更简单.....

标签: google-maps-api-3 location google-street-view raiseerror


【解决方案1】:

使用google.maps.StreetViewService.getPanoramaByLocation() 确定给定位置是否有可用的全景图。

【讨论】:

  • 好的,这帮助我解决了部分问题。当这确保用户不能填写像“abcdefg”这样的地方时,此函数返回值“ZERO_RESULTS”。但我现在看到的真正问题是,当我输入“Laken”时,它显示了一些东西,但它是一个灰色区域。所以 getPanoramaByLocation() 函数返回“OK”,因为它找到了一些东西,但它不是可见的图像,它只是灰色的。
  • 这是完整的消息--> 好的,这帮助我解决了部分问题。当用户填写“abcdefg”之类的地方时,此函数会返回值“ZERO_RESULTS”。谢谢!但我现在看到的真正问题是,当我输入“Laken”时,它显示了一些东西,但它是一个灰色区域。所以 getPanoramaByLocation() 函数返回“OK”,因为它找到了一些东西,但它不是可见的图像,它只是灰色的。如何防止 API 这样做?例如,当您无法显示此位置(灰色)时,显示附近的下一个可用位置。
  • 对我来说 getPanoramaByLocation() 代表拉肯的 LatLng 返回 ZERO_RESULTS
  • 我明白了!我需要编辑我的问题并向其中添加新代码吗?我不知道这在stackoverflow上是如何工作的:p
【解决方案2】:

快速而肮脏的解决方案。我注意到在这个问题上调整窗口大小对我有用。如果您通过 js 触发事件,它也可以工作。

window.dispatchEvent(new Event('resize'));

【讨论】:

    【解决方案3】:

    试试这个:

    $(document).ready(function(){
        var map = new GMaps({
            el: '#map',
            lat: -12.043333,
            lng: -77.028333
        });
    
        //SAVE HOMELAT&LONGT 
        $('#geocoding_form').submit(function(e) {
            e.preventDefault();
            var address = $('#address').val().trim();
            if(!address.length) {
                $('#alarm1').html('Fill in your address!');
            }
            GMaps.geocode({
                address: address,
                callback: function(results, status) {
                    if(status !== 'OK' || results.length == 0) {
                        $("#div_overlayStart").show();
                        $("#div_overlayThuis").hide();
                    }
                    if(status !== 'OK') {
                        $('#alarm1').text('Something went wrong!');
                    }
                    else if(results.length == 0) {
                        $('#alarm1').html('No results found!');
                    }
                    else {
                        $('#alarm1').text('');
                        var latlng = results[0].geometry.location;
                        verander(latlng.lat(), latlng.lng());
                        $("#div_overlayStart").hide();
                        $("#div_overlayThuis").show();
                    }
                }
            });
        });
    });
    

    【讨论】:

    • 但我现在看到的真正问题是,当我输入“Laken”时,它显示了一些东西,但它是一个灰色区域。所以 getPanoramaByLocation() 函数返回“OK”,因为它找到了一些东西,但它不是可见的图像,它只是灰色的。如何防止 API 这样做?例如,当您无法显示此位置(为灰色)时,显示附近的下一个可用位置。
    • 棘手,我不确定是否可以自动检测“灰色”。如果是,那么“棕色”或“参差不齐”等呢?但请记住,您正在显示结果 [0],即可能的许多结果中的第一个。您可以在界面中引入用户自己滚动浏览结果并选择适合他的方法。
    • 很棒的提示!不喜欢用户滚动浏览结果的想法,所以我通过添加一个带有文本的按钮来解决它:“你的图片是灰色的吗?点击这里!”。此按钮有一个 onClick() 函数,该函数将 results[varPosition].geometry.location 中的 varPosition 增加 +1。用户可以继续这样做,直到他获得非灰色街景。
    • 两个头通常比一个好。听起来你有一个可行的解决方案。
    【解决方案4】:

    我也遇到了街景在某些位置显示“灰色”的问题。

    我不喜欢这里给出的解决方案。

    在另一篇文章中查看我的解决方案,这也与街景在某些位置显示为“灰色”有关 -->

    Google maps streetview tiles do not load in Firefox initially, only after dragging

    【讨论】:

      【解决方案5】:

      这样就解决了问题:

       <script type="text/javascript">
      var map;
      var huis_lat,huis_lng;
      var richting = 0;
      $(document).ready(function(){
       map = new GMaps({
          el: '#map',
          lat: -12.043333,
          lng: -77.028333
      });
      
      
              //SAVE HOMELONG/LAT IN VAR
              $('#geocoding_form').submit(function(e){
      
      
      
              var address=document.getElementById("address").value;
      
              /* STATUS
              OK  The request was successful.
              UNKNOWN_ERROR   The request could not be successfully processed, yet the exact reason for failure is unknown.
              ZERO_RESULTS    There are no nearby panoramas.
              */
      
      //CHECK IF ADDRESS IS VALID (IS THEIR A VALID X/Y COORDINATE FOR IT?)
      
      
              e.preventDefault();
              GMaps.geocode({
              address: $('#address').val().trim(),
              callback: function(results, status)
              {
      
              if(status=='OK'){
              var latlng = results[richting].geometry.location; 
              huis_lat=latlng.lat();
              huis_lng=latlng.lng();
              verander(huis_lat, huis_lng);
              document.getElementById("div_overlayStart").style.display="none";
              document.getElementById("div_overlayThuis").style.display="block"; 
      
              }
              else if(!address) //no address
              {
              document.getElementById('alarm1').innerHTML = 'Gelieve u adres in te vullen!';
              }
              else if(status=='UNKNOWN_ERROR')
              {
              document.getElementById('alarm1').innerHTML = 'Er ging iets mis (onbekende fout)!';
              }
              else if(status=='ZERO_RESULTS')
              {
              document.getElementById('alarm1').innerHTML = 'Er is van deze locatie geen streetview beschikbaar!';
              }
              }
              }); 
      
              });
              });
      
      //+1 one for the array results[richting].geometry.location
      
              function verhoog(){    
              var address=document.getElementById("address").value;
      
                  richting++;
      
                  //e.preventDefault();
                  GMaps.geocode({
                    address: $('#address').val().trim(),
                    callback: function(results, status)
                    {
      
                      if(status=='OK'){
                        var latlng = results[richting].geometry.location;     
      
                        huis_lat=latlng.lat();
                        huis_lng=latlng.lng();
                        verander(huis_lat,  huis_lng);
                        document.getElementById("div_overlayStart").style.display="none";
                        document.getElementById("div_overlayThuis").style.display="block";          
      
                      }
                   }
                  }); 
      
            }
      </script>
      

      检查这些 X/Y 坐标的全景图(街景)是否可见(不是灰色)。我使用函数 getPanoramaByLocation 来确定这一点。这将返回与前一个类似的状态。如果有 ZERO_RESULTS(=灰色区域),它会激活函数 verhoog(),将结果数组增加 1。

      <script type="text/javascript">
      
      var map;
      
      function verander(google_lat, google_lng) {  
      
          var bryantPark = new google.maps.LatLng(google_lat, google_lng);
      
      //CHECK FOR GREY ZONE
      
           var client = new google.maps.StreetViewService();
                      client.getPanoramaByLocation(bryantPark, 50, function(result, status) {
                          if (status == "ZERO_RESULTS") {
                             verhoog();
      
                          }
                          else if(status == "OK")
                          {
                              var panoramaOptions = 
                              {
                                position:bryantPark,
                                pov: {
                                  heading: 185,
                                  pitch:0,
                                  zoom:1,
                                },
                                panControl : false,
                                streetViewControl : false,
                                mapTypeControl: false,
                                overviewMapControl: false ,
                                linksControl: false,
                                addressControl:false,
                                zoomControl : false,
                              }
                              map = new google.maps.StreetViewPanorama(document.getElementById("map_canvas"), panoramaOptions);
                              map.setVisible(true);
                          }
      
                          else if(status=='UNKNOWN_ERROR')
                          {
                          alert("Er ging iets mis");
                          }
      
                      });  
      
        }
      
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多