跳到主要内容

球面光轴旋转

使用 roll 旋转球面画面并保持投影、查询与动画一致

map.setRoll(angle) 等同于 map.jumpTo({roll: angle});await map.getRoll() 读取权威值。角度以度为单位,围绕相机光轴旋转。正值使显示的地面顺时针转,值归一化到 [-180,180)。方向 bearing、倾角 pitch、地表中心和眼位置不受即时 roll 改变。

import {map} from 'sqsmap';
map.setProjection({type: 'globe'});
map.jumpTo({center: [116.4, 39.9], zoom: 5, pitch: 35, roll: 30});
await map.sqs.flush();
console.log(await map.getRoll());
const end = map.once('rollend');
map.easeTo({roll: -30, duration: 600});
await map.sqs.flush();
await end;

easeTo、flyTo 的 roll 使用最短角度路径;around 和 offset 仍由真实球面锚点求解。即时修改和动画提供 rollstart、roll、rollend,同时提供 move 生命周期。事件保留开始/应用后的历史相机快照;失败或归一化后无变化不触发事件。

动态库通过已有 sqsm_map_camera_json 读写;C ABI 版本1和已有导出不变。原生持续 QuickJS、浏览器主线程/Worker、桌面脚本共用计算与事件。Rust GlobeCamera 新增 roll 字段,直接构造时补 roll: 0.。退出球面重置 roll 为0;平面非零 roll 尚未接通;球面持久留白 已接通。移动端设备、Windows/macOS另行验收。

本机同一脚本验证9项,包含投影反算、历史事件、失败原子性、动画锚点、真实红色圆点与拾取:脚本、浏览器验证页。

语法参考 MapLibre Map API,数学和渲染由 SqsMap 自研。