簡體   English   中英

在 JavaScript 中為 ArcGis 使用對象時如何為多個圖層應用過濾器

[英]How to apply filter for multiple layers when using object in JavaScript for ArcGis

我正在使用 ArcGis JavaScript API 來顯示一些地圖。 我在對象中有特征層的 ID,如下所示:

const layersByYears = [ 
    { year: 1918, layers: [ 
        { layerID: "443709212b894e9297888b3194b51100", opacity: 1.0, name: "ORP", featureLayer: null },
        { layerID: "61a605dca69c4aa0ac1b3858ba328fd3", opacity: 1.0, name: "obceSouc", featureLayer: null }
    ] },
    { year: 1936, layers: [ 
        { layerID: "443709212b894e9297888b3194b51100", opacity: 1.0, name: "ORP", featureLayer: null },
        { layerID: "61a605dca69c4aa0ac1b3858ba328fd3", opacity: 1.0, name: "obceSouc", featureLayer: null }
    ] },
    { year: 1950, layers: [ 
        { layerID: "23bcd52310854d6185e5f22a4eca0303", opacity: 1.0, name: "ORP", featureLayer: null },
        { layerID: "61a605dca69c4aa0ac1b3858ba328fd3", opacity: 1.0, name: "obceSouc", featureLayer: null }
    ] },
    { year: 1981, layers: [ 
        { layerID: "401e9530ba074936800a8f596fc49d70", opacity: 1.0, name: "ORP", featureLayer: null },
        { layerID: "61a605dca69c4aa0ac1b3858ba328fd3", opacity: 1.0, name: "obceSouc", featureLayer: null }
    ] },
    
]

我有簡單的輸入元素來選擇年份,當單擊按鈕時,圖層也會更改。 該項目在這里: https ://www.pramenykrkonos.eu/wp-content/uploads/2022/06/index-3.html 它是捷克語 - 我需要為實際圖層應用過濾器。

這是為每一層創建變量的地方:

const createFL = (layer) => { 
        if(layer.featureLayer !== null && layer.featureLayer !== undefined)
            return;
        layer.featureLayer = new FeatureLayer({ portalItem: {
            id: layer.layerID,
            opacity: layer.opacity !== undefined ? layer.opacity : 1.0,
            visible: false,
        } })
    }

過濾器的表達式在這里定義並且應該在單擊按鈕“doBtn”時應用。

document.getElementById("doBtn").addEventListener("click",doQuery);
    const attributeName = document.getElementById("attSelect");
    const expressionSign = document.getElementById("signSelect");
    const inputValue = document.getElementById("valSelect");
    let expression;

    function doQuery() {
        expression =    attributeName.value +
                        expressionSign.value +
                        "'"+inputValue.value+"'";
        document.getElementById("printResults").innerHTML = expression;
        featureLayer.definitionExpression = expression; 
                            
    }

如果我理解這個問題,那么我想一個簡單的解決方案是獲取可見層並應用過濾器。 我猜,這種情況下的可見層是“當前”層。

如果是這種情況,那么您的功能將是這樣的,

function doQuery() {
    expression = attributeName.value +
        expressionSign.value +
        "'" + inputValue.value + "'";
    document.getElementById("printResults").innerHTML = expression;
    // get visible feature layers, and then apply filter
    concatedLayers.filter(l => l.visible).forEach(l => l.definitionExpression = expression);
}

暫無
暫無

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

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