解决scale太小时flyto高度问题
This commit is contained in:
@ -10,6 +10,7 @@ import { FontLoader } from '../../../../static/3rdparty/three/jsm/loaders/FontLo
|
|||||||
import { TextGeometry } from '../../../../static/3rdparty/three/jsm/geometries/TextGeometry.js';
|
import { TextGeometry } from '../../../../static/3rdparty/three/jsm/geometries/TextGeometry.js';
|
||||||
import * as variable from '../../../../static/3rdparty/three/fonts/FZZongYi-M05S_regular.typeface.json'
|
import * as variable from '../../../../static/3rdparty/three/fonts/FZZongYi-M05S_regular.typeface.json'
|
||||||
import Base from "../index";
|
import Base from "../index";
|
||||||
|
import { setActiveViewer, closeRotateAround, closeViewFollow } from '../../../Global/global'
|
||||||
import { setSplitDirection, syncSplitData, setActiveId } from '../../../Global/SplitScreen'
|
import { setSplitDirection, syncSplitData, setActiveId } from '../../../Global/SplitScreen'
|
||||||
|
|
||||||
class GroundSvg extends Base {
|
class GroundSvg extends Base {
|
||||||
@ -2171,6 +2172,59 @@ class GroundSvg extends Base {
|
|||||||
}
|
}
|
||||||
this._update()
|
this._update()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async flyTo(options = {}) {
|
||||||
|
if (this._error) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
setActiveViewer(0)
|
||||||
|
closeRotateAround(this.sdk)
|
||||||
|
closeViewFollow(this.sdk)
|
||||||
|
|
||||||
|
if (this.options.customView && this.options.customView.relativePosition && this.options.customView.orientation) {
|
||||||
|
let orientation = {
|
||||||
|
heading: Cesium.Math.toRadians(this.options.customView.orientation.heading || 0.0),
|
||||||
|
pitch: Cesium.Math.toRadians(this.options.customView.orientation.pitch || -60.0),
|
||||||
|
roll: Cesium.Math.toRadians(this.options.customView.orientation.roll || 0.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
let lng = this.options.customView.relativePosition.lng
|
||||||
|
let lat = this.options.customView.relativePosition.lat
|
||||||
|
let alt = this.options.customView.relativePosition.alt
|
||||||
|
let destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt)
|
||||||
|
|
||||||
|
let position = { ...this.options.position }
|
||||||
|
// 如果没有高度值,则获取紧贴高度计算
|
||||||
|
if (!position.hasOwnProperty('alt')) {
|
||||||
|
position.alt = await this.getClampToHeight(position)
|
||||||
|
}
|
||||||
|
lng = this.options.customView.relativePosition.lng + position.lng
|
||||||
|
lat = this.options.customView.relativePosition.lat + position.lat
|
||||||
|
alt = this.options.customView.relativePosition.alt + position.alt
|
||||||
|
destination = Cesium.Cartesian3.fromDegrees(lng, lat, alt)
|
||||||
|
this.sdk.viewer.camera.flyTo({
|
||||||
|
destination: destination,
|
||||||
|
orientation: orientation
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let array = []
|
||||||
|
for (let i = 0; i < this.controlPoints.length; i++) {
|
||||||
|
let height = await this.getClampToHeight({lng: this.controlPoints[i][0], lat: this.controlPoints[i][1]})
|
||||||
|
let cartesian = Cesium.Cartesian3.fromDegrees(this.controlPoints[i][0], this.controlPoints[i][1], height)
|
||||||
|
array.push(cartesian.x, cartesian.y, cartesian.z)
|
||||||
|
}
|
||||||
|
let BoundingSphere = Cesium.BoundingSphere.fromVertices(array)
|
||||||
|
|
||||||
|
this.sdk.viewer.camera.flyToBoundingSphere(BoundingSphere, {
|
||||||
|
offset: options.orientation || {
|
||||||
|
heading: Cesium.Math.toRadians(0.0),
|
||||||
|
pitch: Cesium.Math.toRadians(-60.0),
|
||||||
|
roll: Cesium.Math.toRadians(0.0)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default GroundSvg
|
export default GroundSvg
|
Reference in New Issue
Block a user