JSAPI - como adicionar um gráfico sobre outro gráfico na mesma camada?

8

Eu tenho uma camada de gráficos e gostaria de adicionar um gráfico por trás dos gráficos existentes. Eu vim com isso:

graphicsLayer.add(overlay.graphic);
graphicsLayer.graphics.unshift(graphicsLayer.graphics.pop());

Mas tenho que deslocar os marcadores para fora da tela e depois visualizá-los novamente antes que os gráficos 'sem deslocamento' sejam exibidos corretamente. Tentei chamar a atualização sem afetar:

graphicsLayer.refresh();

Como isso pode ser feito sem a introdução de uma segunda camada gráfica?

ca0v
fonte

Respostas:

10

Os gráficos em um GraphicsLayer (assim como em um FeatureLayer) são objetos dojx.gfx. Cada gráfico possui um método getDojoShape . Essa é a chave para alterar a ordem dos desenhos dos seus gráficos.

Eu coloquei um exemplo de trabalho no jsfiddle: http://jsfiddle.net/fKwRn/

Clique no mapa para adicionar um ponto. O ponto mais novo é sempre adicionado abaixo dos pontos existentes.

Derek Swingley
fonte
3

Meu Deus, espero que esta não seja a "resposta" correta:

graphicsLayer.acme = {
    addFirst: function (graphic)
    {
        graphicsLayer.graphics.unshift(graphic);
        graphic._graphicsLayer = graphicsLayer;
        graphicsLayer._updateExtent(graphic);
        graphicsLayer.onGraphicAdd(graphic);
    },
    redraw: function ()
    {
        var graphics = dojo.filter(graphicsLayer.graphics, function (item)
        {
            return item.visible;
        });
        dojo.forEach(graphics, function (item)
        {
            graphicsLayer.remove ( item );
        });
        dojo.forEach(graphics, function (item)
        {
            graphicsLayer.add(item);
        });
    }
};

Eu introduzi um método addFirst para adicionar o gráfico à frente da matriz de gráficos e um método de redesenho para remover todos os gráficos visíveis da camada e adicioná-los novamente à camada. Isso não pode ser bom.

ca0v
fonte
2
Isto não é recomendado. Por favor, atenha-se ao público, métodos documentados. Minha resposta explica como adicionar um gráfico abaixo / atrás dos gráficos existentes.
Derek Swingley