<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="http://bigemap.com/offline_data/newjunbiao/vue.js"></script>
<link
href="http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/Widgets/widgets.css"
rel="stylesheet"
/>
<script src="http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js"></script>
<!-- elementui -->
<script src="http://bigemap.com/offline_data/newjunbiao/elementui.js"></script>
<link
rel="stylesheet"
href="http://bigemap.com/offline_data/newjunbiao/elementui.css"
/>
<title>相機鏡頭按照步驟運動</title>
<style>
* {
margin: 0;
padding: 0;
}
html,
body {
width: 100%;
height: 100%;
}
#app {
width: 100%;
height: 100%;
}
#baseMap {
width: 100%;
height: 100%;
}
.tools {
position: absolute;
z-index: 9;
top: 40px;
right: 60px;
width: 200px;
height: 40px;
display: flex;
align-items: center;
}
</style>
</head>
<body>
<div id="app">
<div id="baseMap"></div>
</div>
<script>
window.viewer = null;
window.onload = () => {
new Vue({
el: "#app",
data() {
return {};
},
mounted() {
this.initMap();
},
methods: {
//初始化地圖
initMap() {
bmgl.Config.HTTP_URL =
"http://ua.bigemap.com:30081/bmsdk/";
viewer = new bmgl.Viewer("baseMap", {
mapId: "bigemap.dc-tian-w-satellite",
infoBox: false,
selectionIndicator: false,
requestRenderMode: false,
});
viewer.camera.setView({
destination: bmgl.Cartesian3.fromDegrees(
102,
30,
10000
),
});
setTimeout(() => {
this.stepFly(viewer, {
// 目的地經度
lon: 104,
// 目的地緯度
lat: 30,
// 目的地的鏡頭高度
height: 23000,
// 目的地的鏡頭旋轉角度
orientation: {
heading: bmgl.Math.toRadians(90),
roll: 0,
pitch: 0,
},
});
},4000);
},
RetuendefaultValue(a, b) {
if (a !== undefined && a !== null) {
return a;
}
return b;
},
//按步驟調整飛行位置
stepFly(viewer, options) {
const { camera } = viewer;
const step1 = this.RetuendefaultValue(
options.firstDuration,
3
);
const step2 = this.RetuendefaultValue(
options.secondDuration,
3
);
const step3 = this.RetuendefaultValue(
options.thirdDuration,
3
);
const cartographic = options.destination;
// 第一步調整鏡頭位置
const cur_height =
viewer.camera._positionCartographic.height;
const firstStep = bmgl.Cartesian3.fromDegrees(
options.lon,
options.lat,
cur_height
);
// 第二步調整鏡頭高度
const secondStep = bmgl.Cartesian3.fromDegrees(
options.lon,
options.lat,
options.height
);
return new Promise((resolve) => {
camera.flyTo({
destination: firstStep,
duration: step1,
complete() {
camera.flyTo({
destination: secondStep,
duration: step2,
complete() {
camera.flyTo({
destination: secondStep,
orientation:
options.orientation,
duration: step3,
complete() {
resolve();
},
});
},
});
},
});
});
},
},
beforeDestroy() {
viewer.destroy();
viewer = null;
},
});
};
</script>
</body>
</html>