Created
March 3, 2021 17:37
-
-
Save malaretv/e85129a1c8c36c0489e0197f71f4e99d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var viewer = new Cesium.Viewer("cesiumContainer", { | |
infoBox: false, //Disable InfoBox widget | |
selectionIndicator: false, //Disable selection indicator | |
shouldAnimate: true, // Enable animations | |
terrainProvider: Cesium.createWorldTerrain(), | |
}); | |
//Enable lighting based on the sun position | |
viewer.scene.globe.enableLighting = true; | |
//Enable depth testing so things behind the terrain disappear. | |
viewer.scene.globe.depthTestAgainstTerrain = true; | |
//Set the random number seed for consistent results. | |
Cesium.Math.setRandomNumberSeed(3); | |
var timeScale = 5; | |
//Set bounds of our simulation time | |
var start = Cesium.JulianDate.fromDate(new Date(2015, 2, 25, 16)); | |
var stop = Cesium.JulianDate.addSeconds( | |
start, | |
360 * timeScale, | |
new Cesium.JulianDate() | |
); | |
//Make sure viewer is at the desired time. | |
viewer.clock.startTime = start.clone(); | |
viewer.clock.stopTime = stop.clone(); | |
viewer.clock.currentTime = start.clone(); | |
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; //Loop at the end | |
viewer.clock.multiplier = 10; | |
//Set timeline to simulation bounds | |
viewer.timeline.zoomTo(start, stop); | |
//Generate a random circular pattern with varying heights. | |
function computeCirclularFlight(lon, lat, radius) { | |
var property = new Cesium.SampledPositionProperty(); | |
for (var i = 0; i <= 360; i += 45) { | |
var radians = Cesium.Math.toRadians(i); | |
var time = Cesium.JulianDate.addSeconds( | |
start, | |
i * timeScale, | |
new Cesium.JulianDate() | |
); | |
var position = Cesium.Cartesian3.fromDegrees( | |
lon + radius * 1.5 * Math.cos(radians), | |
lat + radius * Math.sin(radians), | |
Cesium.Math.nextRandomNumber() * 100 + 100750 | |
); | |
property.addSample(time, position); | |
//Also create a point for each sample we generate. | |
viewer.entities.add({ | |
position: position, | |
point: { | |
pixelSize: 8, | |
color: Cesium.Color.TRANSPARENT, | |
outlineColor: Cesium.Color.YELLOW, | |
outlineWidth: 3, | |
}, | |
}); | |
} | |
return property; | |
} | |
//Compute the entity position property. | |
var position = computeCirclularFlight(-112.110693, 36.0994841, 10); | |
//Actually create the entity | |
var entity = viewer.entities.add({ | |
//Set the entity availability to the same interval as the simulation time. | |
availability: new Cesium.TimeIntervalCollection([ | |
new Cesium.TimeInterval({ | |
start: start, | |
stop: stop, | |
}), | |
]), | |
//Use our computed positions | |
position: position, | |
//Automatically compute orientation based on position movement. | |
orientation: new Cesium.VelocityOrientationProperty(position), | |
//Load the Cesium plane model to represent the entity | |
model: { | |
uri: "../SampleData/models/CesiumAir/Cesium_Air.glb", | |
minimumPixelSize: 64, | |
}, | |
//Show the path as a pink line sampled in 1 second increments. | |
path: { | |
resolution: 1, | |
material: new Cesium.PolylineGlowMaterialProperty({ | |
glowPower: 0.1, | |
color: Cesium.Color.YELLOW, | |
}), | |
width: 10, | |
}, | |
}); | |
//Add button to view the path from the top down | |
Sandcastle.addDefaultToolbarButton("View Top Down", function () { | |
viewer.trackedEntity = undefined; | |
viewer.zoomTo( | |
viewer.entities, | |
new Cesium.HeadingPitchRange(0, Cesium.Math.toRadians(-90)) | |
); | |
}); | |
//Add button to view the path from the side | |
Sandcastle.addToolbarButton("View Side", function () { | |
viewer.trackedEntity = undefined; | |
viewer.zoomTo( | |
viewer.entities, | |
new Cesium.HeadingPitchRange( | |
Cesium.Math.toRadians(-90), | |
Cesium.Math.toRadians(-15), | |
7500 | |
) | |
); | |
}); | |
//Add button to track the entity as it moves | |
Sandcastle.addToolbarButton("View Aircraft", function () { | |
viewer.trackedEntity = entity; | |
}); | |
//Add a combo box for selecting each interpolation mode. | |
Sandcastle.addToolbarMenu( | |
[ | |
{ | |
text: "Interpolation: Linear Approximation", | |
onselect: function () { | |
entity.position.setInterpolationOptions({ | |
interpolationDegree: 1, | |
interpolationAlgorithm: Cesium.LinearApproximation, | |
}); | |
}, | |
}, | |
{ | |
text: "Interpolation: Lagrange Polynomial Approximation", | |
onselect: function () { | |
entity.position.setInterpolationOptions({ | |
interpolationDegree: 500, | |
interpolationAlgorithm: | |
Cesium.LagrangePolynomialApproximation, | |
}); | |
}, | |
}, | |
{ | |
text: "Interpolation: Hermite Polynomial Approximation", | |
onselect: function () { | |
entity.position.setInterpolationOptions({ | |
interpolationDegree: 2, | |
interpolationAlgorithm: Cesium.HermitePolynomialApproximation, | |
}); | |
}, | |
}, | |
], | |
"interpolationMenu" | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment