hugging terrain with the camera

I'm trying to fly to a coordinate and view the eastern or western horizons in 3D from near ground level. In Google Earth API this was accomplished by using the following line of code:

      var ground_offset = 1.6; //average height of person

    var east_view = 90;
    var west_view = 270;
    var tilt = 90;
    ground_offset = 1.6; //average height of person

      var lookAt = ge.createLookAt('');
      lookAt.set(latitude, longitude, ground_offset,
                  ge.ALTITUDE_RELATIVE_TO_GROUND, east_view, tilt, altitude_of_ground);

However, in Cesium, the camera is usually too high, implying that the height I retrieved was not correct. Where am I going wrong?

The following is an example of the code I'm using in Cesium (in real life, the latitude and longitude are inserted in real time using php):

        var viewer = new Cesium.Viewer('cesiumContainer', {
            fullscreenElement: 'previewContent'
        var scene = viewer.scene;
        var globe = scene.globe;
        globe.depthTestAgainstTerrain = true;
        var cesiumTerrainProviderMeshes = new Cesium.CesiumTerrainProvider({
            url : '//'
        viewer.terrainProvider = cesiumTerrainProviderMeshes;

  var Azimuth = 90.0; //East = 90.0. West = 270.0
  var PitchAngle = 0.0;
  var RollAngle = 0.0;
    var longitude = -74.209701;
  var latitude = 40.082129;

  // Query the terrain height of the Cartographic position
  var terrainProvider = new Cesium.CesiumTerrainProvider({
      url : ‘
  var positions = [
      Cesium.Cartographic.fromDegrees(longitude, latitude),
  var promise = Cesium.sampleTerrain(terrainProvider, 11, positions);
  Cesium.when(promise, function(updatedPositions) {

       var Fudge = 1.6; //average height of person
            var height = positions[0].height + Fudge;
      var camera =;
      var camera =;

     destination : Cesium.Cartesian3.fromDegrees(longitude, latitude, height),
    orientation: {
        heading : Cesium.Math.toRadians(Azimuth),
        pitch : Cesium.Math.toRadians(PitchAngle),
        roll : Cesium.Math.toRadians(RollAngle)


The code example you posted seemed like it worked to me. The only difference I can think of is that you sampled the terrain at too high of a level of detail.

In the Cesium 1.30 release, we added a new function called sampleTerrainMostDetailed that should help. It will automatically find the most detailed level of terrain at the position you provide.

Cesium 1.30 will be released tomorrow.