效果如下:

這個是官方案例的截圖
有時候我們需要的場景是 在地圖上標點,如果有 點位上有 傾斜攝影的建築, 希望點位標在建築的頂端,
官方案例是 設置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, width: 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, 對於這些點位,需要做特殊處理
