Skip to content

Instantly share code, notes, and snippets.

@nicopace
Created March 27, 2017 20:41
Show Gist options
  • Save nicopace/748fb22b76af85188bf1671716617d59 to your computer and use it in GitHub Desktop.
Save nicopace/748fb22b76af85188bf1671716617d59 to your computer and use it in GitHub Desktop.
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