> **本文回答**：Cesium 3D 场景与 vjmap 2D CAD 的双向叠加（CAD 作 Cesium 图层 / Cesium 3D 模型叠到 vjmap）。

## 一、Cesium 加载 CAD WMS

```js
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）：

```js
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 视角同步

粗略映射：

```js
// 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 不覆盖）。

## 六、常见坑

1. **`Cesium.UrlTemplateImageryProvider` 的 URL 占位符**：必须是 `{westProjected}` 之类，和 vjmap 栅格源的 `{bbox-epsg-3857}` 占位符不同。
2. **WMS 瓦片错位**：`tilingScheme` 必须与 `wmsTileUrl` 的 `srs` 一致——`srs: "EPSG:3857"` 配 `WebMercatorTilingScheme`（BBOX 用 `{westProjected}…` 米制占位）；`srs: "EPSG:4326"` 配 `GeographicTilingScheme`（`WebMapServiceImageryProvider` 的默认，官方示例即此组合）。
3. **Cesium 默认坐标在米，vjmap 在经纬度**：传参时注意单位。
4. **性能**：Cesium + CAD WMS + 互联网底图 + 3DTiles 一起开，GPU 压力大；低配机要降质。
