在 Cesium 中,你可以添加 WMS、WMTS、地形圖 和 3D Tiles 數據源。以下是詳細的實現方法:
1. 添加 WMS 服務
WMS(Web Map Service)是一種動態地圖服務,適用于加載柵格地圖圖層。
代碼示例
const viewer = new Cesium.Viewer("cesiumContainer");// 添加 WMS 圖層
const wmsProvider = new Cesium.WebMapServiceImageryProvider({url: "https://your-wms-server.com/wms", // WMS 服務地址layers: "layer1,layer2", // 要加載的圖層parameters: {service: "WMS",format: "image/png",transparent: true,},enablePickFeatures: false, // 是否支持點擊查詢
});viewer.imageryLayers.addImageryProvider(wmsProvider);
參數說明
url
:WMS 服務地址。layers
:要加載的圖層名稱(多個用逗號分隔)。parameters
:WMS 請求參數(如format
,transparent
)。enablePickFeatures
:是否允許點擊查詢要素(默認false
)。
2. 添加 WMTS 服務
WMTS(Web Map Tile Service)是一種瓦片地圖服務,適合加載高分辨率地圖。
代碼示例
const viewer = new Cesium.Viewer("cesiumContainer");// WMTS 配置
const wmtsProvider = new Cesium.WebMapTileServiceImageryProvider({url: "https://your-wmts-server.com/wmts", // WMTS 服務地址layer: "layer-name", // 圖層名稱style: "default", // 樣式format: "image/png",tileMatrixSetID: "EPSG:3857", // 瓦片矩陣集(如 Web Mercator)maximumLevel: 18, // 最大縮放級別credit: new Cesium.Credit("Data provided by XXX"), // 數據來源聲明
});viewer.imageryLayers.addImageryProvider(wmtsProvider);
參數說明
url
:WMTS 服務地址。layer
:要加載的圖層名稱。tileMatrixSetID
:瓦片矩陣集(如EPSG:3857
或EPSG:4326
)。maximumLevel
:最大縮放級別(影響加載的瓦片分辨率)。
3. 添加地形數據
Cesium 支持加載 全球地形 或 自定義地形(如 Cesium World Terrain)。
(1)使用 Cesium World Terrain(默認全球地形)
const viewer = new Cesium.Viewer("cesiumContainer", {terrainProvider: Cesium.createWorldTerrain(), // 使用 Cesium 全球地形
});
(2)加載自定義地形(如 STK 地形)
const customTerrainProvider = new Cesium.CesiumTerrainProvider({url: "https://your-terrain-server.com/terrain", // 地形服務地址requestVertexNormals: true, // 是否請求頂點法線(用于光照效果)requestWaterMask: true, // 是否請求水面效果
});const viewer = new Cesium.Viewer("cesiumContainer", {terrainProvider: customTerrainProvider,
});
(3)本地地形數據(如 quantized-mesh)
const localTerrainProvider = new Cesium.CesiumTerrainProvider({url: "./data/terrain", // 本地地形數據路徑
});const viewer = new Cesium.Viewer("cesiumContainer", {terrainProvider: localTerrainProvider,
});
4. 加載 3D Tiles
3D Tiles 是 Cesium 的 3D 數據標準,適用于加載 傾斜攝影、BIM、點云 等數據。
(1)加載 3D Tiles 模型
const viewer = new Cesium.Viewer("cesiumContainer");const tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: "https://your-3dtiles-server.com/tileset.json", // tileset.json 路徑maximumScreenSpaceError: 2, // 渲染質量(數值越小越精細)dynamicScreenSpaceError: true, // 動態調整加載精度dynamicScreenSpaceErrorDensity: 0.00278, // 密度控制})
);// 定位到 3D Tiles
viewer.zoomTo(tileset);
(2)調整 3D Tiles 樣式
tileset.style = new Cesium.Cesium3DTileStyle({color: {conditions: [["${Height} >= 100", "color('red')"],["${Height} >= 50", "color('yellow')"],["true", "color('blue')"],],},
});
(3)控制 3D Tiles 顯隱
tileset.show = false; // 隱藏
tileset.show = true; // 顯示
總結
數據類型 | Cesium 加載方式 | 適用場景 |
---|---|---|
WMS | WebMapServiceImageryProvider | 動態地圖服務 |
WMTS | WebMapTileServiceImageryProvider | 瓦片地圖服務 |
地形數據 | CesiumTerrainProvider | 全球/自定義地形 |
3D Tiles | Cesium3DTileset | 3D 模型、BIM、點云 |
常見問題
-
WMS/WMTS 加載失敗?
- 檢查
url
是否正確,確保服務支持CORS
。 - 確認
layers
或tileMatrixSetID
參數是否正確。
- 檢查
-
3D Tiles 加載慢?
- 調整
maximumScreenSpaceError
降低渲染質量。 - 使用
Cesium3DTileset
的preloadWhenHidden
預加載。
- 調整
-
地形不顯示?
- 確保
terrainProvider
正確設置。 - 檢查地形數據路徑或服務是否可用。
- 確保