2017-11-03 23 views
0

私はこの例のようにBing Mapsの上に私自身にGeoJSONをロードしようと、Bing MapsのV8のAPIで働いています:https://www.bing.com/api/maps/sdkrelease/mapcontrol/isdk#geoJsonReadObject+JSBings地図 - 読むにGeoJSON

私は成功した私のJSONを作成しています(私が使用してそれをテストしていますhttps://bingmapsv8samples.azurewebsites.net/#GeoJson%20Drag%20and%20Drop

GeoJSONがマップに自動的にロードされるようにしようとしていて、JSONのエラーが発生していますが、わかりません.Bing Mapsのドラッグアンドドロップ機能とすべてのポイントがマップに表示されます。なぜなら(私はGeoJSON/JSONの新機能です)

Javascript:

function loadMapScenario() { 
      var map = new Microsoft.Maps.Map(document.getElementById('myMap'), { 
       credentials: 'KEY', 
       center: new Microsoft.Maps.Location(32.560116, -117.057889), 
       zoom: 5 
      }); 
      Microsoft.Maps.loadModule('Microsoft.Maps.GeoJson', function() { 
       var featureCollection = Microsoft.Maps.GeoJson.read(getGeoJson(), { polygonOptions: { fillColor: 'rgba(0, 255, 255, 0.3)' } }); 
       for (var i = 0; i < featureCollection.length; i++) { 
        map.entities.push(featureCollection[i]); 
       } 
      }); 

      function getGeoJson() { 
      $(function (callback) {  
       var data; 
         $.ajax({ 
          type: "POST", 
          url: "/TD/PatGeoJSON", 
          contentType: "application/json; charset=utf-8", 
          dataType: "json", 
          success: function (response) { 
           alert("Hello: " + response.responseText.data) 
           data = response.RepsonseText; 
           callback(data)         
          }, 
          failure: function (response) { 
           alert("Failure: " + response.responseText); 
          }, 
          error: function (response) { 
           alert("Failure: " + response.responseText); 
          }        
         }); 
        }); 
      } 
     } 

コントローラー:

 [HttpPost] 
     public JsonResult PatGeoJSON(string parent) 
     { 
      JObject jsondata = JObject.FromObject(new 
      { 
       type = "FeatureCollection", 
       features = from p in pList 
          select new 
          { 
           type = "Feature", 
           geometry = new Geometry 
           { 
            type = "Point", 
            coordinates = new double?[] { p.GeoLocation.Longitude, p.GeoLocation.Latitude } 
           }, 
           properties = new Properties 
           {         
            MemberName = p.MemberName, 
            /// etc... 
           } 
          } 
      });   

      return Json(jsondata, JsonRequestBehavior.AllowGet); 
     } 

私の結果は、現在、JSON文字列と "失敗" の警告です。注:getGEOJSON関数の結果としてGeoJSONをハードコードすると、すべてのポイントがマップに表示されます。私のスクリプトでJsonResultを正しく読んでいないのですか?

+0

変更 'データ= response.RepsonseTextは' – Shyju

+0

はコメントをありがとうございました。今私は失敗を参照してください:[オブジェクトのオブジェクト]ではなく、失敗+ JSONの文字列.... – Daniela

答えて

0

getGeoJson関数は非同期なので、何も返されません。このビンマップは解析するnull値を受け取り、単純に無視し、エラーはありません。 geojsonを読み込んで応答するときにコールバック関数を指定し、その値を読み込みます。ここにあなたのJavaScriptの更新版です:; `データ=応答は`;

function loadMapScenario() { 
    var map = new Microsoft.Maps.Map(document.getElementById('myMap'), { 
     credentials: 'KEY', 
     center: new Microsoft.Maps.Location(32.560116, -117.057889), 
     zoom: 5 
    }); 

    Microsoft.Maps.loadModule('Microsoft.Maps.GeoJson', function() { 
     getGeoJson(function(data){ 
      var featureCollection = Microsoft.Maps.GeoJson.read(data, { polygonOptions: { fillColor: 'rgba(0, 255, 255, 0.3)' } }); 
      for (var i = 0; i < featureCollection.length; i++) { 
       map.entities.push(featureCollection[i]); 
      } 
     }); 
    }); 

    function getGeoJson(callback) { 
     var data; 
     $.ajax({ 
      type: "POST", 
      url: "/TD/PatGeoJSON", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (response) { 
       alert("Hello: " + response.responseText.data) 
       data = response.RepsonseText; 
       callback(data)         
      }, 
      failure: function (response) { 
       alert("Failure: " + response.responseText); 
      }, 
      error: function (response) { 
       alert("Failure: " + response.responseText); 
      }        
     }); 
    } 
} 
関連する問題