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的整体调度以及网格方面的内容,通过前两篇,读者应该可以比较 ...
随机推荐
- hadoop+tachyon+spark的zybo cluster集群综合配置
1.zybo cluster 架构简述: 1.1 zybo cluster 包含5块zybo 开发板组成一个集群,zybo的boot文件为digilent zybo reference design提 ...
- 华为oj 购物单
这两天断断续续敲完这个(放假的时候比较懒),一次成功有点小激动(●'◡'●) 不过貌似从第一次打开开始计时..... 这道题目很像01背包,我将附件与它们的主件绑定(就是link起来)然后套用动态规 ...
- Android四大组件--事务详解(转)
一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取.事务的正确执行使得数据库从一种状态转换成另一种状态. 事务必须服从ISO/IEC所制定的ACID原则. ...
- 省市县三级联动(jqurey+json)
1.效果图 2.联动js /** * jquery.choosearea.js - 地区联动封装 */ ; (function ($) { var choosearea = function (opt ...
- sublime text 如何新建,删除,重命名等问文件的快速操作
引用自: stackoverflow 可以使用插件, Sidebar Enhancements, 按ctrl+shift+p 输入install package回车 搜索该插件后即可完成
- .net core中使用openssl的公钥私钥进行加解密
这篇博文分享的是 C#中使用OpenSSL的公钥加密/私钥解密 一文中的解决方法在 .net core 中的改进.之前的博文针对的是 .NET Framework ,加解密用的是 RSACryptoS ...
- 玩转JavaScript OOP[4]——实现继承的12种套路
概述 在之前的文章中,我们借助构造函数实现了"类",然后结合原型对象实现了"继承",并了解了JavaScript中原型链的概念. 理解这些内容,有助于我们更深入 ...
- Lesson 4 An existing trip
Text I have just received a letter from my brother,Tim. He is in Australia. He has been there for si ...
- Python黑帽编程2.8 套接字编程
Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...
- 剑指Offer面试题:12.在O(1)时间删除链表结点
一.题目:在O(1)时间删除链表结点 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 原文采用的是C/C++,这里采用C#,节点定义如下: public class ...