cesium 加载天地图
cesiumConfig.baseLayer = new Cesium.ImageryLayer(new Cesium.WebMapTileServiceImageryProvider({
url: `${tdtUrl}img_c/wmts?tk=${tdt_tk}`,
layer: 'img',
style: 'default',
format: 'tiles',
tileMatrixSetID: 'c',
subdomains: subdomains,
maximumLevel: 18,
tilingScheme: new Cesium.GeographicTilingScheme(),
tileMatrixLabels: Array.from({ length: 18 }, (v, k) => k + 1),
}));
tileMatrixLabels: Array.from({ length: 18 }, (v, k) => k + 1),
这里+1是因为天地图的图层是从1开始,是正常的。

使用geoserver发布的wmts服务
viewer.scene.imageryLayers.add(
new Cesium.ImageryLayer(
new Cesium.WebMapTileServiceImageryProvider({
url: 'http://172.88.0.31:9090/geoserver/cloud/ht/gwc/service/wmts',
layer: 'ht:t_ds_imp_ynsbj_cn2k',
style: '',
tileMatrixSetID: 'CGCS2000',
format: 'image/png',
maximumLevel: 20,
rectangle: Cesium.Rectangle.fromDegrees(94.5, 21.11, 109.5, 29.3),
tileMatrixLabels: Array.from({ length: 20 }, (v, k) => `CGCS2000:${k + 1}`),
tilingScheme: new Cesium.GeographicTilingScheme()
})
)
);
同样是2000坐标系,为什么我自己发的图层就需要+1?而我的服务是从0开始的。

- 必须所有图层都+1才能正常显示
- 如果不加1显示这样
天地图:

我的图层:

完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.bootcdn.net/ajax/libs/cesium/1.123.0/Cesium.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/cesium/1.123.0/Widgets/widgets.css" rel="stylesheet" />
</head>
<body>
<div id="map"></div>
</body>
<script>
// 替换默认的坐标系为CGCS2000
Cesium.Ellipsoid.CGCS2000 = Object.freeze(
// eslint-disable-next-line no-loss-of-precision
new Cesium.Ellipsoid(6378137.0, 6378137.0, 6356752.31414035585)
);
Cesium.Ellipsoid.WGS84 = Cesium.Ellipsoid.CGCS2000;
Cesium.Ellipsoid._default = Cesium.Ellipsoid.CGCS2000;
let cesiumConfig = {
animation: false,
baseLayerPicker: false,
fullscreenButton: false,
geocoder: false,
homeButton: false,
infoBox: false,
sceneModePicker: false,
scene3DOnly: true,
selectionIndicator: false,
timeline: false,
navigationHelpButton: false,
baselLayerPicker: false,
shadows: false,
shouldAnimate: false,
vrButton: false,
requestRenderMode: true,
mapProjection: new Cesium.GeographicProjection(Cesium.Ellipsoid.CGCS2000),
contextOptions: {
webgl: {
alpha: true,
depth: false,
stencil: true,
antialias: true,
premultipliedAlpha: true,
preserveDrawingBuffer: true,
failIfMajorPerformanceCaveat: true
},
allowTextureFilterAnisotropic: true
},
};
let tdtUrl = 'https://t{s}.tianditu.gov.cn/';
let subdomains = [1, 2, 3, 4, 5, 6, 7];
let tdt_tk = '';
// 经纬度投影
cesiumConfig.baseLayer = new Cesium.ImageryLayer(new Cesium.WebMapTileServiceImageryProvider({
url: `${tdtUrl}img_c/wmts?tk=${tdt_tk}`,
layer: 'img',
style: 'default',
format: 'tiles',
tileMatrixSetID: 'c',
subdomains: subdomains,
maximumLevel: 18,
tilingScheme: new Cesium.GeographicTilingScheme(),
tileMatrixLabels: Array.from({ length: 18 }, (v, k) => k + 1),
}));
let cesiumBox = document.getElementById('map');
let viewer = new Cesium.Viewer(cesiumBox, cesiumConfig);
Cesium.CesiumTerrainProvider.fromUrl('https://t6.tianditu.gov.cn/mapservice/GetTiles?lxys=2,3,1&VERSION=1.0.0&tk=', {
requestWaterMask: true,
requestVertexNormals: true,
}).then(terrainProvider => {
viewer.terrainProvider = terrainProvider;
});
// 添加我的图层
viewer.scene.imageryLayers.add(
new Cesium.ImageryLayer(
new Cesium.WebMapTileServiceImageryProvider({
url: 'http://172.88.0.31:9090/geoserver/cloud/ht/gwc/service/wmts',
layer: 'ht:t_ds_imp_ynsbj_cn2k',
style: '',
tileMatrixSetID: 'CGCS2000',
format: 'image/png',
maximumLevel: 20,
rectangle: Cesium.Rectangle.fromDegrees(94.5, 21.11, 109.5, 29.3),
tileMatrixLabels: Array.from({ length: 20 }, (v, k) => `CGCS2000:${k + 1}`),
tilingScheme: new Cesium.GeographicTilingScheme()
})
)
);
</script>
<style>
html,
body,
#map {
width: 100%;
height: 100vh;
margin: 0;
padding: 0;
}
</style>
</html>