锚点缩放与导航
共享二维相机支持 zoomTo、rotateTo、panTo、panBy、resetNorthPitch,以及带选项的 zoomIn、zoomOut、resetNorth。操作返回地图,可链式调用;用 await map.sqs.flush() 确认。查询仍返回 Promise,读取实际应用后的状态。
around 为 WGS84 经纬度,缩放或旋转时保留该点原来的屏幕位置。offset 为相对留白后视口中心的逻辑像素,缩放或旋转时保留原先位于该屏幕位置的地理点。二者不能同时给出。经度保留显式世界副本,例如 181 与 -179 不混为同一点;非对称留白、方向和设备像素比使用共享计算。
panTo(center, {offset}) 把给定地理位置放到留白后视口中心加偏移处;省略偏移则放到中心。panBy([x,y]) 按屏幕方向移动视口,正 x 使内容左移,正 y 使内容上移。单位始终是 CSS/逻辑像素,与物理像素比无关。panBy 不接受第二份 offset,也不接受 around。
zoomIn、zoomOut 每次改变一级,在真实上下限停止;自定义步长使用 zoomTo(currentZoom + step, options)。读取 getMinZoom、getMaxZoom 和 getZoom 决定按钮是否可用。直接设置超范围 zoom 仍明确拒绝,不隐藏输入错误。resetNorth 恢复正北,resetNorthPitch 同时恢复零倾角;本组目前只支持二维零 pitch/roll。getRoll() 返回零,setRoll(0) 可用,非零值明确拒绝。
导航默认使用共同动画驱动;需要立即定位时指定 animate:false 或 duration:0。完整时长、缓动、停止和结束状态见相机动画。未知选项和无法在有效纬度内保留锚点的命令整体拒绝,原视图不变。
// @gis-api 0.5-session
// @permissions ["project.read", "map.write"]
import {map} from 'sqsmap';
const center = await map.getCenter();
map.zoomIn({around:center, duration:0});
await map.sqs.flush();
map.panBy([30, 0], {animate:false});
map.rotateTo(45, {around:center, duration:0});
map.resetNorthPitch({duration:0});
await map.sqs.flush();
export default {zoom:await map.getZoom(), bearing:await map.getBearing()};
浏览器独立 SDK 使用同名方法和选项,以 await view.flush() 确认。原生 C 通过已有 sqsm_map_camera_json,方法和参数数组不变;例如 zoomTo 的请求为 {"method":"zoomTo","args":[7,{"around":[181,61],"duration":0}]}。独立原生 QuickJS 和应用脚本使用相同输入。移动壳尚需接入这些共同入口;本机验证不代替 Windows/macOS 或移动设备验收。
相机 start/change/end 事件沿用共同相机事件,end 的 animation 状态区分正常完成、取消与失败。无状态变化的上限缩放不制造移动事件。工具外观、禁用状态和监听清理由用户实现;不新增常驻工具 UI。共同工具示例 展示完整 HTML/CSS 和订阅取消。API 名称及 around/offset 概念参考 MapLibre EaseToOptions;运算由 SqsMap 自研共享核心实现,尚不声明其完整动画兼容性。