基于此修改代码,然后原先vue中的其他无关代码不要动 - CSDN文库",
"datePublished": "2025-07-25",
"keywords": "
如上所示vue代码,我要在class="gradient-rectangle" 下面也就是与class="vertical-button-bar"同一级别的在整个页面的右下角加一个指南针功能,指南针代码可以借鉴:
</div>
如上所示vue代码,我要在class="gradient-rectangle" 下面也就是与class="vertical-button-bar"同一级别的在整个页面的右下角加一个指南针功能,指南针代码可以借鉴:<template>
<div id="cesium-container" class="cesium-container">
<!-- 修改后的指南针按钮 -->
<button class="compass-button" @click="resetNorth">
<img
src="/image/zhinanzhen.png"
alt="指南针"
style="width: 30px; height: 30px;"
/>
</button>
</div>
</template>
<script>
import * as Cesium from 'cesium';
import 'cesium/Build/Cesium/Widgets/widgets.css';
import CircleRippleMaterialProperty from './CircleRippleMaterialProperty';
export default {
name: 'CesiumRippleEffect',
data() {
return {
viewer: null,
rippleEntity: null
};
},
mounted() {
this.initCesium();
},
beforeDestroy() {
if (this.viewer) {
this.viewer.destroy();
// 完全移除Cesium实例
const cesiumContainer = document.getElementById('cesium-container');
if (cesiumContainer) {
cesiumContainer.innerHTML = '';
}
}
},
methods: {
initCesium() {
// 修复沙箱错误:禁用InfoBox
Cesium.InfoBoxViewModel.prototype._iframeHtml = '<div></div>';
// 初始化Cesium Viewer
this.viewer = new Cesium.Viewer('cesium-container', {
animation: false,
timeline: false,
baseLayerPicker: false,
geocoder: false,
homeButton: false,
sceneModePicker: false,
navigationHelpButton: false,
fullscreenButton: true,
infoBox: false // 完全禁用InfoBox组件
});
// 添加波纹圆效果
this.addRippleEffect();
// 调整相机位置
this.viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(113.194006, 27.399411, 2000),
orientation: {
heading: Cesium.Math.toRadians(0),
pitch: Cesium.Math.toRadians(-60),
roll: 0
},
duration: 2.0
});
},
addRippleEffect() {
// 指定坐标 (113.194006, 27.399411)
const position = Cesium.Cartesian3.fromDegrees(113.194006, 27.399411);
// 创建波纹圆实体
this.rippleEntity = this.viewer.entities.add({
name: '动态波纹圆',
position: position,
ellipse: {
semiMinorAxis: 500.0,
semiMajorAxis: 700.0,
height: 0,
material: new CircleRippleMaterialProperty({
color: Cesium.Color.fromCssColorString("#00FFFF").withAlpha(0.6),
speed: 1,
count: 1,
gradient: 0.1
})
}
});
// 添加参考点
this.viewer.entities.add({
position: position,
point: {
pixelSize: 10,
color: Cesium.Color.RED
}
});
},
// 指南针功能:重置北方向
resetNorth() {
if (!this.viewer) return;
// 获取当前相机位置
const camera = this.viewer.camera;
const currentPosition = camera.position.clone();
// 创建新的方向,将heading(偏航角)设为0(正北方向)
const orientation = {
heading: 0, // 北方向
pitch: camera.pitch,
roll: camera.roll
};
// 平滑过渡到北方向
camera.flyTo({
destination: currentPosition,
orientation: orientation,
duration: 1.0,
easingFunction: Cesium.EasingFunction.CUBIC_OUT
});
}
}
};
</script>
<style scoped>
.cesium-container {
width: 100%;
height: 100vh;
position: relative;
overflow: hidden; /* 防止内容溢出 */
}
/* 指南针按钮样式 - 确保可见 */
.compass-button {
position: absolute;
bottom: 20px;
right: 20px;
z-index: 1000; /* 确保在Cesium控件之上 */
width: 40px;
height: 40px;
background: rgba(255, 255, 255, 0.9); /* 提高背景不透明度 */
border: 1px solid #ddd;
border-radius: 50%; /* 圆形按钮 */
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 2px 8px rgba(0,0,0,0.3); /* 更明显的阴影 */
transition: all 0.3s ease;
}
.compass-button:hover {
background: rgba(255, 255, 255, 1);
transform: scale(1.1);
box-shadow: 0 4px 12px rgba(0,0,0,0.4);
}
.compass-button svg {
color: #1a73e8; /* 更明显的颜色 */
width: 24px;
height: 24px;
}
</style>
基于此修改代码,然后原先vue中的其他无关代码不要动