2013-10-21 24 views
1

我想要做的是當用戶移動或滾動地圖到不同位置時重新加載我的標籤。目前,當用戶放大到一定的水平時,標籤的加載和每件事情的工作都是正確的。當用戶開始將地圖移動到不同的狀態時,標籤消失,您必須縮小並放大以重新生成標籤。滾動esri時重新加載標籤地圖

我已經改變了onZoomEnd更新/升級端/負載/的onLoad

下面是代碼:

function initUI(graphics) { 

    dojo.connect(globals.map, 'onZoomEnd', function() { 

     console.log("Initial zoom level is :" + globals.map.getZoom());       

     var font = new esri.symbol.Font(14, esri.symbol.Font.STYLE_NORMAL, esri.symbol.Font.VARIANT_NORMAL, esri.symbol.Font.WEIGHT_BOLDER, "Arial");    
     var gl = globals.featureLayers[1].graphics; 

     globals.map.graphics.clear(); 

     if (globals.map.getZoom() >= 9) {        

      console.log(codeID); 

      for (var i = 0; i < gl.length ; i++) {     

       var g = globals.featureLayers[1].graphics[i]; 

       if (codeID == 1 || codeID == 32 || codeID == 28 || codeID == 33 || codeID == 10) { 

        var strLabel = g.attributes.NAME + ":" + $.formatNumber(findFips(g), { format: '#,###', locale: "us" });//creates string label formatted 
        var textSymbol = new esri.symbol.TextSymbol(strLabel, font);//create symbol with attribute name 

        textSymbol.setColor(new dojo.Color([0, 0, 0]));//set the color 
        var pt = g.geometry.getExtent().getCenter(); //get center of county 

        var labelPointGraphic = new esri.Graphic(pt, textSymbol); //create label graphic 
        //add label to the intended graphic      
        globals.map.graphics.add(labelPointGraphic); 
       } 

       else {      

        var strLabelPct = g.attributes.NAME + " : " + $.formatNumber(findFips(g), {format: '#,###.0', locale: "us"}) + "%"; 
        var textSymbol = new esri.symbol.TextSymbol(strLabelPct);//create symbol with attribute name           
        textSymbol.setColor(new dojo.Color([0, 0, 0]));//set the color 
        var pt = g.geometry.getExtent().getCenter(); //get center of county 
        var labelPointGraphic = new esri.Graphic(pt, textSymbol); //create label graphic 
        //add label to the intended graphic      
        globals.map.graphics.add(labelPointGraphic); 
       } 
      }//end for 
     }//end if 

    });//end on zoom end 
+0

1)嘗試使用extent-change? 2)關於整個事情,我有點困惑......如果你只想以zoom> 9顯示東西,你可以在圖層級設置它。否則......你爲什麼要這樣做,而不是僅僅將'globals.featureLayers [1]'添加到地圖本身? – Juffy

+0

它的三個地圖,當放大過去一定的水平或縮放地圖的變化。一旦到達第1層,就會顯示您看到標籤和數據的程度。但是如果你開始滾動過去的初始範圍,沒有別的東西出現。它的許多數據只是將globals.featurelayers [1]添加到地圖上。多數民衆贊成你是它的規模和呈現onDemand –

回答

1

如果可能的話,新的3.7 ESRI的ArcGIS中的JavaScript API有一個新的LabelLayer是可能有助於處理您的問題。它沒有儘可能多的功能,但是對於測試版功能來說是一個很好的開始。

Label Layer

下面是代碼,我已經使用的塊(寫在3.7)。它使用新的AMD風格require和「dojo/on」將更新的事件觸發器附加到地圖上。

map.on('zoom-end', function() { 
    handleMapPanZoom(); // Turns some complex layers on and off. 
    maxOffset = calcOffset(map); // Updates the max offset at each zoom level. 
    for (var i = 0; i < lyrs.length; i++) { 
     lyrs[i].setMaxAllowableOffset(maxOffset); 
    } 
}); 
map.on('extent-change', function() { 
    handleMapPanZoom(); 
}); 
+0

我採取的方法是使用更新結束。通過這種方式,一旦圖層縮放更新,只要它在該縮放級別上,就會一次又一次地加載所有圖形。它非常類似於您的map.on代碼感謝 –

+0

只需重複複製圖形標籤即可。根據你的代碼,你可能想要lyrGraphics.clear(),如果你正在循環和添加圖形,或檢查圖形是否已經存在,並跳過添加它。 – disuse