cesium获取地形高度实现地形贴地有多种方法:

  • sampleTerrain:获取不是很精确的地形高度
  • sampleTerrainMostDetailed:获取非常精确的地形高度
    这两种方法使用的高度是cartographic。

通过sampleTerrainMostDetailed获取地形高度

sampleTerrainMostDetailed(terrainProvider, positions) → Promise.<Array.<Cartographic>>

terrainProvider的类型是TerrainProvider,positions是一个位置的数组,返回的是一个promise,是一个位置数组,位置具有高程值,即updatedPositions。

// Query the terrain height of two Cartographic positions
var terrainProvider = Cesium.createWorldTerrain();
var positions = [Cesium.Cartographic.fromDegrees(86.925145, 27.988257),Cesium.Cartographic.fromDegrees(87.0, 28.0)
];
var promise = Cesium.sampleTerrainMostDetailed(terrainProvider, positions);
Cesium.when(promise, function(updatedPositions) {// positions[0].height and positions[1].height have been updated.// updatedPositions is just a reference to positions.
});

lookAt的使用可以点击lookAt

 function() {var length = 1000;var startLon = Cesium.Math.toRadians(86.953793);var endLon = Cesium.Math.toRadians(86.896497);var lat = Cesium.Math.toRadians(27.988257);var terrainSamplePositions = [];for (var i = 0; i < length; ++i) {var lon = Cesium.Math.lerp(endLon, startLon, i / (length - 1));var position = new Cesium.Cartographic(lon, lat);terrainSamplePositions.push(position);}Cesium.when(Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, terrainSamplePositions), function(samples) {var offset = 10.0;for (var i = 0; i < samples.length; ++i) {samples[i].height += offset;}viewer.entities.add({polyline : {positions : Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(samples),followSurface : false,width : 5,material : new Cesium.PolylineOutlineMaterialProperty({color : Cesium.Color.ORANGE,outlineWidth : 2,outlineColor : Cesium.Color.BLACK}),depthFailMaterial : new Cesium.PolylineOutlineMaterialProperty({color : Cesium.Color.RED,outlineWidth : 2,outlineColor : Cesium.Color.BLACK})}});var target = new Cesium.Cartesian3(300770.50872389384, 5634912.131394585, 2978152.2865545116);offset = new Cesium.Cartesian3(6344.974098678562, -793.3419798081741, 2499.9508860763162);viewer.camera.lookAt(target, offset);viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);});
}

步骤:

  • 新建一个位置数组terrainSamplePositions ,用于存放轨迹路径的position
  • 使用cesium.when(promise,[callback])来获取地形高度并进行下一步操作,比如将地形数据赋值到一个geometry上。

var promise = Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, terrainSamplePositions);
Cesium.when(promise, function (samples) {

});

除了以上两种方法,还有clampToGround获取地形高度:

var options = {camera : viewer.scene.camera,canvas : viewer.scene.canvas,clampToGround: true //开启贴地};viewer.camera.flyHome(0);var a = viewer.dataSources.add(Cesium.KmlDataSource.load('../data/kml/test_geojson_test.kml', options));a.then( viewer.flyTo(a));a.then(function(dataSource) {var entities = dataSource.entities.values;for (var i = 0; i < entities.length; i++) {var entity = entities[i];// 设置每个entity的样式entity.billboard.disableDepthTestDistance = Number.POSITIVE_INFINITY; //去掉地形遮挡entity.billboard.color = Cesium.Color.WHITE;entity.billboard.image = '../data/kml/img.jpg';}});

cesium中级(二)获取地形高度相关推荐

  1. Cesium 根据经纬度获取地形高程

    标题 Cesium 根据经纬度获取地形高程 var positions = Cesium.Cartographic.fromDegrees(lon, lat); Cesium.when(new Ces ...

  2. cesium获取模型高度_Cesium专栏-空间分析之剖面分析(附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  3. 【React】手写虚拟滚动组件(二)可自动获取不定高度的虚拟滚动组件

    前言 上次那篇写的虚拟滚动后来使用发现在某些情况并不是特别好用,并且只支持固定高度.我看了下umihook的虚拟滚动,发现也不是很好用,它支持手动设定每个元素高度,但也不能支持不定高度,而且限定更多了 ...

  4. cesium实现二三维分屏地图同步效果

    文章目录 1.实现效果 2.实现方法 2.1实现思路 2.2具体代码 Cesium实战系列文章总目录: 传送门 1.实现效果 2.实现方法 实现方法与二维鹰眼地图类似,将二维地图与三维地图同步. 2. ...

  5. Cesium入门-2-增加地形

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 第一章:Vue3.0+Openlayers+Cesium创建二三维联动项目

    Vue3.0+Openlayers+Cesium创建二三维联动项目 简介 Vue项目创建 安装依赖 框架结构 地图加载 显示效果 结语 简介 大家好!从今天开始,我将分享我在GIS开发的过程中如何利用 ...

  7. cesium中级(一)使用渐变纹理

    官网实例 在渲染地形的时候,我们会使用渐变的纹理,来表示不同的地形高度,官网给出的实例为:Globe Material var viewer = new Cesium.Viewer('cesiumCo ...

  8. uniapp 获取页面高度及元素高度

    一.获取页面高度 通过uni.getSystemInfoSync()方法可以获取到系统信息,其中就包括了页面高度等信息. const { windowHeight } = uni.getSystemI ...

  9. 在html上js添加宽度,js 获取div高度并重新设置div高度与宽度

    js 获取div高度并重新设置div高度与宽度 js 获取div高度并重新设置div高度与宽度 var $=function(id) { return document.getElementById( ...

最新文章

  1. 二、深度学习数据增强方法汇总
  2. matlab 噪声检测,MATLAB应用在基于噪声检测的图像均值去噪法
  3. System.Insert - 插入字符串
  4. 把 分数化为循环小数 和 把循环小数化为分数 的方法
  5. 2012届华为校园招聘机试题
  6. php function split is deprecated,如何解决php Function split() is deprecated 的问题
  7. javascript构造函数继承
  8. 音视频技术开发周刊 | 158
  9. 活动目录组策略统一管理桌面
  10. No valid Qt version set. Set one in Tools/Options 问题(QT)
  11. 中国联通回应5G入网问题:尚未对公众客户开放
  12. 让UI设计显得魅力非凡,设计师少不了的渐变背景素材专辑,
  13. Pr 入门教程,如何倾斜移位效果?
  14. Java ArrayList 数组之间相互转换
  15. 【电路仿真】基于matlab Simulink四旋翼PID控制【含Matlab源码 454期】
  16. 实验9(延伸) 多元函数微分法及其应用
  17. linux 系统gbk字符集,linux 修改字符集gbk
  18. RealView® 编译工具 汇编器指南
  19. 微软认知服务的使用 – 漫画翻译
  20. 如何辨别数清冲突域和广播域

热门文章

  1. 关于final修饰的变量赋值的问题
  2. 逆变器阻抗扫描 扫频法 阻抗扫描 阻抗建模验证
  3. JRE和JDK有什么区别,我们为什么使用JDK?
  4. nvm alias default [版本]不生效解决办法
  5. 仿微信 QQ 图片选择器
  6. POJ - 4048 Chinese Repeating Crossbow 暴力枚举+线段香蕉?
  7. [C++][linux]C++实现类似C#AutoResetEvent或者win C++的SetEvent
  8. openssl加密与模拟CA签证和颁发
  9. ubuntu 安装 navicat
  10. gephi 使用简介汇总