跳到主要内容

实线端帽与连接

用共同脚本控制二维实线的端点、折角和连接限值

具备 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-capbutt / square / round平端;沿线延伸半线宽的方端;半线宽半径的圆端
line-joinmiter / bevel / round尖角;斜切角;圆角
line-miter-limit0..16有限数字,默认2尖角超过比值限值时改为bevel
line-round-limit0..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条字面量脚本继续适用。