Cesium 核心概念 核心接口

Cesimum 可以做什么

Cesium 是一个开源的3D地球可视化引擎,它可以在Web浏览器中以高性能和高质量呈现全球范围内的地球表面数据。

Cesium 可以用于以下领域:

地理信息系统:Cesium 可以呈现地球表面上的各种地理信息数据,包括卫星影像、数字高程模型、地形数据、矢量数据等。用户可以使用 Cesium 创建交互式的地图应用程序,从而更好地了解地球上的各种地理信息。

智能城市:Cesium 可以用于可视化城市规划、交通流量、气象预报、环境监测等数据。通过 Cesium,用户可以更好地了解城市的运转情况,并对城市的规划、管理等方面进行决策。

航空航天:Cesium 可以呈现卫星轨道、星座分布、航空交通等数据,用户可以使用 Cesium 创建航空航天应用程序,更好地了解地球上的各种航空航天信息。

教育和科普:Cesium 可以呈现地球上的各种自然现象、历史事件、文化遗产等信息,用户可以使用 Cesium 创建科普应用程序,更好地向公众传播知识和文化。

总之,Cesium 可以用于各种需要可视化地球表面数据的领域,为用户提供高质量、高性能的3D地球可视化服务。

Cesium 可以加载的数据

Cesium可以加载全球范围的地图数据,包括地形、影像、矢量数据等。Cesium支持的地图数据格式包括:

影像数据格式:JPEG、PNG、GIF、BMP、TIFF、DDS等
地形数据格式:STL、glTF、3D Tiles、CZML等
矢量数据格式:GeoJSON、KML、TopoJSON等
可以使用Cesium提供的数据加载器加载上述格式的数据,并在地球上进行可视化展示。同时,Cesium也支持自定义数据源,开发者可以根据自己的需求开发自己的数据源,并加载到Cesium中进行展示。

在这里插入图片描述

加载矢量以及几个数据

在这里插入图片描述
在这里插入图片描述

Cesium 可以使得数据动态的展示

Cesium 前后端架构以及部分核心类

![在这里插入图片描述](https://img-blog.csdnimg.cn/316907324e7b49fe9d9d5b02ef58d3cd.png

在这里插入图片描述

Cesium 图层编辑的接口或者工具

Cesium提供了一些内置的类和工具,可以用来进行图层编辑,包括:

Cesium.DrawHandler:提供了用鼠标绘制几何图形的功能,包括点、线、多边形等,可以通过监听事件来获取绘制结果。

Cesium.Primitive:原生图元对象,可以进行图元的创建、更新、删除等操作,支持的图元类型包括点、线、面、贴图等。

Cesium.Entity:实体对象,可以用来表示一个物体或者一个事件,支持的属性包括位置、方向、外观、动态效果等。

Cesium.DataSource:数据源对象,可以用来加载各种格式的数据文件,并且提供了对数据的编辑和更新功能。

Cesium.Cesium3DTileset:3D Tiles数据源对象,提供了对3D Tiles数据的加载和编辑功能。

除了以上的内置类和工具,Cesium还提供了很多插件和第三方工具,可以用来进行更加复杂的图层编辑和管理。

Cesium提供了大量的插件和第三方工具,用于进行更加复杂的图层编辑和管理。以下是其中一些常用的插件和工具:

Cesium Widget:Cesium Widget是一个开源的WebGL渲染引擎,可以用于创建高性能的地图应用程序。它提供了各种各样的功能,例如地图导航、图层管理、数据可视化等等。

Cesium Ion:Cesium Ion是Cesium提供的一个云服务平台,可以用于管理地图数据、进行3D模型构建和发布等等。它提供了各种各样的工具和API,用于快速创建和部署地图应用程序。

Cesium Terrain Builder:Cesium Terrain Builder是一个用于生成地形数据的工具,可以将现有的DEM数据转换为Cesium所支持的地形格式。它支持各种各样的DEM数据源,并且可以生成不同分辨率的地形数据,以适应不同的场景。

Cesium Inspector:Cesium Inspector是Cesium提供的一个调试工具,可以用于检查和调试场景中的各种元素。它提供了各种各样的功能,例如查看场景中的对象属性、修改对象状态、以及调整相机位置等等。

Cesium Stories:Cesium Stories是Cesium提供的一个可视化故事创建工具,可以用于创建交互式的地图故事。它支持各种各样的地图元素、文本和多媒体内容,并且可以创建不同的故事场景,以提供更加丰富的用户体验。

CesiumJS Offscreen:CesiumJS Offscreen是一个用于在Web Worker中进行Cesium渲染的工具,可以提高场景渲染性能。它提供了各种各样的API,用于创建、配置和管理Web Worker,并且支持多线程渲染,以进一步提高性能。

这些插件和工具提供了丰富的功能和API,可以帮助开发人员快速创建和部署复杂的地图应用程序,并且提高应用程序的性能和用户体验。

Cesium 量测功能的实现 API

Cesium提供了许多内置的API或者工具,可以用来进行长度、面积、体积等的量测。下面是其中一些:

Cesium.Measure:通过这个API可以创建测量对象,对地球上的距离、面积和高度进行测量。它提供了丰富的测量选项和自定义标记选项。

Cesium.MeasureTool:这是一个基于Cesium.MeasureAPI的工具,提供了更多的交互式测量选项,包括测量线、多边形、矩形、圆和高程等。

Cesium.VolumeTool:这是一个基于Cesium.MeasureAPI的工具,用于测量三维空间中的体积。它提供了多种形状的体积测量选项,包括球体、长方体、圆柱体和多面体。

Cesium.DistanceDisplayCondition:这个API可以用来控制对象的可见性,当对象距离相机的距离超出指定范围时,对象将不再显示。这个API可以用来进行距离测量,例如显示线段的长度。

Cesium.PolylineDashMaterialProperty:这个API可以用来创建虚线样式的线段材质。通过控制虚线的间隔和宽度,可以用来表示距离。

Cesium.PolygonOutlineGeometry:这个API可以用来创建多边形边框的几何体。通过计算多边形的边界,可以用来表示面积。

这些API和工具都提供了丰富的选项和自定义功能,可以用来满足各种不同的需求。

Cesium 对图层进行管理的 API 或者工具

Cesium提供了多种对图层进行管理的API和工具,包括但不限于以下几种:

CesiumLayer: Cesium原生的图层管理类,可以对图层进行添加、删除、显示、隐藏等操作。

Cesium3DTileset: Cesium的3D Tiles图层管理类,可以对3D Tiles图层进行加载、显示、隐藏等操作。

GeoJsonDataSource: Cesium的GeoJSON数据源管理类,可以对GeoJSON数据源进行加载、显示、隐藏等操作。

KmlDataSource: Cesium的KML数据源管理类,可以对KML数据源进行加载、显示、隐藏等操作。

ImageryLayer: Cesium的影像图层管理类,可以对影像图层进行添加、删除、显示、隐藏等操作。

TerrainProvider: Cesium的地形图层管理类,可以对地形图层进行加载、显示、隐藏等操作。

Viewer: Cesium的场景管理类,可以对整个场景进行管理,包括添加、删除、显示、隐藏、切换等操作。

DataSourceCollection: Cesium的数据源集合管理类,可以对多个数据源进行集中管理,包括添加、删除、显示、隐藏等操作。

EntityCollection: Cesium的实体集合管理类,可以对多个实体进行集中管理,包括添加、删除、显示、隐藏等操作。

其他对图层进行管理的工具

Cesium Inspector:一个基于浏览器的工具,可帮助您检查和调试 Cesium 场景。它提供了一个用户友好的界面,可让您查看图层的属性和状态,如位置,缩放,旋转等。您可以通过单击场景中的任何对象来选择它,并查看其属性。

Cesium Ion:一个基于云的平台,可用于存储和管理地理空间数据,并轻松构建和部署 Cesium 场景。它提供了一个用户友好的界面,可让您上传和下载数据,以及管理场景的属性和设置。

Cesium Terrain Builder:一个开源的工具,用于将高程数据转换为 Cesium 场景中的地形图层。它支持各种高程数据格式,如 SRTM,DTED 和 GeoTIFF,并可用于创建不同精度的地形图层,从而提供不同的性能和视觉效果。

Cesium OSM Buildings:一个基于 OpenStreetMap 数据的开源工具,用于在 Cesium 场景中生成建筑物图层。它支持各种建筑物类型和风格,如高层建筑,住宅建筑和历史建筑,并可用于创建不同级别的详细程度。

Cesium 3D Tiles Styling:一个开源的工具,用于创建和编辑 Cesium 3D Tiles 图层的样式。它提供了一组用户友好的界面,可让您定义图层的样式属性,如颜色,透明度,纹理等,从而实现各种视觉效果和交互。

Cesium Vector Tile Inspector:一个开源的工具,用于检查和调试 Cesium 矢量瓦片图层。它提供了一个用户友好的界面,可让您查看和编辑矢量要素的属性和样式,如颜色,符号,标签等,从而实现各种地图效果和分析。

Cesium 的核心接口

Cesium的核心接口是Viewer,
它是一个场景视图的容器,
用于展示3D场景和处理用户交互。通过Viewer,我们可以添加图层、模型、绘制几何图形等,并且可以对场景进行视角操作、动画效果等。除了Viewer,Cesium还有一些其他核心接口和类,如Scene、Camera、Entity、Primitive等,它们各自负责不同的功能,一起构成了Cesium的完整框架。

Cesium 加载地形数据接口

在这里插入图片描述
创建一个椭球体

Cesium Camera

setView

在这里插入图片描述

flyTo

地区缓慢的移动到需要去的位置
在这里插入图片描述

获取到任意视角下面的三个可以调整相机参数的技巧
首先在 Cesium 地球中找到自己想要去的地方以及调节好视角,
然后再 F12 调试代码中设置相机的参数,就可以到达相应的地方
在这里插入图片描述

接口 - Cesium Viewer

示例代码

var viewer = new Cesium.Viewer('cesiumContainer', {
    imageryProvider: new Cesium.createOpenStreetMapImageryProvider({
        url: 'https://a.tile.openstreetmap.org/'
    }),
    baseLayerPicker: false,
    animation: false,
    timeline: false,
    geocoder: false
}); 

接口中参数含义

这个代码中创建了一个 Cesium.Viewer 对象,其中的参数如下:

‘cesiumContainer’:用于存放地球对象的 HTML 元素的 ID。

imageryProvider:图像提供者对象,它定义了从哪里获取地球表面的影像。这里使用的是 Cesium.createOpenStreetMapImageryProvider 方法,创建了一个 OpenStreetMap 影像提供者对象。

baseLayerPicker:是否显示切换底图图层的工具栏。这里设置为 false,不显示该工具栏。

animation:是否显示动画工具栏。这里设置为 false,不显示该工具栏。
timeline:是否显示时间线工具栏。这里设置为 false,不显示该工具栏。
geocoder:是否显示地理编码工具栏。这里设置为 false,不显示该工具栏。

接口 - Cesium Camera

Cesium的Camera是一个用于控制场景中相机位置、朝向和视角的对象。可以使用Camera来设置场景中的视图,例如更改相机高度、方位、角度和扭曲,以及添加相机移动动画等。

示例代码

lookAt:

lookAt(target, offset)

在观察者方向上以目标点为中心设置相机位置,并将相机朝向目标。target参数为三维坐标点,表示相机朝向的目标点。offset参数为三维向量,表示相机距离目标点的距离和相机的高度。

viewer.camera.lookAt(Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), new Cesium.Cartesian3(0, -3000, 2000));

setView:

setView(options)

设置相机的位置、方向和视角。options为一个对象,包含以下参数:

destination: 相机的目标位置(三维坐标点)。
orientation: 相机的朝向(四元数)。
endTransform: 相机移动到目标位置时的过渡方式(可选参数)。

viewer.camera.setView({
    destination: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 5000),
    orientation: {
        heading: Cesium.Math.toRadians(180),
        pitch: Cesium.Math.toRadians(-35),
        roll: 0.0
    }
});

flyTo:

flyTo(options)

通过一个过渡动画将相机从当前位置移动到指定的位置和方向。options为一个对象,包含以下参数:

destination: 相机的目标位置(三维坐标点)。
orientation: 相机的朝向(四元数)。
duration: 动画持续时间(单位为秒)。
complete: 动画结束后的回调函数(可选参数)。

viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 5000),
    orientation: {
        heading: Cesium.Math.toRadians(180),
        pitch: Cesium.Math.toRadians(-35),
        roll: 0.0
    },
    duration: 3,
    complete: function() {
        console.log("Camera flyTo completed!");
    }
});

setViewRectangle

setViewRectangle(rectangle, [ellipsoid], [duration])

根据指定的矩形调整相机位置和方向。该方法会使相机覆盖矩形区域并将相机的方向调整为与矩形的中心点对齐。rectangle为矩形区域对象,包含以下参数:

west: 矩形的西边界(单位为弧度)。

camara 代码示例

// 创建一个场景
var viewer = new Cesium.Viewer('cesiumContainer');

// 获取场景中的相机
var camera = viewer.camera;

// 设置相机的位置、朝向和视野范围
camera.position = new Cesium.Cartesian3.fromDegrees(-74.01881302800248, 40.69114333714821, 1000);
camera.direction = Cesium.Cartesian3.normalize(new Cesium.Cartesian3(-1.0, 0.0, -1.0), new Cesium.Cartesian3());
camera.up = Cesium.Cartesian3.normalize(new Cesium.Cartesian3(-1.0, 0.0, 1.0), new Cesium.Cartesian3());
camera.frustum.fov = Cesium.Math.PI_OVER_THREE;
camera.frustum.near = 1.0;
camera.frustum.far = 2000.0;

// 创建一个实体
var entity = viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-74.01881302800248, 40.69114333714821),
    model: {
        uri: 'https://assets.cesium.com/088/088.glb'
    }
});

// 相机跟随实体
viewer.trackedEntity = entity;

// 在这个示例中,首先创建了一个场景,并获取场景中的相机对象。然后通过设置相机的位置、朝向和视野范围来控制

Cesium - DataSource

在 Cesium 中,DataSource 类是用来加载、管理和可视化各种数据源的类。它的 clock 属性是用来控制数据源中时间相关信息的。

clock 属性包含了当前时间、开始时间、结束时间等时间信息。对于支持时间的数据源,Cesium 可以根据 clock 属性的设置来控制数据在时间上的展示。例如,可以设置数据随着时间变化而动态展示,或者只展示某个特定时间段的数据。

在使用 DataSource 加载支持时间的数据时,可以通过设置 clock 属性来控制数据在时间上的展示。下面是一个使用 clock 属性的示例代码:

var dataSource = new Cesium.KmlDataSource();
dataSource.load('example.kml').then(function() {
    viewer.dataSources.add(dataSource);
    var clock = viewer.clock;
    clock.startTime = dataSource.clock.startTime;
    clock.stopTime = dataSource.clock.stopTime;
    clock.currentTime = dataSource.clock.startTime;
    clock.clockRange = Cesium.ClockRange.LOOP_STOP;
    clock.multiplier = 10;
});

在这个示例代码中,我们先加载了一个 KML 文件,然后将其加入到了 viewer 对象中。接下来,我们从 dataSource 对象中获取了其 clock 属性,并将 clock 属性中的开始时间、结束时间、当前时间、时间范围和速率等信息设置到了 viewer 对象的 clock 属性中。这样就可以通过控制 viewer 对象的 clock 属性来控制数据在时间上的展示了。

这段代码涉及到 Cesium 的时间系统,clock.clockRange 和 clock.multiplier 是用来控制时间播放的方式和速度的属性。

clock.clockRange 是一个枚举类型,表示时间范围。LOOP_STOP 表示时间循环,当时间达到最大时间时,时间会重置到最小时间并继续循环。也就是说,当时间到达最大时间时,它不会停止,而是会回到最小时间,再次播放。

clock.multiplier 表示时间流逝的速度倍数。它的默认值是1,如果设置为2,则时间会以两倍的速度流逝。在这个例子中,将倍速设置为10,表示时间将以10倍速播放。

kml 数据

KML(Keyhole Markup Language)是一种用于描述地理信息的标记语言,由 Google 创造并推广。它是一种基于 XML 的格式,用于表示三维地球上的点、线、区域、图标、照片、文字标签以及其他地理信息。KML 数据可以被 Google 地球、Cesium 等软件解析和渲染,从而实现地理信息可视化和交互。KML 格式支持的标记种类非常多,包括图形、地名、地标、多媒体、网格、模型等,可以满足各种类型地理信息的表示需求。

shp 文件转换为 kml 文件

可以使用一些第三方工具或者脚本来将 shape 数据转换为 kml 数据。以下是一些常用的工具或脚本:

ArcGIS Desktop:ArcGIS Desktop 是一个商业 GIS 软件,支持将 shape 文件导出为 kml 文件。

ogr2ogr:ogr2ogr 是 GDAL/OGR 工具集中的一个命令行工具,支持将多种数据格式互相转换,包括将 shape 文件转换为 kml 文件。

shp2kml:shp2kml 是一个 Python 脚本,可以将 shape 文件转换为 kml 文件。它基于 Simplekml 库实现,可以生成包含点、线、面等各种要素的 kml 文件。

QGIS:QGIS 是一个开源的 GIS 软件,支持将 shape 文件导出为 kml 文件。在 QGIS 中,可以使用 “Save As” 功能将 shape 文件导出为 kml 文件。

需要注意的是,转换过程可能会因为数据的格式和内容而有所不同,因此建议根据具体情况选择合适的工具或脚本。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值