2016-07-17 15 views
0

私はうまく動作するページを持っています.Bingマップをロードし、ポリゴンで塗りつぶされたレイヤーを作成します。ポリゴンを作成するJSONデータをリロードする必要がありますが、データは別のレイヤーに追加されるため、上に表示されます。私は、レイヤーを削除するなどのレイヤーをクリアしようとしましたが、何も動作していないようです。Bing Maps Apiはレイヤーをクリアします

ご了承ください。私は

dataLayer.clear(); 

を使用して第一層をクリアしようとしているしかし、それは何もしないようだと述べてきたように

これはそれをすべて行う関数...

 function AddData() { 

     dataLayer = new Microsoft.Maps.Layer(); 

     Microsoft.Maps.loadModule('Microsoft.Maps.GeoJson', function() { 
      var featureCollection = Microsoft.Maps.GeoJson.read(json, { 
       polygonOptions: { 
        strokeColor: 'LightSkyBlue', 
        strokeThickness: 2 
       } 
      }); 

      for (var i = 0; i < featureCollection.length; i++) { 
       var fillColour = featureCollection[i].metadata.FillColor; 
       featureCollection[i].setOptions({ fillColor: fillColour }); 

       Microsoft.Maps.Events.addHandler(featureCollection[i], 'click', displayClickBox); 
       Microsoft.Maps.Events.addHandler(featureCollection[i], 'mouseover', displayMouseOverBox); 
       Microsoft.Maps.Events.addHandler(featureCollection[i],'mouseout', displayMouseOut); 
       dataLayer.add(featureCollection[i], 0); 
      } 
      map.layers.insert(dataLayer); 
     }); 
    } 

     var getJson = function() { 
     var onContentComplete = function (response) { 
      //Load the JSON data into the local variable for use latter in the project... 
      json = response.data; 
      //load the map now that we have the polygon data... 
      AddData(); 
     }; 

     var onError = function (reason) { 
      //An error has occured so display a message to the user... 
      $scope.error = "Server communication error please try again..."; 
      //Log the error to the console for admin debug... 
      console.log(reason.data); 
     }; 

     //Load the JSON for the map polygons into memory ready for display... 
     $http.get("../JSON/MapData.json") 
      .then(onContentComplete, onError); 
    } 

です。

私はここで何時間も働いているように助けてください。

ありがとう

クリフ。

+0

問題ではありません私にはとても明確です。あなたは「上に現れる」という意味はどうですか?何の上に - 地図ですか?地図の上に表示してはいけませんか?現在の状況と欲しい状況は何ですか? (スクリーンショットが役立つかもしれません) –

+0

レイヤー同士が重なり合っています。レイヤーが1つだけで、Alphaが0.3に設定されているので、ポリゴンの下にマップが表示されます。しかし、関数が繰り返されるにつれて、最後のレイヤーの上に別のレイヤーがロードされ、マップは新しいレイヤーごとに徐々に暗くなります。私は1つのレイヤーが複数ではないことを望みます。 –

+0

addDataの呼び出しを追加できますか?addDataは完全に動作するように思えますが、同じポリゴン(ポリゴンを保持する同じjsonオブジェクト)で複数回呼び出されます。 –

答えて

2

すべてのデータを1つのレイヤーにレンダリングしたいが、その代わりに2つ以上のレイヤーをレンダリングしたいというものです。これは、AddData関数が呼び出されるたびにdataLayerの新しいインスタンスを作成するために発生します。さらに、これによってdataLayerのローカル変数が上書きされるため、クリアまたは削除しようとしている元のレイヤーへの参照が失われます。レイヤーをクリアまたは削除する場合は、新しいレイヤーを初期化する前にレイヤーをクリアまたは削除します。あなたのAddData関数関数の先頭に次を追加してみてください:

また
if(dataLayer){ 
    map.layers.remove(dataLayer); 
} 

、それがで存在する場合、それをクリアするか、そうでない場合は、それを作成することによって、層を再利用:

if(dataLayer){ 
    dataLayer.clear(); 
}else{ 
    dataLayer = new Microsoft.Maps.Layer(); 
} 
+0

質問のコメントの議論から、彼は同じデータを何度も何度も使っているように思います(彼は、追加されたレイヤーによって同じポリゴンが暗くなり暗くなると書いています)。だから、最初に呼び出しがどこにあるかを見ることをお勧めします - 複数回呼び出す必要はありません。あるいは、ポリゴンが 'json'オブジェクトに追加されるたびに呼び出されると、またはクリアすることは無駄です。同じデータを使用しようとしているからです。代わりに、新しいデータ(ポリゴン)のみを追加するように関数を変更する必要があります。 –