Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/

Cesium支持从几个标准服务绘制和添加高分辨率图像(地图)图层。图层可以按顺序排列,并混合在一起。每一层的亮度、对比度、伽玛、色调和饱和度可以动态地改变。本节教程介绍了图层的概念以及相关的Cesuim APIs。

快速入门

我们暂时忽略细节,直接编写代码来添加一些图像层。在Sandcastle中打开Hello World示例。此示例创建一个Viewer组件,默认情况下,该组件呈现Bing Maps图层。我们可以通过向Viewer构造函数提供附加参数来指定不同的基础图层。让我们使用来自Esri ArcGIS MapServer的图层:

var viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider : new Cesium.ArcGisMapServerImageryProvider({
url : '//services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer'
}),
baseLayerPicker : false
});

修改样例后,按F8来运行:

我们可以通过滑动鼠标滚轮放缩,来看到实际的图层流的变化。

接下来, 添加另一个图层: NASA Black Marble imagery 基于 Tile Map Service (TMS):

var layers = viewer.scene.imageryLayers;
var blackMarble = layers.addImageryProvider(new Cesium.createTileMapServiceImageryProvider({
url : '//cesiumjs.org/tilesets/imagery/blackmarble',
maximumLevel : 8,
credit : 'Black Marble imagery courtesy NASA Earth Observatory'
}));

因为黑色大理石层是最后加上的一层,覆盖了整个地球,所以黑色大理石图层覆盖了 Esri图层。我们可以把黑色大理石图层移到底部layers.lower(blackMarble);,但是为了让我们能更好地理解这两层之间的关系,让我们把它和Esri图层混合:

blackMarble.alpha = 0.5; // 0.0 is transparent.  1.0 is opaque.

下一步,调高灯光的亮度:

blackMarble.brightness = 2.0; // > 1.0 increases brightness.  < 1.0 decreases.

最后,添加一个单独的图像作为第三层作为特定的扩展。

layers.addImageryProvider(new Cesium.SingleTileImageryProvider({
url : '../images/Cesium_Logo_overlay.png',
rectangle : Cesium.Rectangle.fromDegrees(-75.0, 28.0, -67.0, 29.75)
}));

完整代码如下:

var viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider : new Cesium.ArcGisMapServerImageryProvider({
url : '//services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer'
}),
baseLayerPicker : false
}); var layers = viewer.scene.imageryLayers;
var blackMarble = layers.addImageryProvider(new Cesium.createTileMapServiceImageryProvider({
url : '//cesiumjs.org/tilesets/imagery/blackmarble',
maximumLevel : 8,
credit : 'Black Marble imagery courtesy NASA Earth Observatory'
})); blackMarble.alpha = 0.5; // 0.0 is transparent. 1.0 is opaque. blackMarble.brightness = 2.0; // > 1.0 increases brightness. < 1.0 decreases. layers.addImageryProvider(new Cesium.SingleTileImageryProvider({
url : '../images/Cesium_Logo_overlay.png',
rectangle : Cesium.Rectangle.fromDegrees(-75.0, 28.0, -67.0, 29.75)
}));

在Sandcastle中查看完整样例

现有的图层

ion Assets tab in Sandcastle包含由Cesiumion托管的图层应用,可以在Cesium的应用中添加几行代码来使用图层服务。

ImageryProvider

上面使用的前两层这样的高分辨率图像太大,无法放入内存,甚至无法放入单个磁盘,因此图像被划分为较小的图像,称为tiles(瓦片),可以根据视图将图像流传输到客户端。Cesium支持使用ImageryProvider请求瓦片图的几种标准。大多数ImageryProvider使用HTTP上的REST接口来请求瓦片图。ImageryProvider根据请求的格式和组织方式的不同而不同。Cesium内置以下ImageryProvider:

我们可以通过实现ImageryProvider接口来访问其他图层服务。如果你这样做,并认为它是普遍有用的,请贡献给Cesium为每个人的利益。

查看参考文档以了解如何构建特定的imagery provider。我们可以查看SingleTileImageryProvider因为很多imagery providers共享它的构造属性:

  • url -图像的url。像许多imagery provider,这是惟一需要的属性。在其他imagery providers中,这个url指向服务器或服务的根url。
  • extent - 可选参数,图像应该覆盖的经纬度矩形。默认情况是覆盖整个地球。
  • credit - 可选参数,数据源的字符证书, 将显示到canvas上。 一些imagery providers, 比如 BingMapsImageryProviderArcGIS Server REST API, 可以直接从他们的服务获取字符证书或logo。
  • proxy - 可选参数,用于请求服务的代理,可以带给我们跨域共享资源。

跨域资源共享

基于安全考量,今天的Web浏览器会努力防止Javascript代码读取来自不同站点的图像像素。特别是,如果像Cesium这样的WebGL应用程序,访问来自不同的主机名或端口,并且服务器不显式地允许以这种方式使用图像,则禁止将图像用作纹理。服务器指示图像不包含机密信息,因此通过在HTTP响应中包括跨源资源共享(CORS)头部,其他站点读取它们的像素是安全的。

不幸的是,并非所有的图像服务都支持CORS。对于那些不是,必须使用与托管Cesium的网站同源的代理服务器。当使用这种代理时,对于Web浏览器和Cesium客户机来说,tile就好像它们来自与基于Cesium的网站相同的起源一样。若要与图像提供程序一起使用代理,请在构造图像提供程序时使用代理属性。Cesium包含一个用Node.js编写的用于开发的简单代理。

layers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
url : '//server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer',
proxy : new Cesium.DefaultProxy('/proxy/')
}));

如果您正在托管公共图层,我们鼓励启用本文所述的CORS,而不是使用代理。

ImageryProvider与图层

到目前为止,我们还没有明确区分ImageryProvider和图层。ImageryProvider使用特定服务请求图层,而图层表示来自ImageryProvider的显示图层。代码如下:

var layer = layers.addImageryProvider(imageryProvider);

是下列代码的简写

var layer = new ImageryLayer(imageryProvider);
layers.add(layer);

我们通常构造一个imagery provider仅用于创建一个图层,然后我们利用他的属性,例如show, alpha, brightnesscontrast。参见ImageryLayer。将imagery provider和图层解耦使得添加新的imagery provider变得容易。

像上面例子中的layers一样,图层集合确定绘制层的顺序。根据添加的顺序从下到上绘制图层。像Cesium中任何其他集合一样,使用addremoveget等函数对图层集合进行操作。此外,可以使用raiseraiseToToplowerlowerToBottom对层进行重新排序。参见ImageryLayerCollection

资源

可以从Sandcastle中获得imagery layers:

另外可以获得参考文档:

Cesium中文网交流QQ群:807482793

Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/

Cesium中级教程2 - 图层的更多相关文章

  1. Cesium中级教程10 - CesiumJS and webpack

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ webpack是打包JavaScript模块流行且强大的工具.它 ...

  2. Cesium中级教程5 - Terrain 地形

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ CesiumJS支持对与水流相关的海洋.湖泊和河流以及全球高分辨 ...

  3. Cesium中级教程6 - 3D Models 三维模型

    3D Models 三维模型 本教程将教您如何通过Primitive API转换.加载和使用Cesium中的三维模型.如果你是Cesium的新用户,可能需要阅读三维模型部分的(空间数据可视化教程)[h ...

  4. Cesium中级教程9 - Advanced Particle System Effects 高级粒子系统效应

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 要了解粒子系统的基础知识,请参见粒子系统入门教程. Weathe ...

  5. Cesium中级教程8 - Introduction to Particle Systems 粒子系统入门

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ What is a particle system? 什么是粒子 ...

  6. Cesium中级教程7 - Geometry and Appearances 几何图形和外观

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 本教程将向您介绍提供使用Primitive API的几何图形和外 ...

  7. Cesium中级教程4 - 空间数据可视化(二)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Viewer中的Entity功能 让我们看看Viewer为操作e ...

  8. Cesium中级教程1 - 空间数据可视化(一)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 本教程将教读者如何使用Cesium的实体(Entity)API绘 ...

  9. Cesium中级教程3 - Camera - 相机(摄像机)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Camera CesiumJS中的Camera控制场景的视图.有 ...

随机推荐

  1. Python3 day6面向对象

    http://www.cnblogs.com/alex3714/articles/5188179.html ====================生活中==================== 世界 ...

  2. git 生成ssh

  3. std::function介绍 -转载

    类模版std::function是一种通用.多态的函数封装.std::function的实例可以对任何可以调用的目标实体进行存储.复制.和调用操作,这些目标实体包括普通函数.Lambda表达式.函数指 ...

  4. nim_duilib之virtualListbox用法(22)

    概述 本文将介绍virtualListbox的用法. 更多请参考源码. 一个样式 样式丑了点,勿喷. 重写函数 使用virtualListbox, 需要一个派生类(继承自基类VirtualListIn ...

  5. 【LeetCode】556. Next Greater Element III 解题报告(Python)

    [LeetCode]556. Next Greater Element III 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人 ...

  6. 【LeetCode】199. Binary Tree Right Side View 解题报告(Python)

    [LeetCode]199. Binary Tree Right Side View 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/probl ...

  7. 3942 - Remember the Word

    3942 - Remember the Word 思路:字典树+dp dp[i]前i个字符,能由给的字串组成的方案数,那么dp[i] = sum(dp[i-k]);那么只要只要在字典树中查看是否有字串 ...

  8. Linux Cgroups详解(一)

    [转载]http://blog.chinaunix.net/uid-23253303-id-3999432.html Cgroups是什么? Cgroups是control groups的缩写,是Li ...

  9. [Box] Robust Training and Initialization of Deep Neural Networks: An Adaptive Basis Viewpoint

    目录 概 主要内容 LSGD Box 初始化 Box for Resnet 代码 Cyr E C, Gulian M, Patel R G, et al. Robust Training and In ...

  10. Linux学习笔记-韩顺平

    这是我学习哔哩哔哩UP主韩顺平的2021韩顺平图解Linux课程的学习笔记. 课程地址:2021韩顺平图解Linux课程 Linux基础篇-Linux目录结构 基本介绍 linux 的文件系统是采用级 ...