2013-10-21 3 views
1

사용자가지도를 다른 위치로 이동하거나 스크롤 할 때 레이블을 다시로드하려고합니다. 현재 사용자가 일정 수준 이상으로 확대하면 레이블이로드되고 모든 것이 올바르게 작동합니다. 사용자가지도를 다른 상태로 옮기면 라벨이 사라지고 라벨을 다시 생성하려면 축소하고 다시 확대해야합니다.지도를 스크롤 할 때 라벨 다시로드

내가/업데이트 엔드 /로드 /에 onLoad 여기

를 업데이트 onZoomEnd 변경 한 코드입니다 : 새로운 3.7 제공하는 ESRI ArcGIS 자바 스크립트 API는 새로운 LabelLayer을 가지고,

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) 익스텐트 변경을 사용해보십시오. 2) 전체적인 점에 대해 다소 혼란 스럽습니다 ... 물건을 줌> 9로만 표시하려면 레이어 수준에서 설정할 수 있습니다. 그렇지 않으면 ... 왜 globals.featureLayers [1]'를 맵 자체에 추가하는 대신에이 모든 것을하고 있습니까? – Juffy

+0

세 가지 맵은 특정 레벨을 확대하거나지도가 변경 될 때 확대됩니다. 레이어 1에 도달하면 라벨 및 데이터가 표시되는 범위가 표시됩니다. 그러나 처음 범위를 지나서 스크롤을 시작하면 그 밖의 아무 것도 나타나지 않습니다. 그것의 데이터를 전역에 추가하는 것입니다. featurelayer [1] 처음에지도에. 당신이 저울로 작성하고 onDemand로 만든 것입니다. –

답변

1

가능하다면 그 문제를 해결하는 데 도움이 될 수 있습니다. 그것은 많은 기능을 가지고 있지는 않지만 베타 기능을위한 훌륭한 시작입니다. 여기

Label Layer

는 (3.7 작성) 내가 사용했던 코드 블록이다. 업데이트 된 이벤트 트리거를 맵에 첨부하기 위해 새로운 AMD 스타일 요구 사항과 "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

내가 취한 접근법은 update-end를 사용하는 것이 었습니다. 이렇게하면 확대/축소 수준에있는 한 레이어가 업데이트되면 모든 그래픽이 반복해서로드됩니다. 그것 map.on 코드 덕분에 매우 비슷합니다 –

+0

그냥 반복해서 그래픽 레이블을 복제의 관점에서 조심하십시오. 코드에 따라 루프를 반복하고 그래픽을 추가하는 경우 lyrGraphics.clear()를 사용하거나 그래픽이 이미 있는지 확인하고 추가하지 않아도됩니다. – disuse

관련 문제