滚动esri贴图时重新加载标签

时间:2013-10-21 16:18:04

标签: events dictionary esri arcmap arcgis-js-api

我要做的是在用户移动地图或将地图滚动到其他位置时重新加载我的标签。目前,当用户放大一定级别时,标签会加载并且每件事情都正常。当用户开始将地图移动到其他状态时,标签会消失,您必须缩小并放大以重新生成标签。

我已将onZoomEnd更改为update / update-end / load / 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 

1 个答案:

答案 0 :(得分:1)

如果可能,新的3.7 Esri ArcGIS JavaScript API有一个新的LabelLayer,可以帮助您解决问题。它没有那么多功能,但却是测试版功能的良好开端。

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