<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>衛星掃描</title>
<link rel='stylesheet' />
<script src='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js'></script>
</head>
<style>
body {
margin: 0;
padding: 0;
}
#container {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
.bmgl-widget-credits {
display: none
}
</style>
<body>
<div id='container'></div>
</body>
<script>
bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
var viewer = new bmgl.Viewer('container', {
mapId: 'bigemap.dc-tian-w-satellite',
requestRenderMode: false, timeline: true,
shouldAnimate: true,
mapId: 'bigemap.dc-tian-w-satellite',
});
var data = [];
data = [{
longitude: 116.405419,
dimension: 39.918034,
height: 700000,
time: 0
}, {
longitude: 115.2821,
dimension: 39.918145,
height: 700000,
time: 40
}, {
longitude: 114.497402,
dimension: 39.344641,
height: 700000,
time: 100
}, {
longitude: 107.942392,
dimension: 35.559967,
height: 700000,
time: 280
}, {
longitude: 106.549265,
dimension: 34.559967,
height: 700000,
time: 360
}, {
longitude: 95.2821,
dimension: 32.918145,
height: 700000,
time: 400
}, {
longitude: 94.497402,
dimension: 30.344641,
height: 700000,
time: 450
}, {
longitude: 87.942392,
dimension: 25.559967,
height: 700000,
time: 550
}, {
longitude: 66.549265,
dimension: 24.559967,
height: 700000,
time: 600
}];
// 起始時間
var start = bmgl.JulianDate.fromDate(new Date(2017, 7, 11));
// 結束時間
var stop = bmgl.JulianDate.addSeconds(start, 600, new bmgl.JulianDate());
// 設置始時鐘始時間
viewer.clock.startTime = start.clone();
// 設置時鐘當前時間
viewer.clock.currentTime = start.clone();
// 設置始終停止時間
viewer.clock.stopTime = stop.clone();
// 時間速率,數字越大時間過的越快
viewer.clock.multiplier = 10;
// 時間軸
viewer.timeline.zoomTo(start, stop);
// 循環執行
viewer.clock.clockRange = bmgl.ClockRange.LOOP_STOP;
var property = computeFlight(data);
// 添加模型
var planeModel = viewer.entities.add({
// 和時間軸關聯
availability: new bmgl.TimeIntervalCollection([new bmgl.TimeInterval({
start: start,
stop: stop
})]),
position: property,
// 根據所提供的速度計算點
orientation: new bmgl.VelocityOrientationProperty(property),
// 模型數據
model: {
uri: '/SampleData/models/CesiumAir/Cesium_Air.glb',
minimumPixelSize: 128
},
path: {
resolution: 1,
material: new bmgl.PolylineGlowMaterialProperty({
glowPower: .1,
color: bmgl.Color.YELLOW
}),
width: 10
}
});
planeModel.position.setInterpolationOptions({ //設定位置的插值算法
interpolationDegree: 5,
interpolationAlgorithm: bmgl.LagrangePolynomialApproximation
});
//繪制透明圓錐體
var property2 = computeFlight2(data);
var entity_ty = viewer.entities.add({
availability: new bmgl.TimeIntervalCollection([new bmgl.TimeInterval({
start: start,
stop: stop
})]),
position: property2,
orientation: new bmgl.VelocityOrientationProperty(property2),
cylinder: {
HeightReference: bmgl.HeightReference.CLAMP_TO_GROUND,
length: 700000,
topRadius: 0,
bottomRadius: 700000 / 2,
material: bmgl.Color.RED.withAlpha(.4),
outline: !0,
numberOfVerticalLines: 0,
outlineColor: bmgl.Color.BLUE.withAlpha(.8)
},
});
entity_ty.position.setInterpolationOptions({
interpolationDegree: 5,
interpolationAlgorithm: bmgl.LagrangePolynomialApproximation
});
function computeFlight(source) {
var property = new bmgl.SampledPositionProperty();
for (var i = 0; i < source.length; i++) {
var time = bmgl.JulianDate.addSeconds(start, source[i].time, new bmgl.JulianDate);
var position = bmgl.Cartesian3.fromDegrees(source[i].longitude, source[i].dimension, source[i].height);
// 添加位置,和時間對應
property.addSample(time, position);
}
return property;
}
function computeFlight2(source) {
var property = new bmgl.SampledPositionProperty();
for (var i = 0; i < source.length; i++) {
var time = bmgl.JulianDate.addSeconds(start, source[i].time, new bmgl.JulianDate);
var position = bmgl.Cartesian3.fromDegrees(source[i].longitude, source[i].dimension, source[i].height / 2);
// 添加位置,和時間對應
property.addSample(time, position);
}
return property;
}
viewer.camera.setView({
destination: bmgl.Cartesian3.fromDegrees(100.405419, 20.918034, 3100000.0),
orientation: {
heading: bmgl.Math.toRadians(30.0),
pitch: bmgl.Math.toRadians(-50.0),
roll: 0.0
}
});
</script>
</html>