Cesium API目录

image.png
所有的API都是从viewer类出发

矢量数据
image.png

Cesium 坐标

屏幕坐标(像素)

二位笛卡尔平面坐标系,可通过nwe Cesium.Createsian2(x,y)创建;

笛卡尔空间直角坐标系(世界坐标)

又称世界坐标,可通过new Cesium.Cartesian3(x, y, z)创建,主要是用来做空间位置的变化如平移、旋转和缩放等等,它的坐标原点在椭球的中心;

地理坐标(弧度)

new Cesium.Cartographic(longitude, latitude, height);.经纬度坐标
Cesuim中没有具体的经纬度对象,要得到经纬度首先需要计算为弧度,再进行转换。Cesium提供了如下对应的转换方法:
//经纬度转弧度
Cesium.Math.toRadians(degrees);
//弧度转经纬度
Cesium . Math.toDegrees(radians);

1.经纬度坐标转世界坐标

Cesium提供了两种方式将经纬度坐标转成世界坐标。
//方法1:直接转换
var cartesian3 = Cesium.Cartesian3.fromDegrees(lng,lat,height);
//方法2:借助ellipsoid对象,先转换成弧度再转换
var cartographic = Cesium.Cartographic.fromDégrees(lng, lat,height);//单位:度.度,米
var cartesian3 = ellipsoid.cartographicToCartesian(cartographic);

2.世界坐标转经纬度坐标

第一步:笛卡尔空间直角坐标系转为地理坐标(弧度制)

//方法1 var cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
//方法2 var cartographic = ellipsoid.cartesianToCartographic(cartesian3);

第二步:地理坐标(弧度制)转为经纬度坐标

var lat = Cesium.Math.toDegrees(cartographic.latitud);
var lng = Cesium.Math.toDegrees(cartographic.longitude);
var height = cartographic.height;

3.世界坐标转经纬度坐标

经纬度转弧度:Cesium.Math.toRadians(degress);
弧度转经纬度:Cesium.Math.toDegress(radians);

4.屏幕坐标与世界坐标互相转换

var cartesian3 = scene.globe.pick(viewer.camera.getPickRay (windowPostion),scene);
三维笛卡尔空间直角坐标转为二维屏幕坐标,结果是cartesian2对象,取出x, y即为屏幕坐标;
windowPostion = Cesium.SceneTransforms.wgs84TowindowCoordinates(scene ,cartesian3);

坐标转换工具

image.png

Cesium 影像数据

Cesium 影像图层类

  1. ImageryLayerCollection类

ImageryLayer类对象的容器,可以装载,放置多个ImageryLayer或者ImageryProvider类对象;

  1. ImageryLayer类

Cesium中的影像图层,相当于皮毛、衣服,将数据源包裹在内,相关属性:透明度、亮度等;

  1. ImageryProvider类

抽象类,子类封装了加载各种影像图层的方法;

各类影响服务的加载

image.png
image.png

Cesium 地形数据

各类地形数据的加载

  1. Cesium默认地形-EllipsoidTerrainProvider

光滑椭球体,没有任何地形起伏效果即高度为0,不支持水面、法线,但不从服务器请求数据。

  1. ArcGIS地形-ArcGISTiledElevationTerrainProvider

名副其实的高度图高度不为0,原理和EllipsoidTerrainProvider如出一辙,同样不支持法线,水面;

  1. Cesium标准地形-CesiumTerrainProvider

两种格式:一种是高度图(目前Cesium已经废弃),另一种则是TIN网格的STK地形。支持水面和法线,同时数据量比较小。

Cesium 矢量数据

矢量数据(Vector Data)是用X、Y、Z坐标表示地图图形或地理实体位置的数据,一般是通过记录坐标的方式来尽可能将地理实体的空间位置表现的准确无误,常见的矢量数据有:点、线、面等格式。我们使用矢量数据的原因,就是因为矢量数据具有数据结构紧凑、冗余度低、有利于网络和检索分析、图形显示质量好、精度高等优点。
目前最常见的矢量数据格式就是shapfile(简称shp),它是由Esri公司开发的一种空间数据开放格式。同时shapfile也成为了GIS行业的标准,几乎所有的商业和开源GIS软件都支持Shapefile。通常情况下,一个”shapefile”通常指带有.shp、.shx、.dbf和其他扩展名且前缀名称一致的文件(.prj、.sbn等)集合。
image.png

Cesium 支持的矢量数据格式

1.geojson 2.topojson 3.kml 4.具有时间特性的czml
Cesium viewer.dataSources.add(adtaSource);是以DataSource后缀去命名的相关类;

  • geojson:直接使用Polygon、Point之类的几何体来表示图形;
  • topjson: GeoJSON的扩展形式,TopoJSON中的每一个几何体都是通过将共享边(被称为arcs);
  • KML (keyhole markup language)是一种基于XML语法格式的文件,用来描述和存储地理信息数据(点、线、面、多边形、多面体以及模型等),通常应用于Google 地球相关软件中(Google Earth,Google Map等),它跟XML文件最大的不同就是KML描述的是地理信息数据,同时KML已正式被OGC采用,成为OGC众多规范中的一个。KML文件有两个文件扩展名:.KML 和.KMZ(一个或几个KML文件的压缩集,采用zip格式压缩);
  • CZML是cesium中很重要的一个概念,也是一个亮点,它使得cesium很酷很炫地展示动态数据成为可能。CZML是一种JSON格式的字符串,用于描述与时间有关的动画场景,CZML包含点、线、地标、模型和其他的一些图形元素,并指明了这些元素如何随时间而变化。某种程度上说,,Cesi um和CZML的关系就像Google Earth和KML的关系;

    Cesium glTF数据

    gITF的全称是GL传输格式,是一种针对GL(WebGL,0penGL ES以及0penGL)接口的运行时资产。在3D内容的传输和加载中,glTF通过提供一种高效、易扩展、可协作的格式,填补了3D建模工具和现代图形应用程序之间的空白;
    已成为了 Web 上的3D对象标准(Web导出的通用标准),可以说glTF是3D模型的JPEG格式,几乎每个3D Web框架都支持gITF;
    gITF 3D模型格式有两种:.gltf、.glb .
    .gltf:基于JSON的文本文件,可使用文本编辑器轻松编辑,通常会引用外部文件,例如纹理贴图、二进制网格数据等;
    *.glb:是二进制格式,通常文件较小且自包含所有资源,但不容易编辑。

Cesium 3D Tiles数据

3D Tiles是在gTF的基础上,加入了分层LOD的概念(可以把3D Tiles简单地理解为带有LOD的glTF ),专门为流式传输和渲染海量3D地理空间数据而设计的,例如倾斜摄影、3D建筑、BIMCAD、实例化要素集和点云。它定义了一种数据分层结构和一组切片格式,用于渲染数据内容。
3D Tiles也是OGC 标准规范成员之一,可用于在台式机、Web端和移动应用程序中实现与海量异构3D地理空间数据的共享、可视化、融合以及交互功能。

3D Tiles数据结构

在3DTiles 中,一个瓦片集(Tileset)是由一组瓦片(Tile)按照空间数据结构(树状结构)组织而成的,它至少包含一个用于描述瓦片集的JSON文件(包含瓦片集的元数据和瓦片对象),其中每一个瓦片对象可以引用下面的其中一种格式,用于渲染瓦片内容:
image.png

Cesium 实体entity

面向图形开发人员的低级API(通常称为图元Primitive API)2.用于数据驱动的可视化的高级API(称为实体Entity API) 相对于Primitive APl,Entity APl实现起来更简单一些,特别建议初学者使用。
Entity API实际上是对Primitive API的二次封装,底层调用的仍然是Primitive API,目的就是为我们提供灵活的、易学、易用的高性能可视化界面