慕的地8271018
2021-08-26 20:13:41
我在使用 Mapbox GL 組合過濾器時遇到問題。過濾器單獨工作,但組合時會產生錯誤。自治市鎮過濾器使用一個可以動態更改的值數組,但我只是在代碼中放了一個示例,說明它可能是什么樣子。每當我嘗試組合過濾器時,我都會收到錯誤消息:“期望 [==, !=, >, >=, <, <=, in, !in, all, any, none, has, !has] 之一, “找到匹配”問題似乎是將使用“匹配”表達的過濾器與使用“==”運算符的過濾器組合在一起。有誰知道如何解決這一問題。var borough_val = ["BX", "BK", "MN"];var zipCodeFilter = ["==", 'ZipCode', Number(zipcode_val)];var boroughFilter = ['match', ['get', 'Borough'], borough_val, true, false];var combinedFilter = ["all", zipCodeFilter, boroughFilter];map.setFilter('parcels_fill', combinedFilter);
1 回答

慕后森
TA貢獻1802條經驗 獲得超5個贊
這是我多次陷入的陷阱。有“舊語法”和“新語法”。
舊語法: ['==', 'ZipCode', '90210']
新語法: ['==', ['get', 'ZipCode'], '90210']
正如您所注意到的,在某種程度上,舊語法仍然受支持。但是如果你嘗試將舊語法和新語法結合起來,Mapbox-GL-JS 會假設整個表達式都是新語法,并且無法解析。
簡單的解決方法是在整個過程中使用新語法:
var borough_val = ["BX", "BK", "MN"];
var zipCodeFilter = ["==", ['get', 'ZipCode'], Number(zipcode_val)];
var boroughFilter = ['match', ['get', 'Borough'], borough_val, true, false];
var combinedFilter = ["all", zipCodeFilter, boroughFilter];
map.setFilter('parcels_fill', combinedFilter);
(也有一些情況下或某些原因(無法解決的歧義?太多的努力?),Mapbox-GL-JS 無法識別更復雜的表達式,這些表達式是有效的“舊語法”。因此,在任何地方使用新語法通常是最安全的.)
添加回答
舉報
0/150
提交
取消