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 スタイルの 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();
});
于 2013-10-30T06:39:25.607 に答える