javascript - 如何编写用于输入多列、比较它们的值并在地图中触发过滤器的 mapbox 表达式?
问题描述
我很高兴你正在阅读我的这篇文章并帮助我解决这个问题。感谢您为此付出的时间和努力。
这是我对单列值过滤的表达式。这对于一列(Project_Name)很好,但我需要输入多列:
var expression = [
"any",
["in", ["get", "Project_Name"], ["literal", [selected.innerHTML]]
]];
尝试的方法:
#1:
var features = map.queryRenderedFeatures(e.point);
var long = String(features[0].properties.Longitude);
var lat = String(features[0].properties.Latitude);
var expression1 = [
"any",
['in', long, ['get', 'Longitude']],
['in', lat, ['get', 'Latitude']],
["in", ["get", "Project_Name"], ["literal",[selected.innerHTML]]
]];
#2:
var expression2 = ['match',
['in', long, ['get', 'Longitude']],
['in', lat, ['get', 'Latitude']]
];
这不会导致任何错误,但不会提供所需的过滤结果。如果有人知道如何解决这个问题,那么您的帮助将非常有价值。
我相信以下图片将完美地说明我的意思:
所以基本上我想要实现的是,我的所有符号都应该严格根据坐标而不是根据项目名称过滤掉。
如果这篇文章需要编辑更多信息,请不要犹豫。随意。谢谢。
解决方案
您的方法是正确的:使用['any']
运算符将多个表达式组合为 OR。
如果这不起作用,则您的问题出在各个表达式上。
对于初学者,您的第二个表达式试图匹配Longitude
string中字段的值90.18
。这似乎不太可能是你想要的。也许您想与一个数字进行比较:['==', ['get', 'Longitude'], 90.18]
你也有不一致的情况:Longitude
, latitude
.
不过,目前还不清楚您要达到的目标。
推荐阅读
- python - 集中模式数据库的正确方法
- azure - Keda AzureMonitor 触发器没有给出 activeDirectoryClientId 给定错误
- python-3.x - 自动将多个同名变量收集到一个数组中
- pagespeed - PageSpeed Insights - 限制/配额增加
- windows - 无法将命令绑定到 Sublime Text 中的空格键
- c# - 使用 Docker 进行 ASP.NET Core Windows 身份验证
- c# - 替换文件中的文本,但速度更快
- javascript - Javascript & HTML:如何显示出现在我的 html 中的时间?
- javascript - date-fns:如何以 YYYY-MM-DDThh:mm:ss:dddddd 格式获取当前日期 + 时间
- excel - 在VBA中插入列后查找单元格