Ceium 关于贴地

前言
要理解一个概念,贴地是针对 terrain 或者 3D Tiles
entity
实现方式:classificationType: Cesium.ClassificationType.BOTH

clampToGround: true
在这里插入图片描述

官网示例 Classification Types

var polygon = viewer.entities.add({
  polygon: {
    hierarchy: new Cesium.PolygonHierarchy(
      Cesium.Cartesian3.fromRadiansArray([
        -1.3194369277314022,
        0.6988062530900625,
        -1.3193955980204217,
        0.6988091578771254,
        -1.3193931220959367,
        0.698743632490865,
        -1.3194358224045408,
        0.6987471965556998,
      ])
    ),
    material: Cesium.Color.RED.withAlpha(0.5),
    classificationType: Cesium.ClassificationType.BOTH,
  },
});
var polyline = viewer.entities.add({
  polyline: {
    positions: Cesium.Cartesian3.fromDegreesArray([
      -75.60217330403601,
      40.04102882709425,
      -75.59968252414251,
      40.04093615560871,
      -75.598020153828,
      40.04079437042357,
    ]),
    width: 8,
    material: new Cesium.PolylineOutlineMaterialProperty({
      color: Cesium.Color.YELLOW,
      outlineWidth: 2,
      outlineColor: Cesium.Color.BLACK,
    }),
    clampToGround: true,
  },
});

primitive
本身没有贴地属性

两个扩展对象有贴地属性

GroundPrimitive:CircleGeometry, CorridorGeometry, EllipseGeometry, PolygonGeometry, and RectangleGeometry

GroundPolylinePrimitive: GroundPolylineGeometry

classificationType: Cesium.ClassificationType.BOTH

功能见:测量距离和面积的方法

注意:贴线和其他集合体为不同对象

const geomety = new Cesium.GroundPolylineGeometry({
      positions: this.positions,
      height: this.height,
      width: this.width < 1 ? 1 : this.width,
      vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
      ellipsoid: this.ellipsoid,
    });

this._primitive = new Cesium.GroundPolylinePrimitive({
    geometryInstances: new Cesium.GeometryInstance({
        geometry: geometry,
        id: this.id,
        pickPrimitive: this,
    }),
    appearance: this.appearance,
    asynchronous: this.asynchronous,
    classificationType: Cesium.ClassificationType.BOTH
});

在这里插入图片描述
通过获取高程来实现贴地

接口说明sampleTerrain

// 官方示例
// Query the terrain height of two Cartographic positions
var terrainProvider = Cesium.createWorldTerrain();
var positions = [
    Cesium.Cartographic.fromDegrees(86.925145, 27.988257),
    Cesium.Cartographic.fromDegrees(87.0, 28.0)
];
var promise = Cesium.sampleTerrain(terrainProvider, 11, positions);
Cesium.when(promise, function(updatedPositions) {
    // positions[0].height and positions[1].height have been updated.
    // updatedPositions is just a reference to positions.
});

// 应用示例
Cesium.sampleTerrain(
  AppCesium.cesiumViewer.terrainProvider,
  CesiumConfig.terrain.pointHeightLevel,
  Cesium.Cartographic.fromDegrees([108.03864032, 25.2482])
).then(function (updatedCartographics) {
  console.log(updatedCartographics);
  for (var i = 0; i < updatedCartographics.length; i++) {
    var cartographic = updatedCartographics[i];
    (entityArr[i].position = Cesium.Cartesian3.fromRadians(
      cartographic.longitude,
      cartographic.latitude,
      cartographic.height
    )),
      viewer.entities.add(entityArr[i]);
  }
  viewer.zoomTo(viewer.entities);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值