文章中相关范例下载路径:https://yunpan.cn/cByQqkANWN7Pu 访问密码 823d

       Cesium中提供了多种ImageryProvider方式,来满足用户的实际需求,但作为天朝的一份子,可惜的是,看似很多,但最终的选择却又是捉襟见肘。如果是国内数据,个人认为天地图的不错,其他的地图都有偏移,但天地图的数据在国外有欠缺,假如你有一个模型数据或者地形数据,恰好是国外的某一个城市,比如马赛等,天地图就满足不了这种场景,而Bing的地图则面临Key,国内数据清晰度等问题,而Google的数据则有很多不确定性,所以,除非很难有一种影像服务来实现一种大而全的效果。这不是技术问题,在此提出,就看实际中智者见智了。

影像服务综述

我们回到Cesium的影像服务上,如下是Cesium中BaseLayerPicker控件提供的各类影像服务:

如上可以看到,主要是Bing、Mapbox以及OpenStreetMap,以及ESRI四家地图服务,包括影像,影像+注记以及矢量三种形式。个人而言,Bing的地图不错,算是大而全,但需要Key,感觉偶尔会抽风,Mapbox是我非常喜欢的一家公司,很文艺,但和OSM一样,访问速度欠佳,而ESRI偶尔会有访问权限的问题,也不太适合作为全球级别的影像服务。其他几个要么我没用过,要么感觉不走寻常路。一不小心全给否的节奏。

Cesium目前支持的影像服务类型有:

  • ArcGisMapServerImageryProvider
    支持ArcGIS Online和Server的相关服务
  • BingMapsImageryProvider
    Bing地图影像,可以指定mapStyle,详见BingMapsStyle类
  • createOpenStreetMapImageryProvider
    OSM影像服务,根据不同的url选择不同的风格
  • createTileMapServiceImageryProvider
    看文档是根据MapTiler规范,貌似是可以自己下载瓦片,发布服务,类似ArcGIS影像服务的过程
  • GoogleEarthImageryProvider
    企业级服务,没有用过
  • ImageryProvider
    基类,所有的影像服务最终都基于此类,如果你需要扩展新的Provider也会继承该类
  • MapboxImageryProvider
    Mapbox影像服务,根据mapId指定地图风格
  • SingleTileImageryProvider
    单张图片的影像服务,适合离线数据或对影像数据要求并不高的场景下
  • UrlTemplateImageryProvider
    指定url的format模版,方便用户实现自己的Provider,比如国内的高德,腾讯等影像服务,url都是一个固定的规范,都可以通过该Provider轻松实现。而OSM也是通过该类实现的。
  • WebMapServiceImageryProvider
    符合WMS规范的影像服务都可以通过该类封装,指定具体参数实现
  • WebMapTileServiceImageryProvider
    服务WMTS1.0.0规范的影像服务,都可以通过该类实现,比如国内的天地图
  • TileCoordinatesImageryProvider
    渲染每一个瓦片的围,方便调试
  • GridImageryProvider
    渲染每一个瓦片内部的格网,了解每个瓦片的精细度

创建影像服务

ArcGisMapServerImageryProvider

Cesium提供了ArcGisMapServerImageryProvider,可以方便的加载ArcGIS online和Server上的数据。

首先获取该影像服务的地址,下面以ESRI_Imagery_World_2D为例,WGS1984坐标系,全球范围,只需要指定url,就可以在Cesium下快速加载该服务。

备注:在不通过控件指定影像服务时,需要指定baseLayerPicker为false,否则会报错。

BingMapsImageryProvider

Cesium中提供了BingMapsImageryProvider。使用方式和ArcGIS一样简单,代码如下:

其中可以指定mapStyle,选择多种风格,目前Cesium中支持AERIAL、AERIAL_WITH_LABELS、ROAD、ORDNANCE_SURVEY、COLLINS_BART五种。

createOpenStreetMapImageryProvider

Cesium中提供了加载OpenStreetMap的Provider,代码如下:

另外,Cesium还提供了基于OSM的另外两个服务地址,可供加载:watercolortoner。在三维影像服务中,因为LOD的策略,可能会出现相邻的Tile中Z值不相同,大部分情况下不会导致问题,但有时候,可能相交处是文字,则可能会出现半个字的问题。因此,在三维中加载矢量的影像服务,还是有不少局限性的。

MapboxImageryProvider

Cesium提供了MapBox的加载方式,个人认为MapBox的地图非常清新,还是一个不错的选择。同时提供了mapbox.satellite、mapbox.streets、mapbox.streets-basic三种风格,代码如下:

SingleTileImageryProvider

如果你对影像数据没有过多要求,或者是在离线环境下,SingleTileImageryProvider应该能够满足你的需要,只需要一张本地的图片,就可以创建影像服务。代码如下:

url可以是相对该页面的相对路径,也可以是一个http的链接形式。因为该Provider仅支持经纬度投影,图片宽高比最好为2:1,否则会有拉伸。

  

  另外,我们还可以在这个Provider上多做一些文章,比如搞一张透明的图片,达到一些虚幻的效果,或者在近地面实现一种类似平面的浏览效果,毕竟2D和3D在相机,数据单位上是有区别的。

  比如隐藏地球主体后,叠加一些矢量面,突出主题.代码如下:

至此,Cesium中默认支持的影像服务,我们都有所涉及,并对最常用的这五类做了专门介绍和事例,下篇会基于Cesium提供的基类扩展Google,Baidu,天地图等影像服务,以及实际应用中的一些问题,比如多地图叠加,地图范围以及性能等。

Cesium应用篇:2影像服务(上)的更多相关文章

  1. 影像服务——加载CESIUM自带的影像服务

    1.加载arcgis数据——ArcGisMapServerImageryProvider var viewer = new Cesium.Viewer("cesiumDiv",{ ...

  2. Cesium应用篇:2影像服务(下)

    文章中相关范例下载路径:https://yunpan.cn/cByQqkANWN7Pu 访问密码 823d 上篇主要介绍了Cesium自带的影像Provider ,在本篇中,我们主要涉及到如何扩展这些 ...

  3. Cesium原理篇:5最长的一帧之影像

    如果把地球比做一个人,地形就相当于这个人的骨骼,而影像就相当于这个人的外表了.之前的几个系列,我们全面的介绍了Cesium的地形内容,详见: Cesium原理篇:1最长的一帧之渲染调度 Cesium原 ...

  4. Cesium原理篇:7最长的一帧之Entity(上)

    之前的最长的一帧系列,我们主要集中在地形和影像服务方面.简单说,之前我们都集中在地球是怎么造出来的,从这一系列开始,我们的目光从GLOBE上解放出来,看看球面上的地物是如何渲染的.本篇也是先开一个头, ...

  5. Devops 开发运维高级篇之微服务代码上传和代码检查

    Devops 开发运维高级篇之微服务代码上传和代码检查 微服务持续集成(1)-项目代码上传到Gitlab 微服务持续集成(2)-从Gitlab拉取项目源码 微服务持续集成(3)-提交到SonarQub ...

  6. Cesium原理篇:3最长的一帧之地形(1)

    前面我们从宏观上分析了Cesium的整体调度以及网格方面的内容,通过前两篇,读者应该可以比较清楚的明白一个Tile是怎么来的吧(如果还不明白全是我的错).接下来,在前两篇的基础上,我们着重讨论一下地形 ...

  7. Cesium原理篇:3最长的一帧之地形(2:高度图)

           这一篇,接着上一篇,内容集中在高度图方式构建地球网格的细节方面.        此时,Globe对每一个切片(GlobeSurfaceTile)创建对应的TileTerrain类,用来维 ...

  8. Cesium原理篇:2最长的一帧之网格划分

    上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...

  9. cesium原理篇(三)--地形(1)【转】

    转自:http://www.cnblogs.com/fuckgiser/p/5824743.html 简述 前面我们从宏观上分析了Cesium的整体调度以及网格方面的内容,通过前两篇,读者应该可以比较 ...

随机推荐

  1. mui框架中底部导航的跳转2

    接上一篇 还有一种方法就是在一心得页面中打开我们所需要的网页 代码如下: 向新的的页面穿值: 获取到新页面上的值:

  2. 验证mongodb主从复制过程~记录操作

    接 mongodb的安装:http://www.cnblogs.com/myrunning/p/4319367.html 1.1创建数据目录 在这里我们将不使用mongodb的配置文件启动mongod ...

  3. System.Web.HttpContext.Current.Session为NULL解决方法

    http://www.cnblogs.com/tianguook/archive/2010/09/27/1836988.html 自定义 HTTP 处理程序,从IHttpHandler继承,在写Sys ...

  4. 学习Nodejs之mysql

    学习Nodejs连接mysql数据库: 1.先安装mysql数据库 npm install mysql 2.测试连接数据库: var sql = require("mysql"); ...

  5. checkbox选中状态不被改变

    让它的状态只能看不能改变,加上onclick="return false;". 也可以disabled="true";但是这个颜色变淡了; <input ...

  6. C++ 回调函数的定义与用法

    一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...

  7. iOS在线更新framework,使用NSBundle动态读取

    官方文档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingCode/Tasks/Loadin ...

  8. Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序

    XB 软件公司最近发布了JavaScript UI 库Webix ,其中包含的组件超过45个,用这些组件可以构建跟HTML5 和 CSS3 兼容的程序,这些程序不仅能在个人电脑上运行,还能用在iOS. ...

  9. mina框架详解

     转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...

  10. 不要对外公开泛型List成员

    最近在阅读Framework Design Guidelines,本着现学现用的原则,于是就用FxCop工具对代码进行规范性检查时,发现了很多问题,其中包括命名以及一些设计上的规范. 其中,Do no ...