2016-07-17 6 views
0

Ich habe eine Seite, die gut funktioniert, lädt eine Bing Map und erstellt eine Ebene, die dann mit Polygonen gefüllt wird. Ich muss dann die JSON-Daten neu laden, die die Polygone machen, und dies funktioniert wieder, aber die Daten werden dann zu einer anderen Ebene hinzugefügt, so dass sie oben angezeigt wird. Ich habe versucht, die Schicht zu löschen, die Schicht usw. zu löschen, aber nichts scheint zu funktionieren.Bing Maps Api eine Ebene löschen

Irgendeine Idee bitte.

Dies ist die Funktion, das alles ...

 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); 
    } 

Wie gesagt habe ich die Schicht ersten

dataLayer.clear(); 

mit löschen versucht haben, aber das scheint nichts zu tun.

Hilfe bitte, wie ich seit Stunden daran gearbeitet habe.

Danke

Cliff.

+0

Das Problem ist nicht sehr klar für mich. Was meinst du mit "erscheint übertrieben"? Über allem, was - die Karte? Sollte es nicht oben auf der Karte erscheinen? Was sind die aktuellen und gewünschten Situationen? (Screenshots können helfen) –

+0

Die Ebenen liegen übereinander. Es sollte nur eine Ebene geben und ich habe einen Alpha-Satz von 0,3, so dass Sie die Karte unter dem Polygon sehen können. Wenn die Funktion jedoch wiederholt wird, wird eine weitere Ebene über die letzte Ebene geladen und die Karte wird mit jeder neuen Ebene zunehmend dunkler. Ich möchte nur eine Ebene nicht mehrere. –

+0

Können Sie bitte den Aufruf von addData hinzufügen, da es sich anhört, dass addData perfekt funktioniert, wie es sollte - aber mehr als einmal mit denselben Polygonen aufgerufen wird (dasselbe json-Objekt, das die Polygone enthält). –

Antwort

2

Mit den Geräuschen der Dinge möchten Sie, dass alle Daten in einer einzelnen Ebene gerendert werden, stattdessen werden zwei oder mehr Ebenen gerendert. Dies geschieht, weil Sie bei jedem Aufruf der AddData-Funktion eine neue Instanz von dataLayer erstellen. Außerdem wird dadurch die lokale Variable für dataLayer überschrieben und Sie verlieren den Verweis auf die ursprüngliche Ebene, die Sie löschen/löschen möchten. Wenn Sie die Ebene löschen oder löschen möchten, tun Sie dies, bevor Sie die neue Ebene initialisieren. Versuchen Sie, die folgenden an die Spitze Ihrer AddData Funktion:

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

Alternativ wiederzuverwenden die Schicht durch Rodung, wenn es von oder zu schaffen existiert es, wenn es nicht der Fall ist:

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

Aus der Diskussion in den Kommentaren der Frage klingt es für mich, als ob er die gleichen Daten immer wieder benutzt (er schrieb, dass das gleiche Polygon wegen der hinzugefügten Ebenen dunkler und dunkler wird). Ich würde vorschlagen, zuerst zu sehen, wo der Aufruf ist - er muss nicht mehr als einmal oder alternativ aufgerufen werden - wenn er jedes Mal aufgerufen wird, wenn ein Polygon zum Objekt "json" hinzugefügt wird, würde ich argumentieren, dass es entfernt wird oder das Löschen der Schicht ist eine Verschwendung - da er die gleichen Daten verwenden wird. Stattdessen sollte die Funktion so geändert werden, dass nur die neuen Daten (Polygone) hinzugefügt werden. –