Search code examples
cesiumjs

Get ground altitude CesiumJS


Is there any way to get ground altitude for a given position in CesiumJS? I tried scene.globe.getHeight func but it returns undefined.

    //marker is a point on map.
var marker = {latitude: 61.08658108795938, longitude: -99.64592791446208};
var height = scene.globe.getHeight( new Cesium.Cartographic(marker.longitude, marker.latitude ) );//undefined

Thank you.


Solution

  • You should use sampleTerrain for this. Here's an example:

    // Construct the default list of terrain sources.
    var terrainModels = Cesium.createDefaultTerrainProviderViewModels();
    
    // Construct the viewer, with a high-res terrain source pre-selected.
    var viewer = new Cesium.Viewer('cesiumContainer', {
        terrainProviderViewModels: terrainModels,
        selectedTerrainProviderViewModel: terrainModels[1]  // Select STK High-res terrain
    });
    
    // Get a reference to the ellipsoid, with terrain on it.  (This API may change soon)
    var ellipsoid = viewer.scene.globe.ellipsoid;
    
    // Specify our point of interest.
    var pointOfInterest = Cesium.Cartographic.fromDegrees(
        -99.64592791446208, 61.08658108795938, 5000, new Cesium.Cartographic());
    
    // [OPTIONAL] Fly the camera there, to see if we got the right point.
    viewer.camera.flyTo({
        destination: ellipsoid.cartographicToCartesian(pointOfInterest,
            new Cesium.Cartesian3())
    });
    
    // Sample the terrain (async) and write the answer to the console.
    Cesium.sampleTerrain(viewer.terrainProvider, 9, [pointOfInterest])
    .then(function(samples) {
        console.log('Height in meters is: ' + samples[0].height);
    });