表达式从嵌套对象中获取值



我很难在Mapbox/Maplibre GL JS中编写一个样式表达式,以便根据geojson中的值设置圆半径。我有很多功能,它们的属性看起来像这样:

"properties": {
"name": "Site A",
"type": "Bucket Trap",
"data": [
{
"date": "2019-08-26",
"catch": 21,
},
{
"date: "2019-08-27",
"catch": 15
}
}

当用户从表单控件中选择日期时,我希望将圆半径设置为等于该特定日期的捕获值。

我想也许我可以使用的索引来查找具有请求日期的对象,然后从该对象中获取catch值。

我试过以下几种:

let selectedDate = '2019-08-26';
map.setPaintProperty(
'traps',
'circle-radius',
[
'get',
'catch',
[
'at',
[
'index-of',
selectedDate,
[
'get',
'date',
[
'get',
'avgdata'
]
]
],
[
'get',
'avgdata'
]
]
]
);

并在控制台上接收此错误:

期望值的类型为object,但找到的却是array<对象,26>相反

如果你更容易在一行上阅读表达式,下面是我一直在尝试的:

['get', 'catch', ['at', ['index-of', selectedDate, ['get', 'date', ['get', 'avgdata']]], ['get', 'avgdata']]]

提前感谢您的任何建议!

嵌套对象可以通过嵌套表达式和使用"properties"对象来完成:-

{
"description" : {"title" : "foo"}
}
['get', 'title', ['get','description', ['properties']]]

我不确定是否可以用GeoJSON的结构化方式编写您想要的表达式。但由于您控制了GeoJSON,您可以简单地首先对其进行重组,因此它看起来像这样:

{
"properties": {
"name": "Site A",
"type": "Bucket Trap",
"2019-08-26": 21,
"2019-08-27": 15
}
}

现在,您可以访问给定日期的捕获计数,如下所示:

map.setPaintProperty('traps', 'circle-radius', ['get', selectedDate]);

相关内容

  • 没有找到相关文章

最新更新