2017-08-08 67 views
0

该问题发生在页面刷新期间,然后浏览器被最小化或者其带有地图的选项卡处于非活动状态。然后,搜索管理器地理编码功能将落入errorCallback。如果带有地图的页面处于活动状态(可见),则一切正常。微软必应地图v7搜索管理器地理编码errorCallBack

我检查了errorCallback函数中的e.request对象,它包含正确的“where”参数,但没有经度和纬度,也没有关于错误的任何信息。

该问题可以在Chrome和IE浏览器中复制。

HTML: <div id="map" class="map" style="height:270px; width:100%"></div>

的JavaScript:

<script type="text/javascript" src="https://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&s=1"></script> 

<script type="text/javascript"> 

    // global variables 
    var apiKey = 'API_KEY_HIDDEN', 
     map, 
     searchManager; 

    // sample data 
    var siteData = [ 
     {"Name":"Starbucks","Address":"8400 SW Nimbus Ave 120","City":"Beaverton","State":"OR","Zip":"97008","Latitude":0,"Longitude":0}, 
     {"Name":"Subway","Address":"12160 SW Scholls Ferry Rd","City":"Tigard","State":"OR","Zip":"97223","Latitude":0,"Longitude":0} 
    ]; 

    $(document).ready(function() { 
     GetMap(); 
     setTimeout(function() { location.reload(); }, 60000); 
    }); 

    function GetMap() {  

     // initialize the map 
     map = new Microsoft.Maps.Map(document.getElementById('map'), { 
      credentials: apiKey, 
      mapTypeId: Microsoft.Maps.MapTypeId.road, 
      zoom: 1 
     }); 

     // load search module 
     Microsoft.Maps.loadModule('Microsoft.Maps.Search', { 
      callback: function() { 
       searchManager = new Microsoft.Maps.Search.SearchManager(map); 
       $.each(siteData, function(index, clientSite) { 
        GeoCodeQuery(clientSite); 
       }); 
      } 
     }); 
    } 

    function GeoCodeQuery(clientSite) { 

     // set search parameters 
     var searchRequest = { 
      where: clientSite.Address + ', ' + clientSite.City + ', ' + clientSite.State + ' ' + clientSite.Zip, 
      callback: function (data) { 
       if (data && data.results && data.results.length > 0) { 
        clientSite.Latitude = data.results[0].location.latitude; 
        clientSite.Longitude = data.results[0].location.longitude; 
       } 
       else { 
        console.log('No results.'); 
       } 
      }, 
      errorCallback: function (e) { 
       console.log('Search error.'); 
      } 
     }; 

     // make the geocode request 
     searchManager.geocode(searchRequest);   
    } 

</script> 

回答

1

一对夫妇的问题;

  • 您在where参数后缺少逗号。这会使searchRequest成为无效的JSON对象。解决这个问题会导致第一个地址被正确地编码。第二个是抛出一个错误,这可能是由于很多原因,最有可能的是下一个点。
  • Bing地图V7控件已于6月份退役,并且很快就会关闭。它的一些后端服务已经被取消,因此会有问题。您应该使用一年前替换V7的Bing Maps V8。你可以在这里找到一个移植指南:https://social.technet.microsoft.com/wiki/contents/articles/34563.bing-maps-v7-to-v8-migration-guide.aspx
+0

其实,逗号是在我原来的代码中。我刚刚在这里错过了它,同时试图压缩和格式化StackOverflow的代码。就像我在我的评论中提到的那样 - 如果地图的页面(标签)可见,则一切正常。只有在浏览器最小化或者地图选项卡处于非活动状态时才会失败。我确实在v8中尝试了这个,在创建这篇文章之后,通过创建一个简单的地图并使用示例数据 - 结果相同。我最终编写了自定义(而且不幸地是速度较慢)的地理编码服务,将其用作搜索管理器中的错误回退。 –

+0

我也想知道为什么搜索管理器在其构造函数中需要一个地图,如果地理编码查询和结果独立于它(地图)。我还尝试将“边界”属性填充到地理编码搜索请求中,认为它们无法正确计算,但又是 - 没有运气。 –

+0

搜索管理器使用地图视图帮助影响/加权结果。它还从地图抓取会话密钥。如果你不关心这个,你可以直接使用REST location API:http://bingmapsv8samples.azurewebsites.net/#RestServices_JSONP – rbrundritt