当前位置: 首页 > 知识库问答 >
问题:

javascript - cesium 请问如何通过点击车辆模型,实现视角跟随?

邹丰羽
2023-09-01
function updateCarModelPosition(positions) {  if (positions.length === 0) {    return;  }  const latestPosition = positions[positions.length - 1];  const cartesian3 = Cesium.Cartesian3.fromDegrees(latestPosition.longitude, latestPosition.latitude, 0.4);  if (!carModelData) {    createCarModel(cartesian3, latestPosition.Angle);  } else {    carModelData.position = cartesian3;    const headingPitchRoll = new Cesium.HeadingPitchRoll(      Cesium.Math.toRadians(latestPosition.Angle + 90),      Cesium.Math.toRadians(0),      Cesium.Math.toRadians(0)    );    carModelData.orientation = Cesium.Transforms.headingPitchRollQuaternion(cartesian3, headingPitchRoll);  }}function createCarModel(cartesian3, angle) {  const headingPitchRoll = new Cesium.HeadingPitchRoll(    Cesium.Math.toRadians(angle + 90),    Cesium.Math.toRadians(0),    Cesium.Math.toRadians(0)  );  const scaleByDistance = new Cesium.NearFarScalar(200, 120, 1200, 0.6);  const distanceDisplayCondition = new Cesium.DistanceDisplayCondition(0, 10000);  carModelData = viewer.entities.add({    position: cartesian3,    orientation: Cesium.Transforms.headingPitchRollQuaternion(cartesian3, headingPitchRoll),    model: {      uri: "http://127.0.0.1:5501/car/scene.gltf",      scale: 75,      scaleByDistance,      distanceDisplayCondition,    },  });}

共有1个答案

那安宁
2023-09-01
let shouldFollowCar = false; // 标志位function updateCarModelPosition(positions) {  if (positions.length === 0) {    return;  }  const latestPosition = positions[positions.length - 1];  const cartesian3 = Cesium.Cartesian3.fromDegrees(latestPosition.longitude, latestPosition.latitude, 0.4);    // ...  if (shouldFollowCar) {    viewer.camera.setView({      destination: cartesian3,      orientation: {        heading: Cesium.Math.toRadians(latestPosition.Angle),        pitch: Cesium.Math.toRadians(-30), // 例如,从上方30度角观察        roll: 0.0      }    });  }}const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);handler.setInputAction(function (click) {  const pickedObject = viewer.scene.pick(click.position);  if (Cesium.defined(pickedObject) && pickedObject.id === carModelData) {    shouldFollowCar = !shouldFollowCar; // 切换跟随状态  }}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
 类似资料:
  • 问题内容: 我在通过jQuery伪造锚点单击时遇到问题:为什么我的thickbox第一次单击输入按钮时出现,但第二次或第三次却没有出现? 这是我的代码: 当我直接单击链接时,它总是起作用,但是如果我尝试通过输入按钮激活thickbox,则它不会起作用。这是在FF。对于Chrome,它似乎每次都能正常工作。有什么提示吗? 尽量避免内联这样的jQuery调用。将脚本标签放在页面顶部以绑定到事件: 编辑

  • 各位大神好,我正在尝试使用JavaScript代码,实现以下功能: 循环点击7个网页元素, 点击后5秒再进行点击下一个。 操作方法:在edge浏览器中开发模式中的工作台源代码里面。 目前使用JavaScript代码感觉效果不理想(大多数情况运行,偶尔成功运行也不知为何)。 希望各位不吝赐教。 以下是AI(文心一言)帮忙写的代码 // 定义一个函数来模拟点击 function simulateCli

  • 问题内容: 是否可以使用给定的坐标来模拟网页中JavaScript的点击? 问题答案: 您可以调度 点击 事件,尽管这与实际点击不同。例如,它不能用于欺骗跨域iframe文档以使其被点击。 所有现代浏览器都支持和,因为至少IE 6,火狐5,Chrome浏览器和Safari的你很可能任何版本可能任何版本的关心。它甚至会点击链接并提交表格:

  • 我有VRP问题。我有车辆起始位置和距离矩阵。我希望在访问某些位置时终止/完成解决方案。 所以我不希望它实际访问位置矩阵的每个索引,但如果访问“必须访问”旁边的不同索引有助于更好的解决方案,那么我没有问题。因为你知道有时候直接从1到3比1-2-3慢。(访问2,这不是必须的,但要走捷径) 我定义了一个成本为0的虚拟仓库,我用它作为结束,因为如果你使用开始,你必须定义结束。我把末端放在基本上是末端位置。

  • 问题内容: 我只是想知道如何使用JavaScript模拟元素的点击。 目前我有: 但这不起作用:( 有任何想法吗? 问题答案: 这是我煮的 这很简单,但是有效: 用法:

  • 本文向大家介绍Openlayers3实现车辆轨迹回放功能,包括了Openlayers3实现车辆轨迹回放功能的使用技巧和注意事项,需要的朋友参考一下 记录基于geoserver地图服务,Openlayers3在web前端实现车辆轨迹回放功能,并记录和解决过程中出现的linestring只描绘部分经纬度坐标问题。 参考Openlayers3 官网例子 html map初始化 ajax获取坐标数据 显示