共同类型表达式
共同类型表达式(08.5)
支持MapLibre风格的boolean/number/string/object多候选类型断言,array项类型/长度断言、typeof、properties及get/has的可选对象与字符串名称表达式。规范依据官方表达式说明,由SqsMap共同Rust求值器独立实现;不调用MapLibre运行时。
map.setPaintProperty('places-layer','circle-color',
['case',['boolean',['feature-state','selected'],false],'#ff00ff','#0000ff']);
map.setPaintProperty('places-layer','circle-radius',
['number',['get','height',['object',['literal',{height:18}]]],6]);
await map.sqs.flush({render:true});
断言不把字符串数字转换为数字,按顺序采用首个匹配类型的值;全部不匹配则求值失败,paint按既有默认值/警告处理,查询筛选明确报错。已成功的候选会短路后续求值。array语法支持仅值、类型/值、类型/长度/值,类型为string/number/boolean,固定长度非负整数不超过65536。typeof的数组结果包含类型与长度,例如array<number, 2>,混合项使用value。get缺键返回null;has区分缺键与存在的null,对象类型错误明确失败。
仅声明JSON类型子集;collator、format/image专有值、其余未实现表达式继续后续任务。节点/深度、源及显示预算仍生效;feature-state只用于paint。GeoJSON与共同MVT使用同一语义,setStyle(URL)底图表达式保留其独立文档范围。完整HTML及共同脚本包含选择、排序、视图、查询、来源和销毁处理。
变量作用域(08.6)
共同paint、筛选和查询表达式支持let/var:变量在let的结果表达式中可见,内层遮蔽外层;同一let的绑定值只读取外层变量。绑定按需计算,未使用绑定中的运行期错误不会触发。名字为非空ASCII字母/数字/下划线,最多256字节;未绑定变量或无效结构在写入前拒绝。
map.setPaintProperty('places-layer','circle-color',
['let','selected',['boolean',['feature-state','selected'],false],
['case',['var','selected'],'#ff00ff','#0000ff']]);
map.setPaintProperty('places-layer','circle-radius',
['let','large',18,['step',['zoom'],6,4,['var','large']]]);
await map.sqs.flush({render:true});
相机zoom可作为外层let最终step/interpolate的输入;不能藏在绑定值或其它位置。共同图层继续按实际zoom重算。每次表达式求值最多8192步/64层,AST继续限制1024节点/32层;预算失败按paint默认值/警告处理,图层筛选和查询筛选明确返回RESOURCE_LIMIT,写入不留下半成品。
完整HTML和共同脚本包含所有按钮、来源和清理,使用同一变量逻辑在原生及真实WASM主线程/严格Worker运行。依据公开表达式规范独立实现,不使用MapLibre代码。其它未实现运算及完整图层类型继续后续任务。