Mapbox setPaintProperty方法是否支持表达式?报错问题求助
关于Mapbox setPaintProperty支持表达式及你的错误分析
首先明确:Mapbox的setPaintProperty完全支持表达式,你的问题出在表达式的写法不符合Mapbox的语法规范上。
来看看你遇到的错误:Error: layers.places.paint.circle-radius[2][1][1]: Expected string but found number instead.,这个错误指向你表达式里嵌套获取属性的部分——你用了['object', ...]来包裹get操作,但这根本不是Mapbox表达式的合法操作符!
Mapbox里要获取嵌套对象的属性,正确的方式是直接把内层get的结果作为外层get的第二个参数,不需要额外的object包装。比如你的原代码里的这部分:
["get", "Time", ['object', ["get", "Day", ['object', ["get", "Stats"]]]]]
完全是多余的写法,应该改成:
["get", "Time", ["get", "Day", ["get", "Stats"]]]
修正后的完整代码应该是这样的:
map.setPaintProperty('places', 'circle-radius', [ 'interpolate', ['linear'], ['number', ["get", "Time", ["get", "Day", ["get", "Stats"]]]], 0, 4, 5, 24 ]);
另外你可以确认下数据结构:你的要素属性里Stats必须是一个对象,包含Day属性,而Day也是一个对象,包含Time数字属性——这样上面的嵌套get才能正确拿到数值。如果Time本身就是数字类型,其实外层的['number', ...]包装也可以省略,但加上能确保类型转换更稳妥。
至于你说这个表达式在其他场景能正常工作,大概率是那些场景里的语法规则和Mapbox表达式不同,或者有工具帮你自动处理了嵌套属性的写法,但Mapbox的表达式语法是严格的,必须使用它规定的操作符才行。
内容的提问来源于stack exchange,提问作者dez
相关产品推荐
相关产品推荐

