|
|
@@ -24,6 +24,8 @@ const error = ref(null)
|
|
|
const veModel = ref(props.verticalExaggeration)
|
|
|
const infoText = ref('')
|
|
|
const isAutoRotating = ref(false)
|
|
|
+const realtimeMetrics = ref([])
|
|
|
+const loadingMetrics = ref(false)
|
|
|
|
|
|
const activeMarker = ref(null)
|
|
|
const markerPopupPosition = ref({ x: 0, y: 0 })
|
|
|
@@ -36,6 +38,7 @@ let elevations = null
|
|
|
let markerEntities = []
|
|
|
let handler = null
|
|
|
let removePostRender = null
|
|
|
+let autoRotateListener = null
|
|
|
|
|
|
// 计算地形经纬度范围
|
|
|
function computeTerrainRectangle() {
|
|
|
@@ -327,6 +330,38 @@ function resetCamera() {
|
|
|
setupCamera()
|
|
|
}
|
|
|
|
|
|
+function startAutoRotate() {
|
|
|
+ if (isAutoRotating.value || !viewer || !meta) return
|
|
|
+ isAutoRotating.value = true
|
|
|
+
|
|
|
+ const rect = computeTerrainRectangle()
|
|
|
+ const eRange = (meta.elevationMax - meta.elevationMin) * veModel.value
|
|
|
+ const targetHeight = meta.elevationMin + eRange * props.cameraTargetY
|
|
|
+ const center = Cesium.Cartesian3.fromDegrees(
|
|
|
+ Cesium.Math.toDegrees(Cesium.Rectangle.center(rect).longitude),
|
|
|
+ Cesium.Math.toDegrees(Cesium.Rectangle.center(rect).latitude),
|
|
|
+ targetHeight
|
|
|
+ )
|
|
|
+ const distance = Math.max(meta.terrainWidthMeters, meta.terrainDepthMeters) * props.cameraDistance
|
|
|
+ const pitch = Cesium.Math.toRadians(-props.cameraPitch)
|
|
|
+ let heading = Cesium.Math.toRadians(props.cameraYaw)
|
|
|
+
|
|
|
+ autoRotateListener = viewer.clock.onTick.addEventListener(() => {
|
|
|
+ if (!isAutoRotating.value) return
|
|
|
+ heading += Cesium.Math.toRadians(0.1)
|
|
|
+ viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, distance))
|
|
|
+ viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+function stopAutoRotate() {
|
|
|
+ isAutoRotating.value = false
|
|
|
+ if (autoRotateListener) {
|
|
|
+ autoRotateListener()
|
|
|
+ autoRotateListener = null
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// 获取标记点 exaggeration 后的地表高度
|
|
|
function getMarkerSurfaceHeight(lon, lat) {
|
|
|
const lonMin = meta.dsmLonMin
|
|
|
@@ -563,6 +598,7 @@ window.addEventListener('resize', onResize)
|
|
|
onUnmounted(() => {
|
|
|
window.removeEventListener('message', handleIframeMessage)
|
|
|
window.removeEventListener('resize', onResize)
|
|
|
+ stopAutoRotate()
|
|
|
if (removePostRender) removePostRender()
|
|
|
if (handler) handler.destroy()
|
|
|
if (viewer) viewer.destroy()
|