【WebGIS】Cesium:Viewer 初始化、地图加载与基础交互

Cesium 是一个功能强大、基于 WebGL 的开源三维地球引擎,它允许用户在浏览器中渲染高性能的三维地图和地球。本文将带领新手入门 Cesium,学习如何初始化 Cesium Viewer,加载地图和地形,了解地球的基础交互操作,并掌握如何添加标记、线条、几何图形和标签等基本功能。

初始化 Cesium Viewer 并加载地图和地形

在 Cesium 中,Cesium.Viewer 是主要的 API 入口,它封装了场景、地形、图层、控件等各种功能,帮助开发者快速构建三维地图应用。

安装 Cesium

首先,需要在 HTML 文件中引入 Cesium 的 JavaScript 和 CSS 文件。如果你使用本地文件或从 CDN 引入,可以这样做:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Cesium Example</title>
  <link href="https://cesium.com/downloads/cesiumjs/releases/latest/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
  <script src="https://cesium.com/downloads/cesiumjs/releases/latest/Build/Cesium/Cesium.js"></script>
</head>
<body>
  <div id="cesiumContainer" style="width: 100%; height: 100vh;"></div>
  <script>
    // Cesium 代码将在这里编写
  </script>
</body>
</html>

这段代码引入了 Cesium 的核心库和基本的样式文件,创建了一个用于显示 Cesium 地球的容器。

初始化 Cesium Viewer

在 HTML 页面中成功引入 Cesium 之后,可以通过以下代码来初始化一个基本的 Viewer:

javascript 复制代码
const viewer = new Cesium.Viewer('cesiumContainer', {
  terrainProvider: Cesium.createWorldTerrain(),  // 加载全球地形数据
  imageryProvider: new Cesium.IonImageryProvider({ assetId: 2 }), // 加载 Bing Maps 影像数据
  homeButton: true, // 启用主页按钮
  sceneModePicker: true, // 启用场景模式选择器
  geocoder: true, // 启用地理编码器(地址搜索)
  baseLayerPicker: true, // 启用图层选择器
  timeline: true, // 启用时间线控件
  animation: true, // 启用动画控件
  fullscreenButton: true, // 启用全屏按钮
});

在这个初始化过程中,Cesium.Viewer 的构造函数需要传入容器的 ID(这里是 cesiumContainer),还可以通过配置项来启用或禁用特定功能。这里我们启用了全球地形、影像图层、主页按钮、场景模式选择器、地理编码器等常用功能。

地形和影像加载

Cesium 提供了多种影像和地形资源,使用 Cesium Ion 服务,可以快速加载全球地形和影像数据:

javascript 复制代码
// 加载全球地形
viewer.terrainProvider = Cesium.createWorldTerrain();

// 加载 Bing Maps 影像
viewer.imageryLayers.addImageryProvider(new Cesium.IonImageryProvider({ assetId: 2 }));

此时,你的 Cesium 页面将显示地球,并使用 Bing Maps 作为基础地图,并且加载了全球的 3D 地形数据。

地球的基础交互操作

Cesium 提供了丰富的交互操作功能,包括地球的缩放、旋转和平移等。这些操作用户可以通过鼠标、键盘或触摸设备轻松实现。

缩放

缩放操作允许用户放大或缩小视角,以查看地球上的不同区域。用户可以使用鼠标滚轮或双指缩放(在触摸设备上)进行缩放。

也可以通过代码来控制视角的缩放:

javascript 复制代码
viewer.camera.zoomIn();  // 放大视角
viewer.camera.zoomOut(); // 缩小视角

旋转

Cesium 支持用户旋转地球,改变观察角度。使用鼠标右键拖动,或者在触摸设备上使用双指旋转,可以调整地球的方向。

通过代码也可以实现旋转操作:

javascript 复制代码
viewer.camera.rotateLeft();  // 向左旋转视角
viewer.camera.rotateRight(); // 向右旋转视角

平移

平移操作允许用户在当前的视角下移动视图,通过鼠标拖拽或触摸设备进行滑动即可实现。

通过代码同样可以实现视角平移:

javascript 复制代码
viewer.camera.moveUp();    // 向上移动视角
viewer.camera.moveDown();  // 向下移动视角
viewer.camera.moveLeft();  // 向左移动视角
viewer.camera.moveRight(); // 向右移动视角

这些交互操作使用户能够更灵活地探索地球的各个角落。

添加标记、线条、形状与标签

除了基础的交互功能,Cesium 还允许开发者在地球上绘制几何图元,如点、线、形状和标签。这些图元可以用来标记重要的位置、路径等。

添加标记点

Cesium 允许使用 Billboard(广告牌)在地图上显示标记点。通过 viewer.entities.add() 方法可以在指定位置添加标记。

javascript 复制代码
viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),  // 经纬度
  billboard: {
    image: 'path/to/marker.png',  // 标记点图标
    width: 32,
    height: 32
  }
});

这个示例在指定的经纬度位置添加了一个自定义标记点图标。

添加线条

Cesium 支持在地球上绘制直线,通过 polyline 来定义一条线段。

javascript 复制代码
viewer.entities.add({
  polyline: {
    positions: Cesium.Cartesian3.fromDegreesArray([
      -75.10, 39.57,
      -80.12, 25.46
    ]),  // 两个点之间的经纬度
    width: 5,  // 线宽
    material: Cesium.Color.RED  // 线的颜色
  }
});

这段代码在地图上绘制了一条从指定的起始点到终点的红色直线。

添加形状

你可以在 Cesium 中绘制简单的几何形状,例如圆、矩形或多边形。例如,绘制一个圆形:

javascript 复制代码
viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0),  // 圆心位置
  ellipse: {
    semiMinorAxis: 250000.0,  // 短轴
    semiMajorAxis: 400000.0,  // 长轴
    material: Cesium.Color.BLUE.withAlpha(0.5)  // 半透明的蓝色填充
  }
});

这个示例将在指定的经纬度位置绘制一个半透明的蓝色圆形。

添加标签

标签(Label)可以用来在地图上标记位置的文字说明:

javascript 复制代码
viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0),
  label: {
    text: 'Hello Cesium!',  // 标签内容
    font: '24px Helvetica', // 字体样式
    fillColor: Cesium.Color.WHITE // 字体颜色
  }
});

这段代码将在指定位置添加一段文字标签。

总结

本文介绍了如何初始化 Cesium Viewer 并加载地图和地形,讲解了地球的基础交互操作,并展示了如何添加标记、线条、形状和标签等简单几何图元。通过这些基础功能的学习,你已经可以构建一个简单的 Cesium 应用,并在地球上进行交互和数据可视化。

Cesium 拥有强大的功能和灵活的 API,未来可以在此基础上继续深入学习更复杂的几何图形、动画、地形分析、数据交互等高级功能。希望这篇入门文章对你的学习之旅有所帮助。

相关推荐
GIS思维1 天前
零代码实现下载高德地图AOI矢量shp边界,如武夷山风景区矢量边界
arcgis·gis·qgis·高德地图·aoi
刘一哥GIS2 天前
神州19号载人飞船即将发射!
arcgis·gis·神州19·宇宙飞船
GIS数据转换器3 天前
智慧城市综合管理应用服务平台
大数据·人工智能·gis·生活·智慧城市·1024程序员节
希艾席蒂恩3 天前
GISBox vs CesiumLab:哪款GIS工具更适合你的项目?
arcgis·gis·数字孪生·cesiumlab·地形切片·gis工具箱·gisbox
qbbmnnnnnn4 天前
【WebGis开发 - Cesium】三维可视化项目教程---图层管理拓展图层顺序调整功能
vue.js·webgl·三维可视化·cesium·vue3.0·webgis·vuedraggable
GIS思维5 天前
ArcGIS必会的选择要素方法(AND、OR、R、IN等)位置选择等
arcgis·gis·地理信息·arcgis位置选择·arcgis模糊查询
MagicUrban5 天前
三维管线管网建模工具MagicPipe3D V3.5.3
3d·gis·智慧城市·1024程序员节·bim·地下管网
smiler6 天前
cesium两种方式实现贴地
前端·cesium
Johaden7 天前
利用Arcgis进行沟道形态分析
arcgis·gis·水文分析·地理学·沟道形态分析
按图索迹8 天前
100GB,台湾台东县绿岛倾斜摄影3DTiles数据来了
三维可视化·cesium·倾斜摄影·3dtiles·台湾倾斜摄影