小工具知识网

当前位置: 首页 > 行业知识 > 【CesiumJS-3】加载倾斜模型数据(3DTilest)以及修改位置

行业知识

【CesiumJS-3】加载倾斜模型数据(3DTilest)以及修改位置

2026-10-22 03:34:26 来源:互联网转载

引入倾斜模型数据

  // 加载3DTiles数据  let tileset;  try {    tileset = await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");    viewer.value.scene.primitives.add(tileset); // 倾斜模型添加到场景中    viewer.value.zoomTo(tileset); // 视角定位到倾斜模型的位置  } catch (error) {    console.log(`Error loading tileset: ${error}`);  }

await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json")

倾斜模型的数据通过nginx代理本地文件夹以接口的形式获取;如果倾斜模型数据较小可直接放到项目文件Public目录下,以绝对路径的形式引入即可;

nginx代理本地文件夹相关操作链接

效果展示

调整倾斜模型位置

  let tileset;  try {    tileset = await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");    viewer.value.scene.primitives.add(tileset);    viewer.value.zoomTo(tileset);    // +++++++++    // 原始点    let boundingSphere = tileset.boundingSphere;    let cartographic = Cesium.Cartographic.fromCartesian(      boundingSphere.center    );    let longitude = cartographic.longitude;    let latitude = cartographic.latitude;    let height = cartographic.height;    // 世界坐标    let origin = Cesium.Cartesian3.fromRadians(      cartographic.longitude,      cartographic.latitude,      cartographic.height    );    // 偏移后点    let offset = Cesium.Cartesian3.fromRadians(      longitude,      latitude,      height - 10    );    // 计算向量    let translate = Cesium.Cartesian3.subtract(      offset,      origin,      new Cesium.Cartesian3()    );    tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translate);    viewer.value.scene.globe.depthTestAgainstTerrain = false; // 开启深度测试  } catch (error) {    console.log(`Error loading tileset: ${error}`);  }

完整代码

  import { onMounted, ref } from "vue";const viewer = ref(null);const initCesium = async () => {  // 1.引入token  Cesium.Ion.defaultAccessToken = "xxxxxxxxx";  // 2.三维地球初始化  viewer.value = new Cesium.Viewer("cesiumContainer", {    animation: true, //是否创建动画小器件,左下角仪表    shouldAnimate: true,    fullscreenButton: false, //是否显示全屏按钮    geocoder: false, //是否显示geocoder小器件,右上角查询按钮    homeButton: false, //是否显示Home按钮    infoBox: false, //是否显示信息框    sceneModePicker: false, //是否显示3D/2D选择器    scene3DOnly: false, //如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源    selectionIndicator: false, // 是否显示选取指示器组件    timeline: false, // 是否显示时间轴    navigationHelpButton: false,// 是否显示右上角的帮助按钮    baselLayerPicker: false, // 将图层选择的控件关掉,才能添加其他影像数据    shadows: false, // 是否显示背影    baseLayerPicker: false, // 是否显示图层选择器    orderIndependentTranslucency: false, //去掉大气层黑圈  });  // 加载3DTiles数据  let tileset;  try {    tileset = await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");    viewer.value.scene.primitives.add(tileset);    viewer.value.zoomTo(tileset);        // 原始点    let boundingSphere = tileset.boundingSphere;    let cartographic = Cesium.Cartographic.fromCartesian(      boundingSphere.center    );    let longitude = cartographic.longitude;    let latitude = cartographic.latitude;    let height = cartographic.height;    // 世界坐标    let origin = Cesium.Cartesian3.fromRadians(      cartographic.longitude,      cartographic.latitude,      cartographic.height    );    // 偏移后点    let offset = Cesium.Cartesian3.fromRadians(      longitude,      latitude,      height - 10    );    // 计算向量    let translate = Cesium.Cartesian3.subtract(      offset,      origin,      new Cesium.Cartesian3()    );    tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translate);    viewer.value.scene.globe.depthTestAgainstTerrain = false; // 开启深度测试  } catch (error) {    console.log(`Error loading tileset: ${error}`);  }  //缩放  viewer.value.scene.screenSpaceCameraController.zoomEventTypes = [    Cesium.CameraEventType.WHEEL,    Cesium.CameraEventType.PINCH,  ];  //视图视角切换  viewer.value.scene.screenSpaceCameraController.tiltEventTypes = [    Cesium.CameraEventType.PINCH,    Cesium.CameraEventType.RIGHT_DRAG,  ];}onMounted(() => {  initCesium();})#cesiumContainer {  position: relative;  width: 100vw;  height: 100vh;}

上一篇:Win10蓝屏全解析,原因、解决方案与预防措施一网通览!

下一篇:华盖网图片轻松下载攻略,高质量图片一键获取!