[英]Openlayers 4: Changing the draw order of selected features
我在OpenLayers 4(4.4.1)中有一個矢量圖層。 該圖層具有多個具有LineString
幾何的特征。 一些功能重疊。
如果我在要素重疊的點處單擊,我只希望將其中一個要素繪制為選中。 其他應該仍然可供以后選擇(通過單獨的UI選擇列表中的功能ID)。
如果我單擊另一個要素ID(在單獨的UI選擇列表中),該要素應繪制為選中,並且先前選擇的不應繪制為選中,但仍可在選擇列表中使用。
這是有效的,但它只是第一個(默認)選定的功能,似乎在頂部繪制。
如果我點擊它們不重疊的最南部特征上的某個位置,則會在頂部選中時正確繪制。
要跟蹤需要在視覺上選擇的功能,有一個變量:
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> ";
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.