【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,未来可以在此基础上继续深入学习更复杂的几何图形、动画、地形分析、数据交互等高级功能。希望这篇入门文章对你的学习之旅有所帮助。

相关推荐
汪洪墩13 小时前
【Mars3d】实现这个地图能靠左,不居中的样式效果
前端·javascript·vue.js·3d·webgl·cesium
WineMonk16 小时前
ArcGIS Pro ADGeoProcessing DAML
arcgis·gis·arcgis pro sdk·daml
兔子小姐_2 天前
实验十三 生态安全评价
arcgis·gis
vener_4 天前
Cesium用zoomTo函数实现对目标(各种实体)的视角控制
前端·javascript·cesium
WineMonk6 天前
ArcGIS Pro ADGeoDatabase DAML
arcgis·gis·arcgis pro sdk·arcgis pro·daml
WineMonk6 天前
ArcGIS Pro ADCore DAML
arcgis·gis·arcgis pro sdk·arcgis pro·daml
智方科技8 天前
3DTiles之使用customShader调整风格
3d·智慧城市·cesium
山海鲸可视化8 天前
GIS融合之路(八)-如何用Cesium直接加载OSGB文件(不用转换成3dtiles)
3d·gis·数字孪生·cesium·倾斜摄影·osgb
智方科技8 天前
如何编译 Cesium 源码
3d·智慧城市·cesium·tilesbuilder
柳晓黑胡椒9 天前
cesiusm实现 多图例展示+点聚合(base64图标)
css3·canvas·base64·cesium·animation