便签贴附:等待地形provider就绪后再采样
This commit is contained in:
@@ -343,14 +343,32 @@ export class CesiumGlobe {
|
||||
// 把便签锚点贴到地形表面(否则在椭球面高度 0 上,放大旋转时会飘)
|
||||
async _clampMarkersToTerrain() {
|
||||
const scene = this.viewer.scene;
|
||||
const tp = scene && scene.terrainProvider;
|
||||
if (!tp) return;
|
||||
if (!scene) return;
|
||||
|
||||
// 等待地形 provider 就绪(setTerrain 是异步的,调用时 provider 可能还没准备好)
|
||||
let tp = scene.terrainProvider;
|
||||
if (!tp) {
|
||||
tp = await new Promise((resolve) => {
|
||||
const started = Date.now();
|
||||
const poll = () => {
|
||||
const p = scene.terrainProvider;
|
||||
if (p) { resolve(p); return; }
|
||||
if (Date.now() - started > 30000) { resolve(undefined); return; }
|
||||
setTimeout(poll, 500);
|
||||
};
|
||||
poll();
|
||||
});
|
||||
}
|
||||
if (!tp) {
|
||||
console.warn('[CesiumGlobe] 地形 provider 未就绪,便签保持椭球面高度');
|
||||
return;
|
||||
}
|
||||
|
||||
const cartos = this.markers.map((m) =>
|
||||
Cesium.Cartographic.fromDegrees(m.lng, m.lat),
|
||||
);
|
||||
try {
|
||||
// 用固定层级 15(约 30m)采样:ArcGIS 高程服务没有 availability,
|
||||
// sampleTerrainMostDetailed 会 reject,改用 sampleTerrain 更稳。
|
||||
// 固定层级 15(约 30m):ArcGIS 高程服务无 availability,不用 sampleTerrainMostDetailed
|
||||
await Cesium.sampleTerrain(tp, 15, cartos);
|
||||
} catch (err) {
|
||||
console.warn('[CesiumGlobe] 地形高度采样失败,便签保持椭球面高度:', err);
|
||||
|
||||
Reference in New Issue
Block a user