Cesium应用篇:2影像服务(上)
文章中相关范例下载路径: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的另外两个服务地址,可供加载:watercolor、toner。在三维影像服务中,因为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影像服务(上)的更多相关文章
- 影像服务——加载CESIUM自带的影像服务
1.加载arcgis数据——ArcGisMapServerImageryProvider var viewer = new Cesium.Viewer("cesiumDiv",{ ...
- Cesium应用篇:2影像服务(下)
文章中相关范例下载路径:https://yunpan.cn/cByQqkANWN7Pu 访问密码 823d 上篇主要介绍了Cesium自带的影像Provider ,在本篇中,我们主要涉及到如何扩展这些 ...
- Cesium原理篇:5最长的一帧之影像
如果把地球比做一个人,地形就相当于这个人的骨骼,而影像就相当于这个人的外表了.之前的几个系列,我们全面的介绍了Cesium的地形内容,详见: Cesium原理篇:1最长的一帧之渲染调度 Cesium原 ...
- Cesium原理篇:7最长的一帧之Entity(上)
之前的最长的一帧系列,我们主要集中在地形和影像服务方面.简单说,之前我们都集中在地球是怎么造出来的,从这一系列开始,我们的目光从GLOBE上解放出来,看看球面上的地物是如何渲染的.本篇也是先开一个头, ...
- Devops 开发运维高级篇之微服务代码上传和代码检查
Devops 开发运维高级篇之微服务代码上传和代码检查 微服务持续集成(1)-项目代码上传到Gitlab 微服务持续集成(2)-从Gitlab拉取项目源码 微服务持续集成(3)-提交到SonarQub ...
- Cesium原理篇:3最长的一帧之地形(1)
前面我们从宏观上分析了Cesium的整体调度以及网格方面的内容,通过前两篇,读者应该可以比较清楚的明白一个Tile是怎么来的吧(如果还不明白全是我的错).接下来,在前两篇的基础上,我们着重讨论一下地形 ...
- Cesium原理篇:3最长的一帧之地形(2:高度图)
这一篇,接着上一篇,内容集中在高度图方式构建地球网格的细节方面. 此时,Globe对每一个切片(GlobeSurfaceTile)创建对应的TileTerrain类,用来维 ...
- Cesium原理篇:2最长的一帧之网格划分
上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...
- cesium原理篇(三)--地形(1)【转】
转自:http://www.cnblogs.com/fuckgiser/p/5824743.html 简述 前面我们从宏观上分析了Cesium的整体调度以及网格方面的内容,通过前两篇,读者应该可以比较 ...
随机推荐
- tab
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- *HDU 1028 母函数
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- backbone入门示例
最近因为有个项目需要用backbone+mui 所以最近入坑backbone. Backbonejs有几个重要的概念,先介绍一下:Model,Collection,View,Router.其中Mod ...
- Lua游戏时区问题
关于cocos2dx-lua版本中游戏时间显示问题 2015-04-19 19:07 1466人阅读 评论(0) 收藏 举报 分类: Lua(29) cocos2d(38) 版权声明:本文为博 ...
- Ajax的二次封装
function handleAjax(url,_data,method) { return ajax(url,_data,method).then(function (res) { if(res){ ...
- ASP.net之策略模式
设计思路: 用ASP.net设计,调用策略模式.在第一个数和第二个数的文本框中输入数值,单击录题按钮,数值保存在n1,n2文档中,把要做的题都保存完后,单击开始按钮,开始做题,做完单击判断按钮,进行判 ...
- Remote Desktop Connection Manager
通过Remote Desktop Connection Manager(RDCMan),当前最新版本是 v2.7. 通过这款软件,我们便可以轻松的管理和访问数个RDP.左边的列表中我们可以创建总的分区 ...
- 如何理解T-SQL中Merge语句
写在前面的话:之前看过Merge语句,感觉没什么用,完全可以用其他的方式来替代,最近又看了看Merge语句,确实挺好用,可以少写很多代码,看起来也很紧凑,当然也有别的优点. ====正文开始===== ...
- C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字
C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字 +BIT祝威+悄悄在此留下版了个权的信息说: 上一篇得到了字形贴图及其位置字典(可导出为XML).本篇就利用此贴 ...
- Visualize The Workshop
这篇文章是从我的 github 博客 http://lxconan.github.io 导入的. 今天这篇文章是准备瞎扯的.平常工作的时候,我希望尽可能的将一切自动化,让自己尽可能的舒适与懒惰.两个输 ...