Cesium获取点位在地形上的高度

该代码段展示了如何使用CesiumJavaScript库获取相机位置在地形上的精确高度,并结合地形提供者来调整飞行视图的高度。通过Cartographic对象和Cesium.terrainProvider的sampleTerrainMostDetailed方法,可以获取到详细的地形高度信息。
摘要由CSDN通过智能技术生成

这里写自定义目录标题

Cesium获取点位在地形上的高度

var position = Cesium.Cartographic.fromCartesian(Viewer.scene.camera.position);
var height = Viewer.scene.globe.getHeight(position);
// height = height ? (height + 2) : 15;
if (Viewer.terrainProvider) {
  //获取地形高度
  //x为longtitude,y为latitude,terrain是地形privider
  let cartographic = Cesium.Cartographic.fromCartesian(Viewer.scene.camera.position);
  let longitude = Cesium.Math.toDegrees(cartographic.longitude);
  let latitude = Cesium.Math.toDegrees(cartographic.latitude);
  let positions = [
    Cesium.Cartographic.fromDegrees(longitude, latitude),
  ];
  let promise = Cesium.sampleTerrainMostDetailed(Viewer.terrainProvider, positions);
  Cesium.when(promise, function (updatedPositions) {
    let terrainHeight = updatedPositions[0].height
    console.log(terrainHeight,Viewer.scene.camera.heading,Viewer.scene.camera.pitch);
    height = terrainHeight + 20;
    Viewer.scene.camera.flyTo({
      destination: new Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(position.longitude),Cesium.Math.toDegrees(position.latitude),height),
      orientation: {
        heading : Viewer.scene.camera.heading,
        pitch : 0.01,//Viewer.scene.camera.pitch, 平视的视角
        roll : 0.0
      }
    });
  });
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Cesium中拉高已加载的地形高度,你可以使用Cesium的SampledHeightProperty API来监听高度变化,并更新地形高度。以下是实现拉高地形高度的步骤: 1. 加载地形数据 使用Cesium的TerrainProvider API加载地形数据。Cesium支持多种地形数据源,例如STK World Terrain、Cesium Terrain、Mapbox Terrain等。你可以根据自己的需求选择相应的数据源。 ``` var viewer = new Cesium.Viewer('cesiumContainer'); var terrainProvider = new Cesium.CesiumTerrainProvider({ url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles' }); viewer.terrainProvider = terrainProvider; ``` 2. 监听高度变化 使用Cesium的SampledHeightProperty API监听高度变化。你可以在地形高度变化时更新地形高度。 ``` var heightProperty = new Cesium.SampledHeightProperty(); heightProperty.addSample(viewer.clock.currentTime, 0); // 初始高度为0 viewer.clock.onTick.addEventListener(function(clock) { var time = clock.currentTime; var height = Math.sin(time.secondsOfDay) * 100; // 模拟高度变化 heightProperty.addSample(time, height); }); viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles', requestVertexNormals: true, requestWaterMask: true, hasVertexNormals: function() { return true; }, hasWaterMask: function() { return true; }, modifyShader: function(shader) { var regex = /terrain\.height\s*[\+\-]\s*(\d+\.?\d*)/g; var result = regex.exec(shader); if (result !== null) { var heightOffset = 'terrain.height + ' + heightProperty.getSample(viewer.clock.currentTime).height.toFixed(2); shader = shader.replace(regex, heightOffset); } return shader; } }); ``` 3. 修改地形着色器 使用Cesium的TerrainProvider API的modifyShader方法修改地形着色器,将地形高度替换为监听的高度。你可以在modifyShader方法中使用正则表达式匹配着色器代码,并将地形高度替换为监听的高度。 ``` modifyShader: function(shader) { var regex = /terrain\.height\s*[\+\-]\s*(\d+\.?\d*)/g; var result = regex.exec(shader); if (result !== null) { var heightOffset = 'terrain.height + ' + heightProperty.getSample(viewer.clock.currentTime).height.toFixed(2); shader = shader.replace(regex, heightOffset); } return shader; } ``` 这样,在地形数据加载完成后,地形就会被拉高到指定高度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值