cesium 自动采集3dtiles 上的点位高度

效果如下:

这个是官方案例的截图

有时候我们需要的场景是 在地图上标点,如果有 点位上有 倾斜摄影的建筑, 希望点位标在建筑的顶端,

官方案例是 设置2个位置,然后以偏移的方式获取 30个点的坐标,然后 标点连线。

官方代码:

function sampleHeights() {
  viewer.entities.removeAll();
  // 设置初始的2个点
  var cartesian1 = new Cesium.Cartesian3(
    1216390.063324395,
    -4736314.814479433,
    4081341.9787972216
  );
  var cartesian2 = new Cesium.Cartesian3(
    1216329.5413318684,
    -4736272.029009798,
    4081407.9342479417
  );
  // 通过偏移的方式 获取30个点,这30个点在一条直线上
  var count = 30;
  var cartesians = new Array(count);
  for (var i = 0; i < count; ++i) {
    var offset = i / (count - 1);
    cartesians[i] = Cesium.Cartesian3.lerp(
      cartesian1,
      cartesian2,
      offset,
      new Cesium.Cartesian3()
    );
  }
  // 加载点列表采集高度
  scene
    .clampToHeightMostDetailed(cartesians)
    .then(function (clampedCartesians) {
      // 添加点
      for (var i = 0; i < count; ++i) {
        viewer.entities.add({
          position: clampedCartesians[i],
          ellipsoid: {
            radii: new Cesium.Cartesian3(0.2, 0.2, 0.2),
            material: Cesium.Color.RED,
          },
        });
      }
      // 连线
      viewer.entities.add({
        polyline: {
          positions: clampedCartesians,
          arcType: Cesium.ArcType.NONE,
           2,
          material: new Cesium.PolylineOutlineMaterialProperty({
            color: Cesium.Color.YELLOW,
          }),
          depthFailMaterial: new Cesium.PolylineOutlineMaterialProperty(
            {
              color: Cesium.Color.YELLOW,
            }
          ),
        },
      });
    });
}

代码如下

// 先获取迪卡坐标
let cartesians = [];
let start = Cesium.Cartesian3.fromDegrees(x, y, 0);
cartesians.push(start);
// 该方法在加载坐标时,会自动采集该点位的 3dtiles 高度,然后返回
viewer.scene
      .clampToHeightMostDetailed(cartesians)
      .then(function (clampedCartesians) {
      // clampedCartesians  就是返回有高度的坐标
      // viever.entities.add(); 然后就可以添加你自己的数据
});

需要注意的是,  clampToHeightMostDetailed 采集倾斜摄影的高度 需要等 倾斜摄影加载完成之后,才会返回数据,如果倾斜摄像加载很慢,这个过程需要很久,

有的点位没在倾斜摄影上面,返回 undefined, 对于这些点位,需要做特殊处理

原文地址:https://www.cnblogs.com/bruce-gou/p/14179959.html