Перезагрузка ярлыков при прокрутке карты esri

То, что я пытаюсь сделать, это перезагрузить мои метки, когда пользователь перемещает или прокручивает карту в другую позицию. В настоящее время, когда пользователь приближается к определенному уровню, ярлыки загружаются, и все работает правильно. Когда пользователь начинает перемещать карту в другое состояние, ярлыки исчезают, и вам приходится уменьшать и увеличивать масштаб, чтобы восстановить ярлыки.

Я изменил onZoomEnd для обновления / 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 ответ

Если возможно, новый 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();
});
Другие вопросы по тегам