Cesium丰富的空间数据可视化API分为两部分:primitive API面向三维图形开发者,更底层一些。
Entity API是数据驱动更高级一些。
javascript
// entity
// 调用方便,封装完美
// 是基于primitive的封装
// primitive
// 更接近底层
// 可以绘制高级图形
// 由Geometry(几何形状)、(Appearance)外观组成
javascript
const primitive = new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.EllipseGeometry({
center: Cesium.Cartesian3.fromDegrees(-100.0, 20.0),
semiMinorAxis: 500000.0,
semiMajorAxis: 1000000.0,
rotation: Cesium.Math.PI_OVER_FOUR,
vertexFormat: Cesium.VertexFormat.POSITION_AND_ST
}),
}),
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: Cesium.Material.fromType('Stripe')
})
})
viewer.scene.primitives.add(primitive);

组合图形
javascript
<h1 id="m7WFT">组合图形</h1>
```javascript
const rectangleInstance = new Cesium.GeometryInstance({
geometry: new Cesium.RectangleGeometry({
rectangle: Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0),
vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
}),
id: 'rectangle',
attributes: {
color: new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)
}
});
const ellipsoidInstance = new Cesium.GeometryInstance({
geometry: new Cesium.EllipsoidGeometry({
radii: new Cesium.Cartesian3(500000.0, 500000.0, 1000000.0),
vertexFormat: Cesium.VertexFormat.POSITION_AND_NORMAL
}),
modelMatrix: Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-95.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 500000.0), new Cesium.Matrix4()),
id: 'ellipsoid',
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)
}
});
viewer.scene.primitives.add(new Cesium.Primitive({
geometryInstances: [rectangleInstance, ellipsoidInstance],
appearance: new Cesium.PerInstanceColorAppearance()
}));

点击事件
javascript
<h1 id="qr6o4">点击事件:</h1>
<h3 id="XXD1c">添加地形图层后去画点</h3>
```javascript
let viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
})
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction((event) => {
//返回一个笛卡尔坐标
let position = viewer.scene.pickPosition(event.position);
//如果有这个坐标
if (Cesium.defined(position)) {
console.log(position)
viewer.entities.add({
position: position,
point: {
color: Cesium.Color.BLUE,
pixelSize: 20,
},
})
console.log(viewer.entities)
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

事件注销
javascript
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除左键点击事件
申明变量
javascript
let pickModel
鼠标移动事件
javascript
//添加建筑物
const city = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: Cesium.IonResource.fromAssetId(75343),
})
);
viewer.flyTo(city)
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction((event) => {
//拾取模型
const pick = viewer.scene.pick(event.endPosition);
if (pick) {
if (pickModel) {
pickModel.color = Cesium.Color.WHITE;
}
pick.color = Cesium.Color.ORANGERED;
pickModel = pick;
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

注销事件
javascript
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除左键点击事件