Created
March 27, 2017 20:41
-
-
Save nicopace/748fb22b76af85188bf1671716617d59 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 positionOrigin = { | |
lon: -64.4145, | |
lat: -31.8063, | |
height: 2000000 | |
}; | |
var positionDestination = { | |
lon: -64.4146, | |
lat: -31.8063, | |
height: 200 | |
}; | |
var movementSpeed = 20; | |
// ************************************************ | |
var viewer = new Cesium.Viewer('cesiumContainer', { | |
vrButton: false, | |
geocoder: false, | |
homeButton: false, | |
infoBox: false, | |
timeline: false, | |
selectionIndicator: false, | |
navigationHelpButton: false | |
}); | |
var scene = viewer.scene; | |
var clock = viewer.clock; | |
function flyFromOriginToDestination() { | |
- Sandcastle.declare(flyFromOriginToDestination); | |
viewer.camera.flyTo({ | |
destination : Cesium.Cartesian3.fromDegrees( | |
positionOrigin.lat, positionOrigin.lon, positionOrigin.height | |
), | |
duration: 0 | |
}); | |
viewer.camera.flyTo({ | |
destination : Cesium.Cartesian3.fromDegrees( | |
positionDestination.lat, positionDestination.lon, positionDestination.height | |
), | |
duration: movementSpeed | |
}); | |
} | |
function flyToDestination() { | |
Sandcastle.declare(flyToDestination); | |
viewer.camera.flyTo({ | |
destination : Cesium.Cartesian3.fromDegrees( | |
positionDestination.lat, positionDestination.lon, 2500.0 | |
), | |
duration: movementSpeed | |
}); | |
} | |
function flyToHeadingPitchRoll() { | |
Sandcastle.declare(flyToHeadingPitchRoll); | |
viewer.camera.flyTo({ | |
destination : Cesium.Cartesian3.fromDegrees(-122.22, 46.12, 5000.0), | |
orientation : { | |
heading : Cesium.Math.toRadians(20.0), | |
pitch : Cesium.Math.toRadians(-35.0), | |
roll : 0.0 | |
} | |
}); | |
} | |
function flyToLocation() { | |
Sandcastle.declare(flyToLocation); | |
// Create callback for browser's geolocation | |
function fly(position) { | |
viewer.camera.flyTo({ | |
destination : Cesium.Cartesian3.fromDegrees(position.coords.longitude, position.coords.latitude, 1000.0) | |
}); | |
} | |
// Ask browser for location, and fly there. | |
navigator.geolocation.getCurrentPosition(fly); | |
} | |
function viewRectangle() { | |
Sandcastle.declare(viewRectangle); | |
var west = -77.0; | |
var south = 38.0; | |
var east = -72.0; | |
var north = 42.0; | |
var rectangle = Cesium.Rectangle.fromDegrees(west, south, east, north); | |
viewer.camera.setView({ | |
destination: rectangle | |
}); | |
// Show the rectangle. Not required; just for show. | |
viewer.entities.add({ | |
rectangle : { | |
coordinates : rectangle, | |
fill : false, | |
outline : true, | |
outlineColor : Cesium.Color.WHITE | |
} | |
}); | |
} | |
function flyToRectangle() { | |
Sandcastle.declare(flyToRectangle); | |
var west = -90.0; | |
var south = 38.0; | |
var east = -87.0; | |
var north = 40.0; | |
var rectangle = Cesium.Rectangle.fromDegrees(west, south, east, north); | |
viewer.camera.flyTo({ | |
destination : rectangle | |
}); | |
// Show the rectangle. Not required; just for show. | |
viewer.entities.add({ | |
rectangle : { | |
coordinates : rectangle, | |
fill : false, | |
outline : true, | |
outlineColor : Cesium.Color.WHITE | |
} | |
}); | |
} | |
function setReferenceFrame() { | |
Sandcastle.declare(setReferenceFrame); | |
var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); | |
var transform = Cesium.Transforms.eastNorthUpToFixedFrame(center); | |
// View in east-north-up frame | |
var camera = viewer.camera; | |
camera.constrainedAxis = Cesium.Cartesian3.UNIT_Z; | |
camera.lookAtTransform(transform, new Cesium.Cartesian3(-120000.0, -120000.0, 120000.0)); | |
// Show reference frame. Not required. | |
scene.primitives.add(new Cesium.DebugModelMatrixPrimitive({ | |
modelMatrix : transform, | |
length : 100000.0 | |
})); | |
} | |
function setHeadingPitchRoll() { | |
Sandcastle.declare(setHeadingPitchRoll); | |
var camera = viewer.camera; | |
camera.setView({ | |
destination : Cesium.Cartesian3.fromDegrees(-75.5847, 40.0397, 1000.0), | |
orientation: { | |
heading : -Cesium.Math.PI_OVER_TWO, | |
pitch : -Cesium.Math.PI_OVER_FOUR, | |
roll : 0.0 | |
} | |
}); | |
} | |
function icrf(scene, time) { | |
if (scene.mode !== Cesium.SceneMode.SCENE3D) { | |
return; | |
} | |
var icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time); | |
if (Cesium.defined(icrfToFixed)) { | |
var camera = viewer.camera; | |
var offset = Cesium.Cartesian3.clone(camera.position); | |
var transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed); | |
camera.lookAtTransform(transform, offset); | |
} | |
} | |
function viewInICRF() { | |
Sandcastle.declare(viewInICRF); | |
viewer.camera.flyHome(0); | |
clock.multiplier = 3 * 60 * 60; | |
scene.preRender.addEventListener(icrf); | |
scene.globe.enableLighting = true; | |
} | |
var viewChanged = document.getElementById('viewChanged'); | |
var removeStart; | |
var removeEnd; | |
function cameraEvents() { | |
Sandcastle.declare(cameraEvents); | |
var camera = viewer.camera; | |
removeStart = camera.moveStart.addEventListener(function() { | |
viewChanged.style.display = 'block'; | |
}); | |
removeEnd = camera.moveEnd.addEventListener(function() { | |
viewChanged.style.display = 'none'; | |
}); | |
} | |
var cameraChanged = document.getElementById('cameraChanged'); | |
var removeChanged; | |
function cameraChanges() { | |
Sandcastle.declare(cameraChanges); | |
var i = 0; | |
removeChanged = viewer.camera.changed.addEventListener(function(percentage) { | |
++i; | |
cameraChanged.innerText = 'Camera Changed: ' + i + ', ' + percentage.toFixed(6); | |
cameraChanged.style.display = 'block'; | |
}); | |
} | |
function flyInACity() { | |
Sandcastle.declare(flyInACity); | |
var camera = scene.camera; | |
camera.flyTo({ | |
destination : Cesium.Cartesian3.fromDegrees(-73.98580932617188, 40.74843406689482, 363.34038727246224), | |
complete : function() { | |
setTimeout(function() { | |
camera.flyTo({ | |
destination : Cesium.Cartesian3.fromDegrees(-73.98585975679403, 40.75759944127251, 186.50838555841779), | |
orientation : { | |
heading : Cesium.Math.toRadians(200.0), | |
pitch : Cesium.Math.toRadians(-50.0) | |
}, | |
easingFunction : Cesium.EasingFunction.LINEAR_NONE | |
}); | |
}, 1000); | |
} | |
}); | |
} | |
Sandcastle.addToolbarMenu([{ | |
text : 'Camera Options' | |
}, { | |
text : 'Fly in a city', | |
onselect : function() { | |
flyInACity(); | |
Sandcastle.highlight(flyInACity); | |
} | |
}, { | |
text : 'Fly to Destination', | |
onselect : function() { | |
flyToDestination(); | |
Sandcastle.highlight(flyToDestination); | |
} | |
}, { | |
text : 'Fly from Orgin to Destination', | |
onselect : function() { | |
flyFromOriginToDestination(); | |
Sandcastle.highlight(flyFromOriginToDestination); | |
} | |
}, { | |
text : 'Fly to Location with heading, pitch and roll', | |
onselect : function() { | |
flyToHeadingPitchRoll(); | |
Sandcastle.highlight(flyToHeadingPitchRoll); | |
} | |
}, { | |
text : 'Fly to My Location', | |
onselect : function() { | |
flyToLocation(); | |
Sandcastle.highlight(flyToLocation); | |
} | |
}, { | |
text : 'Fly to Rectangle', | |
onselect : function() { | |
flyToRectangle(); | |
Sandcastle.highlight(flyToRectangle); | |
} | |
}, { | |
text : 'View a Rectangle', | |
onselect : function() { | |
viewRectangle(); | |
Sandcastle.highlight(viewRectangle); | |
} | |
}, { | |
text : 'Set camera reference frame', | |
onselect : function() { | |
setReferenceFrame(); | |
Sandcastle.highlight(setReferenceFrame); | |
} | |
}, { | |
text : 'Set camera with heading, pitch, and roll', | |
onselect : function() { | |
setHeadingPitchRoll(); | |
Sandcastle.highlight(setHeadingPitchRoll); | |
} | |
}, { | |
text : 'View in ICRF', | |
onselect : function() { | |
viewInICRF(); | |
Sandcastle.highlight(viewInICRF); | |
} | |
}, { | |
text : 'Move events', | |
onselect : function() { | |
cameraEvents(); | |
Sandcastle.highlight(cameraEvents); | |
} | |
}, { | |
text : 'Camera changed event', | |
onselect : function() { | |
cameraChanges(); | |
Sandcastle.highlight(cameraChanges); | |
} | |
}]); | |
Sandcastle.reset = function() { | |
scene.completeMorph(); | |
viewer.entities.removeAll(); | |
scene.primitives.removeAll(); | |
scene.tweens.removeAll(); | |
if (Cesium.defined(removeStart)) { | |
removeStart(); | |
removeEnd(); | |
viewChanged.style.display = 'none'; | |
removeStart = undefined; | |
removeEnd = undefined; | |
} | |
if (Cesium.defined(removeChanged)) { | |
removeChanged(); | |
removeChanged = undefined; | |
cameraChanged.style.display = 'none'; | |
} | |
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); | |
clock.multiplier = 1.0; | |
scene.preRender.removeEventListener(icrf); | |
scene.globe.enableLighting = false; | |
}; | |
scene.morphComplete.addEventListener(function() { | |
Sandcastle.reset(); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment