获取地面高度 CesiumJS
Get ground altitude CesiumJS
在CesiumJS中有什么方法可以获得给定位置的地面高度吗?我试过 scene.globe.getHeight func 但它 returns 未定义。
//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
谢谢。
您应该为此使用 sampleTerrain
。这是一个例子:
// 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);
});
这是备选方案:
var marker = new Cesium.Cartesian3.fromDegrees(lon, lat, 0);
markers.push(marker);
var cartographicPositions =
Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(markers);
var HeightCheck = setInterval(function () {
if (cesiumTerrainProviderHeightmaps.ready) {
clearInterval(HeightCheck);
var promise = Cesium.sampleTerrain(
cesiumTerrainProviderHeightmaps,
11,
cartographicPositions
);
Cesium.when(promise, function (cartographicPositions) {
// you got the altitudes
});
} else {
// "Waiting for height data of terrain...."
}
}, 1000);
在CesiumJS中有什么方法可以获得给定位置的地面高度吗?我试过 scene.globe.getHeight func 但它 returns 未定义。
//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
谢谢。
您应该为此使用 sampleTerrain
。这是一个例子:
// 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);
});
这是备选方案:
var marker = new Cesium.Cartesian3.fromDegrees(lon, lat, 0);
markers.push(marker);
var cartographicPositions =
Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(markers);
var HeightCheck = setInterval(function () {
if (cesiumTerrainProviderHeightmaps.ready) {
clearInterval(HeightCheck);
var promise = Cesium.sampleTerrain(
cesiumTerrainProviderHeightmaps,
11,
cartographicPositions
);
Cesium.when(promise, function (cartographicPositions) {
// you got the altitudes
});
} else {
// "Waiting for height data of terrain...."
}
}, 1000);