Cesium 为什么label的eyeOffset设置的距离会有偏差 相比于圆?-灵析社区

周舟莫UI设计

总共四个entity,有一辆车三个圆且都在一个位置。在三个圆的右侧边缘显示一个label,我用的eyeOffset来偏移label的位置到右侧边缘(因为position在圆心),往右偏移会有明显的误差,往上偏移就没多少误差。 往右偏移: ![12f6b5e07c218f455cf3332c53ad591.jpg](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250103/a03d7038cdfd12bb69901d381c5922d2.png) 往上偏移: ![3520dad610e73b4d484c0a92adae914.jpg](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250103/42e040e965046a0977b2a06cea194599.png) 一辆车: const position = Cesium.Cartesian3.fromDegrees(123, 23, 0) const color = Cesium.Color.fromCssColorString('#fff') entities.add({ position, billboard: { image: icon, scale: 0.2, color } }) 三个圈附带label for (let i = 1; i <= 3; i++) { entities.add({ position, ellipse: { fill: false, outline: true, outlineColor: new Ceisum.Color(1, 1, 1, 0.5), semiMinorAxis: 100000 * i, // 半径 semiMajorAxis: 100000 * i, // 半径 height: 0 }, label: { test: 100 * i + 'km', font: '14px sans-serif', fillColor: new Cesium.Color(1, 1, 1, 0.5), eyeOffset: new Cesium.Cartesian3(100000 * i, 0, 0) // eyeOffset相对圆心偏移 } }) }

阅读量:25

点赞量:0

问AI
function computeLabelPosition(center, radius, bearing) { // 用Cesium的Spherical几何计算 let spherical = new Cesium.Spherical(bearing, 0, radius); let offsetPosition = new Cesium.Cartesian3(); Cesium.Cartesian3.add(center, Cesium.Cartesian3.fromSpherical(spherical), offsetPosition); return offsetPosition; } // 用该方法为每个标签计算位置 for (let i = 1; i <= 3; i++) { let labelPosition = computeLabelPosition(position, 100000 * i, Cesium.Math.toRadians(90)); // 90度表示右侧 entities.add({ position: labelPosition, // ... 其他属性 }); }