簡體   English   中英

Openlayers 4:更改所選要素的繪制順序

[英]Openlayers 4: Changing the draw order of selected features

我在OpenLayers 4(4.4.1)中有一個矢量圖層。 該圖層具有多個具有LineString幾何的特征。 一些功能重疊。

如果我在要素重疊的點處單擊,我只希望將其中一個要素繪制為選中。 其他應該仍然可供以后選擇(通過單獨的UI選擇列表中的功能ID)。

如果我單擊另一個要素ID(在單獨的UI選擇列表中),該要素應繪制為選中,並且先前選擇的不應繪制為選中,但仍可在選擇列表中使用。

這是有效的,但它只是第一個(默認)選定的功能,似乎在頂部繪制。

下圖顯示了功能ID 10049被標記為已選中的情況。 選擇中的第一個元素是正確繪制的

下圖顯示了功能ID 10048被標記為已選中的情況。 選擇中的第二個元素繪制在第一個元素下面

如果我點擊它們不重疊的最南部特征上的某個位置,則會在頂部選中時正確繪制。

如果在沒有重疊的情況下單擊,則會正確繪制最南端的要素

要跟蹤需要在視覺上選擇的功能,有一個變量:

var multiselectPrimaryId = 0;

我使用以下selectInteraction代碼:

selectInteraction.on('select', function (e) {
    e.deselected.forEach(function (feature) {
        feature.setStyle(null);
    });
    if (e.selected.length <= 1) {
        $("#multipleHitWindow").hide();
        multiselectPrimaryId = 0;
        if (e.selected.length == 0) {
            return;
        }
    }
    var features = e.selected;
    if (multiselectPrimaryId == 0) {
        multiselectPrimaryId = features[0].getId();
    }
    if (features.length > 1) {
        var text = "Multiple hits: ";
        features.forEach(function (elem, index, array) {
            text += "<a href='javascript:changeSelectedFeature("
                 + elem.getId() + ")'>" + elem.getId() + "</a>  &nbsp;";
            if (elem.getId() == multiselectPrimaryId) {
                elem.setStyle(selectedStyleFunction);
            }
        });
        $('#multipleHit').html(text);
        $("#multipleHitWindow").show();
    }
    else {
        features[0].setStyle(selectedStyleFunction);
    }
});

我從動態創建的鏈接列表中調用此函數:

function changeSelectedFeature(id) {
    multiselectPrimaryId = id;
    var featuresArray = selectInteraction.getFeatures().getArray().slice(0);
    var event = new ol.interaction.Select.Event()
    event.deselected = featuresArray;
    event.selected = featuresArray;
    event.type = 'select';
    event.target = selectInteraction;
    event.mapBrowserEvent = map.mapBrowserEventHandler_;
    selectInteraction.dispatchEvent(event);
}

如何將selectedStyle設置為在頂部繪制? 我試圖將zIndex添加到selectedStyle。 但它似乎沒有任何影響。

這是一個JsFiddle: https ://jsfiddle.net/5j6c6mgo/7/。 選擇還有一些其他小問題,但希望您能夠看到我上面描述的行為。

我有一個矢量圖層...圖層有幾個帶有LineString幾何圖形的特征​​。 一些功能重疊。

我認為您需要將LineString幾何圖形放在單獨的圖層中才能使用'zIndex' - 您可以通過在相關圖層上調用'setZIndex'來完成此操作。 這將允許您在運行時設置繪制順序

除此之外,矢量將以其初始繪制順序顯示,並且缺少重繪以改變其繪制順序是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM