跳到主要内容

地球仪范围定位

网页、Worker、桌面脚本及启用脚本的动态库共同支持 cameraForBounds 和 fitBounds。方法名和参数参考 MapLibre 官方 API,球面计算由 SqsMap 独立实现。

// @gis-api 0.5-session
// @permissions ["project.read", "map.write"]
import { map } from 'sqsmap';
map.setProjection({ type: 'globe' });
await map.sqs.flush();
const bounds = [[170, -10], [-170, 30]];
const target = await map.cameraForBounds(bounds, {
  padding: 24, bearing: 20, maxZoom: 12
});
console.log(target); // 只计算,不修改相机。
map.fitBounds(bounds, { padding: 24, bearing: 20, duration: 600 });
await map.sqs.flush(); // 命令已应用;完成时监听 moveend。

范围也可写成 [west, south, east, north]。东界小于西界表示向东跨日期变更线。保持当前倾角;bearing 默认0,minZoom/maxZoom 默认0/24。padding 接受非负数或四边对象,offset 接受逻辑像素数组或 {x,y}。留白仅约束本次目标,不改变 getPadding();持久球面 padding 和 roll 已接通,见球面持久留白。

计算采用球面可见性、曲边及内部有界采样和真实屏幕锚点求解。经度跨度达到180度、整球纬度范围、缩放限制或偏移导致范围无法容纳时明确失败,保留相机及活动动画。窄区域也受有限采样精度约束;不承诺任意复杂范围的解析极值。

fitBounds 使用共同动画时间线,支持 duration、animate、linear、easing、essential、stop() 和减少动态效果。原始网页 SDK 使用相同方法及 view.flush();动态库通过 sqsm_map_camera_json 发送相同方法和参数。原生宿主持续渲染或泵送脚本并消费事件,动画才会前进。ABI及公开方法签名不变。

当前验证为 Linux 原生 QuickJS、网页主线程和严格 Worker;Windows/macOS、手机及硬件验证另行记录。