JSAPI - làm thế nào để thêm một đồ họa lên trên một đồ họa khác trong cùng một lớp?


8

Tôi có một lớp đồ họa và tôi muốn thêm một đồ họa đằng sau đồ họa hiện có. Tôi đã nghĩ ra điều này:

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

Nhưng tôi phải gạt các điểm đánh dấu ra khỏi màn hình và sau đó đưa chúng trở lại màn hình trước khi hiển thị đồ họa 'unshift'-ed chính xác. Tôi đã thử gọi refresh mà không ảnh hưởng gì:

graphicsLayer.refresh();

Làm thế nào điều này có thể được thực hiện mà không giới thiệu một lớp đồ họa thứ hai?

Câu trả lời:


10

Đồ họa trong GraphicsLayer (cũng như trong FeatureLayer) là các đối tượng dojx.gfx. Mỗi đồ họa có một phương thức getDojoShape . Đây là chìa khóa để thay đổi thứ tự vẽ đồ họa của bạn.

Tôi đưa ra một ví dụ hoạt động trên jsfiddle: http://jsfiddle.net/fKwRn/

Nhấp vào bản đồ để thêm một điểm. Điểm mới nhất luôn được thêm vào bên dưới các điểm hiện có.


3

Chúa ơi, tôi hy vọng đây không phải là "câu trả lời" chính xác:

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

Tôi đã giới thiệu một phương thức addFirst để thêm đồ họa vào phía trước mảng đồ họa và phương thức vẽ lại để loại bỏ tất cả đồ họa có thể nhìn thấy khỏi lớp và thêm chúng trở lại lớp. Điều đó không thể tốt được.


2
Điều này không được khuyến khích. Hãy bám vào công chúng, tài liệu phương pháp. Câu trả lời của tôi giải thích làm thế nào để thêm một đồ họa bên dưới / đằng sau đồ họa hiện có.
Derek Swingley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.