Cesium 入门之 Entity API

Entity API 与 Primitive API

在 Cesium 中,Entity API 和 Primitive API 都是用于在三维场景中创建和管理可视化对象的重要工具。Entity API 使用简单,能够快速搭建复杂场景;Primitive API 使用相对复杂,更底层。这里我先介绍 Entity API:

Entity 支持的图形类型

Geometry 几何 图片 Description 描述
PointGraphics
PolylineGraphics 线
CorridorGraphics 走廊
PolylineVolumeGraphics 多段性柱体
PolygonGraphics
BoxGeometry 盒子
EllipseGraphics 圆、椭圆
RectangleGraphics 矩形
WallGraphics
PlaneGraphics 平面
CylinderGraphics 圆柱、圆锥、截断的圆锥
EllipsoidGraphics 椭球体
PathGraphics 路径
BillboardGraphics 广告牌
LabelGraphics 标签
ModelGraphics 模型
Cesium3DTilesetGraphics 3DTileset

Materials

Materials 对应的官网中的 MaterialProperty,为 Polygon、Polyline、Plane 等要素填充材质时使用。

ColorMaterialProperty 颜色

ts 复制代码
const entity = viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(-103.0, 40.0),
    ellipse: {
        semiMinorAxis: 250000.0,
        semiMajorAxis: 400000.0,
        material: Cesium.Color.BLUE.withAlpha(0.5)
    }
});
viewer.zoomTo(viewer.entities);

ImageMaterialProperty 图片

ts 复制代码
ellipse.material = "/docs/tutorials/creating-entities/images/cats.jpg";

CheckerboardMaterialProperty 棋盘

ts 复制代码
ellipse.material = new Cesium.CheckerboardMaterialProperty({
    evenColor: Cesium.Color.WHITE,
    oddColor: Cesium.Color.BLACK,
    repeat: new Cesium.Cartesian2(4, 4)
});

StripeMaterialProperty 条纹

ts 复制代码
ellipse.material = new Cesium.StripeMaterialProperty({
    evenColor: Cesium.Color.WHITE,
    oddColor: Cesium.Color.BLACK,
    repeat: 32
});

GridMaterialProperty

ts 复制代码
ellipse.material = new Cesium.GridMaterialProperty({
    color: Cesium.Color.YELLOW,
    cellAlpha: 0.2,
    lineCount: new Cesium.Cartesian2(8, 8),
    lineThickness: new Cesium.Cartesian2(2.0, 2.0)
});

拾取 Entity

选择顶层entity

ts 复制代码
function pickEntity(viewer, windowPosition) {
    const picked = viewer.scene.pick(windowPosition);
    if (Cesium.defined(picked)) {
        const id = Cesium.defaultValue(picked.id, picked.primitive.id);
        if (id instanceof Cesium.Entity) {
            return id;
        }
    }
}

穿透多选 entity

ts 复制代码
function drillPickEntities(viewer, windowPosition) {
    let picked, entity, i;
    const pickedPrimitives = viewer.scene.drillPick(windowPosition);
    const length = pickedPrimitives.length;
    const result = [];
    const hash = {};
    for (i = 0; i < length; i++) {
        picked = pickedPrimitives[i];
        entity = Cesium.defaultValue(picked.id, picked.primitive.id);
        if (entity instanceof Cesium.Entity && !Cesium.defined(hash[entity.id])) {
            result.push(entity);
            hash[entity.id] = true;
        }
     }
     return result;
 }
相关推荐
丷丩18 分钟前
MapLibre GL JS第36课:一个Source配置多个图层样式
javascript·gis·map·mapbox·maplibre gl js
Love_云宝儿13 小时前
GeoJSON简介
java·gis·地图·jts
Love_云宝儿16 小时前
WKT数据示例并与GeoJSON数据对比
数据结构·gis
不争不抢的佛系少年17 小时前
Cesium模型没有动画怎么办?手把手教你通过代码给GLB模型添加动画!
cesium
Love_云宝儿1 天前
JTS工具类以及调用demo示例
gis·jts
无心使然2 天前
Openlayers图层按需分层渲染到不同Canvas画布
前端·vue.js·gis
丷丩3 天前
MapLibre GL JS第35课:显示带地形高程(三维地形)的卫星影像
javascript·gis·map·mapbox·maplibre gl js
用户83134859306983 天前
Vue3 + Cesium 实现城市 3D 场景下雪特效(按钮开关控制下雪启停)
cesium
丷丩4 天前
MapLibre GL JS第25课:添加栅格瓦片源
开发语言·javascript·gis·mapbox·maplibre gl js
丷丩5 天前
MapLibre GL JS第29课:添加Canvas源
javascript·gis·map·mapbox·maplibre gl js