1

我要做的是在用户将地图移动或滚动到不同位置时重新加载我的标签。目前,当用户放大超过某个级别时,标签会加载并且一切正常。当用户开始将地图移动到不同的状态时,标签会消失,您必须缩小并重新放大以重新生成标签。

我已将 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 
4

1 回答 1

1

如果可能,新的 3.7 Esri ArcGIS JavaScript API 有一个新的 LabelLayer,它可能有助于解决您的问题。它没有那么多功能,但对于测试版功能来说是一个很好的开始。

标签层

这是我使用过的一段代码(用 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();
});
于 2013-10-30T06:39:25.607 回答