自定义2D/3D切换
map.sqs.viewModeState()异步返回不可变状态:mode、projection、pitch、terrain以及倾角切换条件。它不创建工具UI,开发者自行实现按钮。
const state = await map.sqs.viewModeState();
if (state.canSwitchTo3d) {
map.setPitch(state.default3dPitch); // 45度,立即切换
await map.sqs.flush({ render: true });
}
// 恢复俯视:显式设置0;没有隐式保存、恢复旧倾角。
map.setPitch(0);
await map.sqs.flush({ render: true });
墨卡托无地形且pitch为0是2d,非零pitch或启用地形是3d;球面即使pitch为0仍是3d。地理投影目前不支持倾斜。canSwitchTo3d/2d只表示当前投影/地形的相机条件,实际图层/资源组合可能在候选验证时明确失败;检查或查询状态不冒充已绘制成功。
default3dPitch为45,maximumPitch为65,restorePolicy为explicit-target-pitch,switchMethod为setPitch。现有setPitch使用同一相机候选/命令确认和movestart/move/pitchstart/pitch/pitchend/moveend事件;flush(render:true)确认实际帧。若需要动画,可用easeTo({pitch:45,duration:300})及既有动画终态;失败通过flush拒绝/error处理。
setPitch(0)不关闭地形,也不退出地球仪。关闭地形用setTerrain(null),退出球面用setProjection({type:'mercator'});按图源和投影规则依次切换。球面canSwitchTo2d=false、地形true时canSwitchTo2d=false避免误导UI。状态读取不发变化事件;已有相机事件、terrain事件、sqs.viewchange通知后重新读取。
原始SDK使用view.viewModeState()/view.flush(),共同脚本使用map.sqs.viewModeState()/map.sqs.flush()。桌面传统GIS自由三维视图尚不是此共同相机状态,明确拒绝。动态库QuickJS和网页主线程/Worker共用脚本;验收脚本,移动应用与设备另行验收。