00 Cesium
常用 api
Cesium 是一个功能强大的 3D 地球可视化引擎,提供了丰富的 API 用于开发各种地理信息系统(GIS)应用。以下是一些常用 API 的介绍和示例代码,帮助你快速上手。
1. 初始化 Cesium Viewer
这是使用 Cesium 的第一步,用于创建一个 3D 地球视图。
1 2 3 4 5 6
| var viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider: Cesium.createWorldTerrain(), imageryProvider: Cesium.createWorldImagery(), scene3DOnly: true, shouldAnimate: true });
|
2. 添加实体(Entity)
实体是 Cesium 中用于表示地理对象的基本单位,可以是点、线、面等。
1 2 3 4 5 6 7
| viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706), point: { pixelSize: 10, color: Cesium.Color.RED } });
|
3. 添加多段线(Polyline)
用于绘制连接多个点的线条,常用于路径规划或连接线。
1 2 3 4 5 6 7 8 9 10
| viewer.entities.add({ polyline: { positions: Cesium.Cartesian3.fromDegreesArray([ -123.0744619, 44.0503706, -123.0744619, 44.0503706 ]), width: 5, material: Cesium.Color.BLUE } });
|
4. 添加多边形(Polygon)
用于绘制多边形区域,例如国家边界或地理区域。
1 2 3 4 5 6 7 8 9 10
| viewer.entities.add({ polygon: { hierarchy: Cesium.Cartesian3.fromDegreesArray([ -123.0744619, 44.0503706, -123.0744619, 44.0503706, -123.0744619, 44.0503706 ]), material: Cesium.Color.RED.withAlpha(0.5) } });
|
5. 添加标签(Label)
用于在地图上显示文本标签。
1 2 3 4 5 6 7 8 9 10 11
| viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706), label: { text: 'Hello Cesium!', font: '14pt monospace', style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -9) } });
|
6. 添加模型(Model)
用于加载 3D 模型,例如建筑物、飞机等。
1 2 3 4 5 6 7 8
| viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706), model: { uri: 'path/to/model.glb', scale: 1.0, minimumPixelSize: 128 } });
|
7. 设置相机(Camera)
用于控制视图的视角和位置。
1 2 3 4 5 6 7 8
| viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, 500000), orientation: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-90), roll: 0.0 } });
|
8. 事件监听
用于监听用户的交互事件,例如鼠标点击。
1 2 3 4 5 6
| viewer.screenSpaceEventHandler.setInputAction(function(event) { var picked = viewer.scene.pick(event.position); if (Cesium.defined(picked)) { console.log('点击了对象:', picked); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
9. 时间动态效果
用于控制时间轴和动态效果。
1 2 3 4 5 6
| viewer.clock.multiplier = 10; viewer.clock.startTime = Cesium.JulianDate.now(); viewer.clock.currentTime = Cesium.JulianDate.now(); viewer.clock.stopTime = Cesium.JulianDate.addSeconds(Cesium.JulianDate.now(), 60, new Cesium.JulianDate()); viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER; viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
|
10. 加载外部数据
例如加载 GeoJSON 数据。
1 2 3 4 5 6 7
| var geoJsonDataSource = new Cesium.GeoJsonDataSource.load('path/to/geojson.json', { stroke: Cesium.Color.RED, fill: Cesium.Color.BLUE, strokeWidth: 3 }).then(function(dataSource) { viewer.dataSources.add(dataSource); });
|
11. 自定义材质(Material)
用于创建自定义的视觉效果,例如流动的线条。
1 2 3 4 5 6 7 8 9 10 11 12 13
| var polyline = viewer.entities.add({ polyline: { positions: Cesium.Cartesian3.fromDegreesArray([ -123.0744619, 44.0503706, -123.0744619, 44.0503706 ]), width: 5, material: new Cesium.PolylineGlowMaterialProperty({ color: Cesium.Color.BLUE, glowPower: 0.7 }) } });
|
12. 动态更新实体
用于根据时间或其他条件动态更新实体的属性。
1 2 3 4 5 6 7 8 9
| var entity = viewer.entities.add({ position: new Cesium.CallbackProperty(function(time) { return Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706); }, false), point: { pixelSize: 10, color: Cesium.Color.RED } });
|
13. 添加自定义控件
例如添加一个按钮来控制相机。
1 2 3 4 5 6 7 8 9 10 11
| var button = document.createElement('button'); button.textContent = '飞往北京'; button.style.position = 'absolute'; button.style.top = '10px'; button.style.left = '10px'; document.body.appendChild(button); button.addEventListener('click', function() { viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(116.397428, 39.90923) }); });
|
14. 加载地形和影像
用于加载高精度的地形和影像数据。
1 2 3 4 5 6 7
| viewer.terrainProvider = Cesium.createWorldTerrain({ requestWaterMask: true, requestVertexNormals: true }); viewer.imageryProvider = Cesium.createWorldImagery({ style: Cesium.IonWorldImageryStyle.LAND_OCEAN });
|
15. 性能优化
例如限制帧率和减少渲染负载。
1 2
| viewer.scene.maximumRenderTimeChange = 1000.0; viewer.scene.screenSpaceCameraController.enableCollisionDetection = false;
|
这些 API 是 Cesium 中最常用的部分,通过它们可以实现大部分的 3D 地球可视化功能。如果你有更具体的需求,比如加载特定格式的数据或实现复杂的交互效果,可以进一步说明,我可以为你提供更详细的代码示例。