二维均匀线图案
当匹配SDK的commonPlanarLayerComposition为true时,墨卡托零pitch/roll、无terrain/extrusion的共同二维画面允许影像、背景、图文、热力及既有静态线面效果按完整图层顺序组合。本文旧阶段关于“媒体组合拒绝”的限制在此共同二维范围内由该能力取代;自定义线动画、倾斜/球面/地形及其它未实现材料组合仍保持各自限制。重排和兼容diff保留身份/缓存/在途请求/淡入时钟;所有素材、联合几何和纹理预算均先验证再发布。参见二维图层合成。
本阶段已接通的限定范围:能力commonLinePatternsUniform为共同二维Web Mercator的uniform RGBA line-pattern。每层选择一张图片,支持字符串、image/coalesce、global-state、显式uniform对象get/has、词法/惰性分支及顶层整数zoom step;本页示例使用uniform选图。按要素选图请查询commonLinePatternsPerFeature并参阅逐要素线图案,其中paint feature-state选图为SqsMap共同扩展。line-width和line-opacity继续支持已有属性/state/global与连续zoom表达式,filter和line-sort-key保留。
图案整幅高度映射到实际line-width,沿程周期为line-width×图片宽/图片高。例如32×8图像在线宽8时每32 CSS像素重复,线宽4时每16 CSS像素重复。pixelRatio和设备DPR不会另行缩小这个比例周期或线宽;width0完全不绘制。颜色来自RGBA图像并乘line-opacity,line-color不染色。透明像素显示下方地图,不用背景色覆盖。
import { map } from 'sqsmap';
map.setStyle(null);
await map.sqs.flush();
map.setProjection({type:'mercator'});
map.jumpTo({center:[116.4,39.9],zoom:13,pitch:0});
await map.sqs.flush();
const rgba=[];
for(let y=0;y<8;y++) for(let x=0;x<32;x++)
rgba.push(...(x<16 ? [0,80,255,255] : [0,0,0,0]));
map.addImage('route-stripe',
{width:32,height:8,data:new Uint8Array(rgba)}, {pixelRatio:2});
map.addSource('route',{type:'geojson',data:{type:'Feature',id:1,
properties:{width:8},geometry:{type:'LineString',
coordinates:[[116.38,39.9],[116.42,39.9]]}}});
map.addLayer({id:'route',type:'line',source:'route',paint:{
'line-width':['coalesce',['feature-state','width'],['get','width']],
'line-opacity':1,
'line-pattern':['image','route-stripe']
}});
await map.sqs.flush({render:true});
map.setFeatureState({source:'route',id:1},{width:4});
await map.sqs.flush({render:true});
图像宽必须为2..512的2次幂,高1..512,pixelRatio遵守图片登记接口的有限正数约束。当前只接RGBA,选择SDF明确拒绝。图像缺失时线不显示,触发实际可见需求对应的styleimagemissing;补图后自动恢复,coalesce可回退到可用图像。删除line-pattern用null,恢复既有纯色线。每条路径起点相位为0,闭环起点可能有纹理接缝;MVT按每块解码路径从0开始,跨瓦片统一相位与拼接尚未接通,不提供跨zoom过渡混合。
初期仅默认butt端头及稳定miter路径。显式端帽/连接、反折、miter超过2、不稳定短段或自交,以及非零offset/translate/gap、dash/gradient/animation、pitch/3D/globe/media组合明确拒绝。共同查询是保守线宽包络,透明图案像素仍可能命中原ID,不能用作逐像素拾取。
静态图案与既有动画合计32层、4096路径、10万实际生成顶点、256MiB,并保留1000万CSS像素累计距离精度约束;不是各自一份额度。几何候选累计最多200万对非相邻线段交点检查;表达式/显示节点及64块全图MVT候选预算继续生效,未知邻瓦片按最大线宽24、miter2预规划。源、图片、状态、全局值或相机候选失败保留旧状态、画面、资源队列和实例身份。
同一公共脚本与完整HTML核对RGBA蓝/绿覆盖、透明间隔露出红色下层、两种线宽比例周期、width0、图片/状态/zoom更新与失败回滚。核心CPU/GPU原始8c1d76af通过4项新增CPU、1项既有预算回归和同一个最终串行实际GPU;原19项源码SHA保持。网页验收发现WASM缺图通知漏判line-pattern,已在9274437e最小修复并重建核心及应用WASM。当前同一34项脚本在Linux动态库、网页主线程与Worker真实缺图事件/RGBA像素通过;设备、外机、移动/iOS、完整样式及正式发布继续未完成。匹配版本/归档SHA见SDK验收。
参考MapLibre官方line-pattern规范,图片纵向映射和比例周期采用当前GL JS公开行为;不同历史实现的纹理策略可能不同。SqsMap引擎独立实现,未移植MapLibre代码。
本页历史34项证据保留9274437e版本;其两条拒绝逐要素/state选择的断言已由后续逐要素能力替代,不能把旧拒绝断言当作新版本要求。当前版本请按匹配SDK能力和逐要素完整共同契约使用。
当前公开脚本已将两条旧拒绝断言改为支持检查;可选state图名先在名称上回退到属性,同一34项已在当前核心native/main/Worker通过,公开HTML可直接运行。历史原脚本及验收仍保留原版本。