实线端帽与连接
具备 commonLineSymbols 的匹配开发SDK还支持共同二维沿线图文:真实逐字弯线路径、目标归属、图文组合及共同预算。下文早期点符号范围与尚待沿线事项,应按此有限子集理解;复杂整形、倾斜/球面/地形与完整道路拼接仍待完成。
当匹配SDK的commonPlanarLayerComposition为true时,墨卡托零pitch/roll、无terrain/extrusion的共同二维画面允许影像、背景、图文、热力及既有静态线面效果按完整图层顺序组合。本文旧阶段关于“媒体组合拒绝”的限制在此共同二维范围内由该能力取代;自定义线动画、倾斜/球面/地形及其它未实现材料组合仍保持各自限制。重排和兼容diff保留身份/缓存/在途请求/淡入时钟;所有素材、联合几何和纹理预算均先验证再发布。参见二维图层合成。
当前匹配SDK提供commonLineGradients时,lineMetrics:true的非cluster GeoJSON渐变通道支持本页稳定cap/join、filter/sort与offset/translate组合。下述历史solid/动画通道中的gradient拒绝限制不表示新渐变通道拒绝这些组合;须查询匹配能力并查看线渐变指南,其余未实现组合仍拒绝。
共同二维实线支持显式布局 line-cap、line-join、line-miter-limit 和 line-round-limit。能力为 commonLineTopologySolid。出现任意一个选项即启用新拓扑:缺省端帽butt、连接miter、限值2和1.05。完全未指定这些选项时保留既有快线路径,不能据此认为旧虚线/动画已具有标准miter连接。
| 布局 | 当前接受值 | 行为 |
|---|---|---|
| line-cap | butt / square / round | 平端;沿线延伸半线宽的方端;半线宽半径的圆端 |
| line-join | miter / bevel / round | 尖角;斜切角;圆角 |
| line-miter-limit | 0..16有限数字,默认2 | 尖角超过比值限值时改为bevel |
| line-round-limit | 0..16有限数字,默认1.05 | 浅角在限值内时改为miter |
0..16是SqsMap资源预算,超出报RESOURCE_LIMIT,不是MapLibre规范限制。四项表达式能力通过 commonLineTopologyLayoutExpressions 查询,接受已有属性、global-state、类型/词法与惰性分支系统;布局不接受feature-state。zoom仅允许顶层step或数值interpolate(可由let包裹),按整数缩放级别求值;含zoom的布局需要明确的Web Mercator平面,其它平面会拒绝;线宽沿共同样式原有0..24 CSS像素边界。颜色、宽度和透明度继续使用现有paint表达式。
import { map } from 'sqsmap';
map.addSource('route', {type:'geojson', data:{
type:'Feature', id:1, properties:{}, geometry:{type:'LineString',
coordinates:[[116.38,39.90],[116.40,39.91],[116.42,39.90]]}
}});
map.addLayer({id:'route',type:'line',source:'route',layout:{
'line-cap':'round', 'line-join':'round', 'line-round-limit':1.05
},paint:{'line-color':'#1677ff','line-width':12,'line-opacity':0.7}});
map.jumpTo({center:[116.4,39.9],zoom:13});
await map.sqs.flush({render:true});
map.setLayoutProperty('route','line-join','miter');
map.setLayoutProperty('route','line-miter-limit',4);
await map.sqs.flush({render:true});
闭环不加端帽,重复点被消除,全零长路径允许空输出。候选先校验参数与有限几何预算,失败保留原层/源及已显示画面;每圆弧最多32段、所有候选图层最坏展开累计100万顶点预算。极近反折和不稳定内侧连接仍明确拒绝,不宣称支持任意自交线拓扑。线段比线宽短或路径自交时,尚不保证各连接区域互不覆盖,半透明颜色可能重复叠加。归一化相邻方向的dot须大于-0.99999999,即距180°反折约0.008°以内的转角明确拒绝。具体值以核心验收记录为准。
新拓扑与虚线、渐变、动画、三维/球面及媒体场景组合尚未接通,会明确拒绝;setStyle(URL)的底图样式编译域仍独立;已有GeoJSON URL和共同MVT仍走共同图源绑定,不因网络地址被禁用。查询使用按端帽与连接限值扩大的保守包络,可能命中没有实际着色的附近像素,适合要素定位,不是精确纹理拾取。
23条共同脚本 与 完整网页 包含三种端帽、连接和限值切换、非法候选恢复及真正端帽像素。核心GPU验收另核对尖角连接/降级、闭环、透明接头、旋转及DPR。手机/外机及正式发行另行验收。
语义参考 MapLibre线样式规范,SqsMap独立实现,并按能力说明接受当前子集。
四项共同布局表达式可在同层按要素求值。前面的几何/资源/组合预算保留;每表达式最多32层、1024节点和8192求值步,候选累计200万结构节点估算乘显示要素数量。超预算或实际求值的错误结果整体拒绝,保留旧源、全局值、相机、画面和身份;未读取的分支不触发结果枚举错误。query和feed共用同一要素选项,动态方端帽/miter不会因仍读旧层级参数漏查。
map.setLayoutProperty('route','line-cap',
['let','name',['coalesce',['global-state','capOverride'],['get','cap']],
['step',['zoom'],['var','name'],11,'round']]);
map.setLayoutProperty('route','line-join',['get','join']);
map.setLayoutProperty('route','line-miter-limit',
['interpolate',['linear'],['zoom'],10,['get','limit'],12,8]);
map.setLayoutProperty('route','line-round-limit',['get','roundLimit']);
await map.sqs.flush({render:true});
24条表达式共同脚本 与 完整网页 展示同层三种端帽、属性/全局/整数zoom变化与失败恢复;旧23条字面量脚本继续适用。