Cesium之各种贴地

248 阅读1分钟

Entity模型贴地

const entity = viewer.entities.add({
	name: '这是一个模型',
	position: Cesium.Cartesian3.fromDegrees({ -123.0744619, 44.0503706, 100 }),
	model: {
	  uri: url,
	  minimumPixelSize: 128,
          maximumScale: 2000,
          heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
	}
})

Entity点贴地

核心代码

heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
const e = viewer.entities.add({
      position: Cesium.Cartesian3.fromDegrees(-122.1958, 46.1915),
      point: {
        color: Cesium.Color.SKYBLUE,
        pixelSize: 10,
        outlineColor: Cesium.Color.YELLOW,
        outlineWidth: 3,
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
      },
      label: {
        text: "紧贴地面",
        font: "14pt sans-serif",
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
        horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
        verticalOrigin: Cesium.VerticalOrigin.BASELINE,
        fillColor: Cesium.Color.BLACK,
        showBackground: true,
        backgroundColor: new Cesium.Color(1, 1, 1, 0.7),
        backgroundPadding: new Cesium.Cartesian2(8, 4),
        disableDepthTestDistance: Number.POSITIVE_INFINITY
      },
    });

Entity线贴地

const point = viewer.entities.add({
  name: "polyline",
  polyline: {
    positions: Cesium.Cartesian3.fromDegreesArray(arr),
    width: 1,
    material: new Cesium.Color(222/255, 216/255, 192/255, 1),
    clampToGround: true,
  },
});

Entity面贴地

核心代码

classificationType: Cesium.ClassificationType.TERRAIN
const e = viewer.entities.add({
      polygon: {
        hierarchy: {
          positions: [
            new Cesium.Cartesian3(
              -2358138.847340281,
              -3744072.459541374,
              4581158.5714175375
            ),
            new Cesium.Cartesian3(
              -2357231.4925370603,
              -3745103.7886602185,
              4580702.9757762635
            ),
            new Cesium.Cartesian3(
              -2355912.902205431,
              -3744249.029778454,
              4582402.154378103
            ),
            new Cesium.Cartesian3(
              -2357208.0209552636,
              -3743553.4420488174,
              4581961.863286629
            ),
          ],
        },
        material: "Cesium_Logo_Color.jpg",
        classificationType: Cesium.ClassificationType.TERRAIN,
        stRotation: Cesium.Math.toRadians(45),
      },
  });

Primitive线贴地

// 创建贴地线段几何实例
const instance = new Cesium.GeometryInstance({
    id: "PolylineGeometry",
    geometry: new Cesium.GroundPolylineGeometry({
        positions: Cesium.Cartesian3.fromDegreesArray([
            108.0, 31.0,
            100.0, 36.0,
            105.0, 39.0
        ]),
        width: 10.0,
    })
});
 
// 根据几何实例创建贴地图元
const primitive = new Cesium.GroundPolylinePrimitive({
    geometryInstances: instance,
    appearance: new Cesium.PolylineMaterialAppearance({
        material: Cesium.Material.fromType('Color'),
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)

Primitive面贴地

// 创建贴地面几何实例
const instance = new Cesium.GeometryInstance({
    id: "PolygonGeometry",
    geometry: new Cesium.PolygonGeometry({
        polygonHierarchy: new Cesium.PolygonHierarchy(
            Cesium.Cartesian3.fromDegreesArray([
                -72.0, 40.0,
                -70.0, 35.0,
                -75.0, 30.0,
                -70.0, 30.0,
                -68.0, 40.0
            ])
        )
    }),
});
 
// 根据几何实例创建贴地面图元
const primitive = new Cesium.GroundPrimitive({
    geometryInstances: instance,  //可以是实例数组
    appearance: new Cesium.MaterialAppearance({
        material: Cesium.Material.fromType('Color', {
            color: Cesium.Color.BLUE
        }),
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)