Cesium中文教程-地形(Terrain)

目录

快速开始(Quick start)

使用地形照明和水特效(Enabling Terrain Lighting and Water Effects)

现有的地形(Ready-to-use terrain)

地形提供商(Terrain providers)

资源(Resources)


Cesium支持可视化全球高分辨率地形和动态化海洋、湖泊和河流水的影响。山顶和山谷及其它地形特征可以真实展示3D地球,这比2D地图更有优势。

地形数据集非常巨大,通常总计有千兆字节或兆兆字节。使用低分辨率图形API或普通的3D引擎来有效可视化地形涉及到相当多的工作。庆幸的是,Cesium已经完成了大量的工作,所以我们仅仅需要几行代码。

快速开始(Quick start)

让我们以示例开始,打开沙堡中的Hello World示例。默认情况下,地球使用的WGS84 ellipsoid。为了添加托管在Cesium ion中的Cesium World地形,增加下面的代码(在var viewer = ...):

viewer.terrainProvider = Cesium.createWorldTerrain();  
 

修改这个示例后,按F8运行,放大山区,并按住鼠标中间按钮拖动到水平视角,感受一下地形。可以看到珠穆朗玛峰:

Cesium中文教程-地形(Terrain)_第1张图片

当我们拉近的时候,Cesium根据地球上那些地方是可见的及它们距离地球有多远,来请求更高分辨率的地形。

地形和影像是分开处理的,上面示例中,默认的影像覆盖在地形上。任何影像提供商都可以与任何地形提供商一起使用,查看影像图层教程(Imagery Layers Tutorial)的管理影像。

使用地形照明和水特效(Enabling Terrain Lighting and Water Effects)

Cesium世界地形也包括地形照明数据以及水特效所需的海岸线数据。地形数据服务器在传输地形瓦片时不会带有照明或海岸线数据。在创建CesiumTerrainProvider时,我们必须请求地形照明或海岸线数据。

为了启用地形照明,从地形服务器请求顶点法线延伸(VertexNormals extension),并在地球上使用照明。

var terrainProvider = Cesium.createWorldTerrain({  
    requestVertexNormals: true  
});  
viewer.terrainProvider = terrainProvider;  
viewer.scene.globe.enableLighting = true;  

与上面珠穆朗玛峰相同的视角,但现在,根据太阳的位置,地形被遮挡了。

Cesium中文教程-地形(Terrain)_第2张图片

水特效以相同的方式实现。为了使用水特效,我们可以像下面这样,从地形服务器请求WaterMask extension:

var terrainProvider = Cesium.createWorldTerrain({  
    requestWaterMask: true  
});  
viewer.terrainProvider = terrainProvider;  

放大到有水的地方,例如旧金山湾:

Cesium中文教程-地形(Terrain)_第3张图片

随时间波动的波浪,明亮的太阳和月亮的反射光。

在sandcastle中查看地形实例,探寻一些有趣的地形和水域区域。

现有的地形(Ready-to-use terrain)

Cesium World Terrain可以在你自己的Cesium应用程序中使用,只需要添加几行代码就可以。

地形提供商(Terrain providers)

Cesium支持几种请求地形数据提供商数据的方式。大多数地形提供商使用HTTP上的REST接口来请求地形瓦片作为高度映射。根据请求的格式和地形数据的组织方式,地形数据提供商会有所不同。Cesium有以下地形提供商:

  • Cesium World Terrain-高分辨世界范围地形,通过扩展支持地形灯光和水域特效。使用开放的运行时格式-quantized-mesh v1.0(量化网格)来传递地形瓦片。在Cesium中查看CesiumTerrainProvider;
  • Google Earth Enterprise-从高程图生成地形。查看GoogleEarthEnterpriseTerrainProvider;
  • VT MAK VR-TheWorld Server-从VR-TheWorld Server请求的高程地图生成地形。他们的托管服务器有全球范围的90米分辨率地形数据,包括测深数据。查看VRTheWorldTerrainProvider;
  • 椭球(Ellipsoid)-程序创建一个椭球的光滑表面。这缺乏真实的地形外表,但不需要从服务器请求数据,却对于例如空间的一些应用很有用。查看EllipsoidTerrainProvider。

通过实现地形提供商的接口(TerrainProvider),我们可以使用其它地形服务。如果这样做,认为是有普遍用途的话,为了大家共同的利益请贡献给Cesium。

正如上文所说,为了使用地形提供商的数据,我们创建并通过设置Viewer.terrainProvider来分配它。地形提供商的建立与影像提供商(imagery providers)一样,一般包括地形服务的url和一个可选代理(如果服务器不支持跨域资源共享(CORS))。

一些地形提供商,像CesiumTerrainProvider,包含水域特效需要的海岸线数据。通过改变法线图,其常使用CentralBody.oceanNormalMapUrl创建波浪,来定制水。更改影像提供商还会影像水的外观,这是因为水的颜色与底层影像是混合在一起的。

资源(Resources)

Checkout 沙堡中的地形示例(terrain example)和所有地形提供商(all terrain providers)的参考文档。

你可能感兴趣的:(Cesium中文教程,Cesium中文教程,javascript)