JSAPI: ¿cómo agregar un gráfico encima de otro gráfico en la misma capa?

8

Tengo una capa de gráficos y me gustaría agregar un gráfico detrás de los gráficos existentes. Se me ocurrió esto:

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

Pero tengo que desplazar los marcadores fuera de la pantalla y luego volver a verlos antes de que los gráficos 'sin desplazamiento' se muestren correctamente. He intentado llamar a actualizar sin ningún efecto:

graphicsLayer.refresh();

¿Cómo se puede hacer esto sin introducir una segunda capa de gráficos?

ca0v
fuente

Respuestas:

10

Los gráficos en un GraphicsLayer (así como en un FeatureLayer) son objetos dojx.gfx. Cada gráfico tiene un método getDojoShape . Esta es la clave para cambiar el orden de dibujo de sus gráficos.

Puse un ejemplo de trabajo en jsfiddle: http://jsfiddle.net/fKwRn/

Haga clic en el mapa para agregar un punto. El punto más nuevo siempre se agrega debajo de los puntos existentes.

Derek Swingley
fuente
3

Dios mío, espero que esta no sea la "respuesta" correcta:

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

Introduje un método addFirst para agregar el gráfico al frente de la matriz de gráficos y un método de redibujado para eliminar todos los gráficos visibles de la capa y agregarlos nuevamente a la capa. Eso no puede ser bueno.

ca0v
fuente
2
Esto no es recomendable. Por favor, respete los métodos públicos y documentados. Mi respuesta explica cómo agregar un gráfico debajo / detrás de los gráficos existentes.
Derek Swingley