代码:
使用的时候,直接调用 load3DTiles()
方法既可。
// 加载3Dtiles
const load3DTiles = async () => {let tiles_url = "/3DTiles2/Production_1.json";let tileset = await Cesium.Cesium3DTileset.fromUrl(tiles_url, {enableCollision: true, // 开启碰撞检测maximumScreenSpaceError: 1, // 控制精度maximumMemoryUsage: 2048, // 最大内存使用(MB)cullWithChildrenBounds: true, // 优化裁剪});let readyTileset = viewer.scene.primitives.add(tileset);set3DTilesPosition(readyTileset, tileset);
};// 设置3Dtiles模型位置
const set3DTilesPosition = (readyTileset, tileset) => {if (readyTileset && tileset) {let heightOffset = -1318; // 调整离地面的高度,主要修改这里//计算tileset的绑定范围let boundingSphere = tileset.boundingSphere;//计算中心点位置let cartographic1 = Cesium.Cartographic.fromCartesian(boundingSphere.center);//计算中心点位置坐标let surface = Cesium.Cartesian3.fromRadians(cartographic1.longitude,cartographic1.latitude,0);//偏移后的三维坐标let offset = Cesium.Cartesian3.fromRadians(cartographic1.longitude,cartographic1.latitude,heightOffset);let translation = Cesium.Cartesian3.subtract(offset,surface,new Cesium.Cartesian3());//tileset.modelMatrix转换readyTileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);// 视角切换到模型viewer.zoomTo(tileset);}
};
代码效果: