跳到主要内容

LAB/HCL 与数组插值

共同颜色空间与数值或颜色数组插值

普通paint/筛选表达式的共同求值器支持以下形式;原生动态库、桌面脚本和网页主线程/Worker语义一致。

操作输出
interpolate数值、sRGB颜色或等长数值/颜色数组
interpolate-labCIE Lab D50颜色或等长颜色数组
interpolate-hcl同一Lab空间的HCL颜色或等长颜色数组,色相取短路径

三者都支持linear、exponential与cubic-bezier,沿用严格有序停止点。超出停止范围取端点,精确停止点返回原值。数组可通过at取出标量;两端长度和元素类型须一致,不支持嵌套数组插值。

map.setPaintProperty('points', 'circle-color', [
  'interpolate-lab', ['linear'], ['get', 'value'],
  0, 'red', 1, 'lime'
]);
map.setPaintProperty('points', 'circle-radius', [
  'at', 1, ['interpolate', ['linear'], ['get', 'value'],
    0, ['literal', [10, 20]], 1, ['literal', [30, 40]]]
]);
await map.sqs.flush({ render: true });

颜色转换由SqsMap自研:sRGB线性化、XYZ、Bradford D65→D50、CIE Lab及逆转换。HCL无彩端借用另一端色相,色相走短路径;透明度独立线性插值,没有透明度预乘。输出最终裁剪到sRGB范围并量化为八位颜色,不声明CSS高级色域映射或MapLibre内部专有Color值兼容。红/lime中点为#c8ac00,black/white中点为#777777;已与浏览器Lab转换独立核对。

数组扫描计入8192步预算。类型/曲线/静态停止点错误在写入前拒绝;动态颜色或数组错误沿用paint默认值和警告。专用热力密度/高程色带仍使用各自支持范围,不由普通paint支持推断。

完整HTML包含sRGB/Lab/HCL及输入四按钮、全部处理/数据/来源;共同脚本覆盖9项。

语法依据MapLibre公开规范,颜色数学依据W3C颜色转换说明。移动设备、外机和正式发行另行记录。