JSAPI-同じレイヤー内の別のグラフィックの上にグラフィックを追加する方法は?


8

グラフィックレイヤーがあり、既存のグラフィックの背後にグラフィックを追加したい。私はこれを思いつきました:

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

しかし、私はマーカーを画面外にパンしてから、「シフト解除」したグラフィックが正しく表示される前に、それらを表示にパンする必要があります。私は何の影響もなくリフレッシュを呼び出してみました:

graphicsLayer.refresh();

2番目のグラフィックレイヤーを導入せずにこれを行うにはどうすればよいですか?

回答:


10

GraphicsLayer(およびFeatureLayer)のグラフィックはdojx.gfxオブジェクトです。各グラフィックにはgetDojoShapeメソッドがあります。これは、グラフィックの描画順序を変更するための鍵です。

私はjsfiddleに実際の例を載せました:http ://jsfiddle.net/fKwRn/

地図をクリックしてポイントを追加します。最新のポイントは常に既存のポイントの下に追加されます。


3

これが正しい「答え」ではないことを願っています。

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

addFirstメソッドを導入してグラフィックスをグラフィックスアレイの前面に追加し、redrawメソッドを使用して、表示されているすべてのグラフィックスをレイヤーから削除し、レイヤーに再度追加しました。それは良くありません。


2
これはお勧めできません。文書化された一般的な方法に固執してください。私の答えは、既存のグラフィックの下/後ろにグラフィックを追加する方法を説明しています。
Derek Swingley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.