便签地形采样改用固定层级 sampleTerrain,并输出贴附数量日志
This commit is contained in:
@@ -343,24 +343,30 @@ export class CesiumGlobe {
|
||||
// 把便签锚点贴到地形表面(否则在椭球面高度 0 上,放大旋转时会飘)
|
||||
async _clampMarkersToTerrain() {
|
||||
const scene = this.viewer.scene;
|
||||
if (!scene || !scene.globe || !scene.terrainProvider) return;
|
||||
const tp = scene && scene.terrainProvider;
|
||||
if (!tp) return;
|
||||
const cartos = this.markers.map((m) =>
|
||||
Cesium.Cartographic.fromDegrees(m.lng, m.lat),
|
||||
);
|
||||
try {
|
||||
await Cesium.sampleTerrainMostDetailed(scene.terrainProvider, cartos);
|
||||
// 用固定层级 15(约 30m)采样:ArcGIS 高程服务没有 availability,
|
||||
// sampleTerrainMostDetailed 会 reject,改用 sampleTerrain 更稳。
|
||||
await Cesium.sampleTerrain(tp, 15, cartos);
|
||||
} catch (err) {
|
||||
console.warn('[CesiumGlobe] 地形高度采样失败,便签保持椭球面高度:', err);
|
||||
return;
|
||||
}
|
||||
let clamped = 0;
|
||||
for (let i = 0; i < this.markers.length; i++) {
|
||||
const h = cartos[i] && cartos[i].height;
|
||||
if (h != null && isFinite(h)) {
|
||||
const m = this.markers[i];
|
||||
m.position = Cesium.Cartesian3.fromDegrees(m.lng, m.lat, h);
|
||||
m.r2 = Cesium.Cartesian3.magnitudeSquared(m.position);
|
||||
clamped++;
|
||||
}
|
||||
}
|
||||
console.log(`[CesiumGlobe] 便签已贴附地形:${clamped}/${this.markers.length}`);
|
||||
}
|
||||
|
||||
// 便签用 DOM 覆盖层渲染:始终在城市/国家名上层,且缩放到最近也不会漂移
|
||||
|
||||
Reference in New Issue
Block a user