Last active
January 16, 2019 06:40
-
-
Save eeddaann/7697b0d297309dcefbf44035ff473a08 to your computer and use it in GitHub Desktop.
calsium wip
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', { | |
terrainProviderViewModels : [], //Disable terrain changing | |
infoBox : false, //Disable InfoBox widget | |
selectionIndicator : false //Disable selection indicator | |
}); | |
//Enable lighting based on sun/moon positions | |
viewer.scene.globe.enableLighting = true; | |
//Use STK World Terrain | |
viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ | |
url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles', | |
requestWaterMask : true, | |
requestVertexNormals : 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); | |
//Set bounds of our simulation time | |
var start = Cesium.JulianDate.fromDate(new Date(2015, 2, 25, 16)); | |
var stop = Cesium.JulianDate.addSeconds(start, 360, 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, new Cesium.JulianDate()); | |
var position = Cesium.Cartesian3.fromDegrees(lon + (radius * 1.5 * Math.cos(radians)), lat + (radius * Math.sin(radians)), Cesium.Math.nextRandomNumber() * 500 + 1750); | |
console.log(time); | |
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; | |
} | |
//Generate a random circular pattern with varying heights. | |
function computeFlightFromArray() { | |
var property = new Cesium.SampledPositionProperty(); | |
var points = [ // time, lon, lat, height | |
[new Date(2015,2,25,16,0,0),-1938882.132435972, -4783104.970986614, 3738309.9160818686],// time should be between start and stop! | |
[new Date(2015,2,25,16,0,45),-1939387.900323652, -4781193.261036239, 3740070.65716298], | |
[new Date(2015,2,25,16,1,30),-1941923.3612027455, -4779821.267164548, 3741046.3285450945], | |
[new Date(2015,2,25,16,2,15),-1944814.3726146347, -4779323.961685797, 3740297.3814439983], | |
//[new Date(2015,2,25,16,3,0),-1946353.4244015086, -4779956.238836014, 3738233.3529754514], | |
//[new Date(2015,2,25,16,3,45),-1945750.717271222, -4781625.001063456, 3736280.714354399], | |
//[new Date(2015,2,25,16,4,30),-1943370.2943612777, -4783382.7269118745, 3735607.1109777773], | |
[new Date(2015,2,25,16,5,15),-1940506.515172479, -4783950.993914748, 3736412.6206093826], | |
[new Date(2015,2,25,16,6,0),-1938934.0602408552, -4783233.073741037, 3738410.7113252394] | |
]; | |
for (var i = 0; i < points.length ; i ++) { | |
var time = Cesium.JulianDate.fromDate(points[i][0]); | |
var position = Cesium.Cartesian3.fromElements(points[i][1], points[i][2], points[i][3]); | |
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, 0.03); | |
var position = computeFlightFromArray(); | |
//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.gltf', | |
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 : 5, | |
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