2017-08-08 22 views
0

ページの更新中に問題が発生し、ブラウザが最小化されているか、マップのタブが無効になっています。その後、Search Managerジオコード関数はerrorCallbackに入ります。マップのあるページがアクティブ(可視)であれば、すべて正常に動作しています。Microsoft Bing Maps v7検索マネージャーGeoCode 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オブジェクトになります。これを修正すると、最初のアドレスが正しくジオコーディングされます。 2番目はエラーを投げていますが、これはさまざまな理由が考えられます。
  • Bing Maps V7コントロールは6月に廃止され、すぐにシャットダウンされます。そのバックエンドサービスの一部は既に停止されているため、問題が発生します。 1年以上前にV7を置き換えたBing Maps V8を使用しているはずです。 https://social.technet.microsoft.com/wiki/contents/articles/34563.bing-maps-v7-to-v8-migration-guide.aspx
+0

実際には、コンマは元のコードにあります。 StackOverflowのコードをコンパクトにしてフォーマットしようとしていたのですが、ここでそれを逃しました。同様に、私は私のコメントで言及した - 地図(タブ)が表示されている場合、すべてが機能します。ブラウザが最小化されているか、マップのあるタブが非アクティブな場合にのみ失敗します。私は実際に、この投稿を作成した後、単純なマップを作成し、サンプルデータを使用してv8でこれを試しました。結果は同じでした。私は、Search Managerのエラーのフォールバックとして使用するためにカスタム(そして残念ながら遅い)ジオコーディングサービスを作成しました。 –

+0

ジオコードクエリと結果がマップ(マップ)から独立している場合、Search Managerにコンストラクタ内のマップが必要なのはなぜだろうか。また、ジオコード検索リクエストに「境界」プロパティを設定しようとしましたが、適切に計算できないと思っていましたが、もう一度 - 運がありません。 –

+0

検索マネージャは、マップビューを使用して結果に影響を与える/重み付けを行います。また、マップからセッションキーを取得します。これについて気にしない場合は、単にRESTの場所APIを直接使用することができます:http://bingmapsv8samples.azurewebsites.net/#RestServices_JSONP – rbrundritt

関連する問題