标记便签:加缩放距离限制并修复背面可见问题
This commit is contained in:
@@ -271,17 +271,21 @@ export class CesiumGlobe {
|
||||
_updateMarkerLayer() {
|
||||
const scene = this.viewer.scene;
|
||||
const camera = scene.camera;
|
||||
const toPos = new Cesium.Cartesian3();
|
||||
const outOfRange = camera.positionCartographic.height > 1e7; // 最远 1 万 km 内显示
|
||||
|
||||
for (const m of this.markers) {
|
||||
const el = m.el;
|
||||
if (!el) continue;
|
||||
if (outOfRange) { el.style.display = 'none'; continue; }
|
||||
|
||||
const win = Cesium.SceneTransforms.worldToWindowCoordinates(scene, m.position);
|
||||
if (!win) { el.style.display = 'none'; continue; }
|
||||
Cesium.Cartesian3.subtract(m.position, camera.positionWC, toPos);
|
||||
if (Cesium.Cartesian3.dot(toPos, camera.directionWC) < 0) {
|
||||
el.style.display = 'none'; // 背对相机不显示
|
||||
continue;
|
||||
}
|
||||
|
||||
// 背面(远半球)隐藏:dot(P, C) <= |P|² 时为背对地球
|
||||
const dotPC = Cesium.Cartesian3.dot(m.position, camera.positionWC);
|
||||
const r2 = Cesium.Cartesian3.magnitudeSquared(m.position);
|
||||
if (dotPC <= r2) { el.style.display = 'none'; continue; }
|
||||
|
||||
el.style.display = 'block';
|
||||
el.style.left = `${win.x}px`;
|
||||
el.style.top = `${win.y}px`;
|
||||
|
||||
Reference in New Issue
Block a user