cesium
本文回答:Cesium 3D 场景与 vjmap 2D CAD 的双向叠加(CAD 作 Cesium 图层 / Cesium 3D 模型叠到 vjmap)。
一、Cesium 加载 CAD WMS
const svc = new vjmap.Service(URL, TOKEN);
await svc.openMap({ mapid: "sys_cadcesium", mapopenway: vjmap.MapOpenWay.GeomRender });
const wmsUrl = svc.wmsTileUrl({
mapid: "sys_cadcesium",
layers: "默认图层名",
srs: "EPSG:3857",
crs: "EPSG:4544",
webMapType: "WGS84", // Cesium 是 WGS84
bbox: "" // ⚠️ 清空默认 {bbox-epsg-3857} 占位(vjmap 引擎专用,Cesium 不替换会残留字面量)
});
const cesiumViewer = new Cesium.Viewer("cesiumContainer");
cesiumViewer.imageryLayers.addImageryProvider(
new Cesium.UrlTemplateImageryProvider({
url: wmsUrl + "&BBOX={westProjected},{southProjected},{eastProjected},{northProjected}",
tilingScheme: new Cesium.WebMercatorTilingScheme(),
tileWidth: 256,
tileHeight: 256
})
);
官方示例(web/07cesiumCadWmsLayer.js)的写法:srs: "EPSG:4326" + WebMapServiceImageryProvider(其默认 GeographicTilingScheme、自动追加 BBOX):
const wmsUrl4326 = svc.wmsTileUrl({ mapid: "sys_cadcesium", layers: "默认图层名", bbox: "", srs: "EPSG:4326", crs: "EPSG:4544" });
cesiumViewer.imageryLayers.addImageryProvider(new Cesium.WebMapServiceImageryProvider({ url: wmsUrl4326 }));
二、把 Cesium 模型叠到 vjmap 上
更常见的是通过 vjmap 做底图,Cesium 本身就是 3D 地球,二者不能简单互相"addLayer"。
方案:
- 用 iframe 独立放 vjmap + Cesium,通过 postMessage 同步 center / zoom / rotate。
- 或用
vjmap3d(但本 skill 不覆盖)。
三、2D - 3D 视角同步
粗略映射:
// vjmap → Cesium
cesiumViewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(center.lng, center.lat, 1000),
orientation: {
heading: Cesium.Math.toRadians(-map.getBearing()),
pitch: Cesium.Math.toRadians(-(90 - map.getPitch())),
roll: 0
},
duration: 0
});
Cesium 的 pitch = -90 时 = 正视地面(= vjmap 的 pitch: 0)。
四、Cesium 常用配置(配合 CAD)
- 关闭天空 / 大气:
viewer.scene.skyBox.show = false,viewer.scene.sun.show = false,viewer.scene.moon.show = false。 - 换成白色背景:
viewer.scene.globe.baseColor = Cesium.Color.WHITE。 - 禁用地形:
viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider()。
五、CAD 底图 + Cesium 倾斜摄影 3DTiles
业务里常常既要 3D 倾斜,又要 2D CAD:
- 方式 A:CAD 作 Cesium 的
ImageryLayer(即 WMS),再叠 3DTiles。 - 方式 B:把 3DTiles 转成 vjmap 可接受的形式(需要 vjmap3d 扩展,本 skill 不覆盖)。
六、常见坑
Cesium.UrlTemplateImageryProvider的 URL 占位符:必须是{westProjected}之类,和 vjmap 栅格源的{bbox-epsg-3857}占位符不同。- WMS 瓦片错位:
tilingScheme必须与wmsTileUrl的srs一致——srs: "EPSG:3857"配WebMercatorTilingScheme(BBOX 用{westProjected}…米制占位);srs: "EPSG:4326"配GeographicTilingScheme(WebMapServiceImageryProvider的默认,官方示例即此组合)。 - Cesium 默认坐标在米,vjmap 在经纬度:传参时注意单位。
- 性能:Cesium + CAD WMS + 互联网底图 + 3DTiles 一起开,GPU 压力大;低配机要降质。