跳到主要内容

桌面倾斜地图

桌面调试板与动态库、WASM 共用相机、图层、事件和实际倾斜场景。

开发核心 ab68002 的桌面调试板已接通共同墨卡托倾斜地图。与动态库内置 QuickJS、浏览器主线程和严格 Worker 使用下列同一份脚本;查询用 await,写入可链式调用,flush 确认实际绘制。desktopPitchedCamera 与 desktopPitchedStyleRasterSources 标识此开发宿主。共同 styleRasterPitchedSources 仍为 false,完整查询、旧接口和跨入口审查继续进行。

在地图显示坐标系为墨卡托时运行。坐标顺序为 经度, 纬度,181 度明确保留世界副本;倾角 0–65 度,建议逻辑缩放 0–24。非零 geographic、自由轨道和地形表面仍明确拒绝。退出倾斜用 setPitch(0)。桌面 GIS 显示坐标系通过其专用接口切换,不能用共同投影调用替代任意数据坐标转换。

复制完整共同脚本到桌面调试板运行。桌面调试板无需 HTML 或 CSS;浏览器独立使用见完整 HTML/CSS/JavaScript,其中包含全部按钮事件。

// @gis-api 0.5-session
// @permissions ["project.read", "map.write"]
import { map } from 'sqsmap';
const checks=[];
function check(name,value) { if(!value) throw Error(name); checks.push(name); }
const capabilities=await map.sqs.getCapabilities();
check('actual shared pitched backend',capabilities.nativePitchedCamera === true || capabilities.webPitchedCamera === true || capabilities.desktopPitchedCamera === true);
map.setProjection({type:'mercator'});
map.jumpTo({center:[181,40],zoom:19,bearing:33,padding:{left:30,right:2,top:15,bottom:4}});
map.addSource('points',{type:'geojson',data:{type:'FeatureCollection',features:[
 {type:'Feature',id:7,properties:{radius:40,color:'#ff0000'},geometry:{type:'Point',coordinates:[181,40]}},
 {type:'Feature',id:8,properties:{radius:1,color:'#ff0000'},geometry:{type:'Point',coordinates:[181,-80]}},
 {type:'Feature',id:9,properties:{radius:4,color:'#0000ff'},geometry:{type:'Point',coordinates:[181.0002,40.0001]}}
]}});
map.addLayer({id:'dots',type:'circle',source:'points',paint:{'circle-color':['get','color'],'circle-radius':['get','radius']}});
await map.sqs.flush();
for(const pitch of [30,65]) {
 map.setPitch(pitch); await map.sqs.flush();
 check('pitch '+pitch,await map.getPitch()===pitch);
 const p=await map.project([181,40]);
 const state=await map.sqs.cameraState();
 check('padded point '+pitch,Math.abs(p.x-(state.viewport.width/2+14))<.01 && Math.abs(p.y-(state.viewport.height/2+5.5))<.01);
 const ll=await map.unproject(p);
 check('ground round trip '+pitch,Math.abs(ll.lng-181)<1e-6 && Math.abs(ll.lat-40)<1e-6);
 const hits=await map.queryRenderedFeatures([p.x+32,p.y]);
 check('original circle identity '+pitch,hits.length===1&&hits[0].id===7);
 check('radius expression '+pitch,hits[0].properties.radius===40);
}
export default {checks,pitch:await map.getPitch(),point:await map.project([181,40])};

非对称留白、方向、投影、地面逆投影、样式圆点半径和要素查询均由共享 Rust 核心计算。鼠标拖动通过共享地面锚点求解保持指针下的位置;滚轮缩放以鼠标位置为锚点。dragPan、scrollZoom、doubleClickZoom 和 keyboard 开关沿用共同接口。回正和调整倾角也走同一相机预检和事件路径。

有公开样式时,倾斜场景继续使用原来的样式加载、影像下载、来源声明和缓存;没有样式时,使用不访问网络的内部场景,且不把它伪装成用户样式或图源。setStyle(null) 保留当前中心、方向、缩放、倾角和留白。业务图层不再作为二维画面叠在倾斜地图上。

flush({render:true}) 等待与当前姿态、业务图层修订号和光照匹配的实际 GPU 帧;正常准备不会被当成失败,真正加载或绘制错误仍拒绝。失败命令和取消请求不等待缺失的帧。取得倾斜截图时同样只接受当前实际画面;它不保证所有流式瓦片已下载。

本机 Linux 实际窗口、ScriptService、MapCommands、MapView 和软件 Vulkan 验收通过:相同脚本 11 项,30/65 度及影像、清除样式、拖动及同姿态画笔更新共六帧像素,另检验非法 66 度原子拒绝、清除时保留姿态、禁用拖动与回到二维。桌面离屏场景目前按逻辑视口绘制;高 DPI 物理密度、精确透视线宽、完整三维/地形/符号查询和旧入口审查继续实施。Windows/macOS 外机、移动设备、性能与正式发行需分别验收。

相关文档:网页倾斜地图、原生倾斜地图、相机 API。