cesium在地形上贴地添加各种entity

29 篇文章 65 订阅

目录

添加带标签的点

 添加billboard

添加corridor

 添加面polygon

 添加带图片的面polygon

 添加矩形

添加glb模型

 被遮挡的线用其他颜色标注

添加贴地线


官方示例:Cesium Sandcastlehttps://sandcastle.cesium.com/?src=Clamp%20to%20Terrain.html&label=Tutorials

添加带标签的点

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    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, // draws the label in front of terrain
      },
    });

    viewer.trackedEntity = e;
  },
};
</script>

 添加billboard

资源下载地址:https://sandcastle.cesium.com/images/facility.gif 

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    const e = viewer.entities.add({
      position: Cesium.Cartesian3.fromDegrees(-122.1958, 46.1915),
      billboard: {
        image: "facility.gif",
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
      },
    });

    viewer.trackedEntity = e;
  },
};
</script>

添加corridor

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    const e = viewer.entities.add({
      corridor: {
        positions: Cesium.Cartesian3.fromDegreesArray([
          -122.19, 46.1914, -122.21, 46.21, -122.23, 46.21,
        ]),
        width: 2000.0,
        material: Cesium.Color.GREEN.withAlpha(0.5),
      },
    });

    viewer.zoomTo(e);
  },
};
</script>

 添加面polygon

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    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.Color.BLUE.withAlpha(0.5),
      },
    });

    viewer.zoomTo(e);
  },
};
</script>

 添加带图片的面polygon

 

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    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),
      },
    });

    viewer.zoomTo(e);
  },
};
</script>

 添加矩形

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    const e = viewer.entities.add({
      rectangle: {
        coordinates: Cesium.Rectangle.fromDegrees(-122.3, 46.0, -122.0, 46.3),
        material: Cesium.Color.RED.withAlpha(0.5),
      },
    });

    viewer.zoomTo(e);
  },
};
</script>

添加glb模型

 

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    const e = viewer.entities.add({
      position: Cesium.Cartesian3.fromDegrees(-122.1958, 46.1915),
      model: {
        uri: "Cesium_Air.glb",
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
        minimumPixelSize: 128,
        maximumScale: 100,
      },
    });

    viewer.trackedEntity = e;
  },
};
</script>

 被遮挡的线用其他颜色标注

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;

    const length = 1000;

    const startLon = Cesium.Math.toRadians(86.953793);
    const endLon = Cesium.Math.toRadians(86.896497);

    const lat = Cesium.Math.toRadians(27.988257);

    const terrainSamplePositions = [];
    for (let i = 0; i < length; ++i) {
      const lon = Cesium.Math.lerp(endLon, startLon, i / (length - 1));
      const position = new Cesium.Cartographic(lon, lat);
      terrainSamplePositions.push(position);
    }

    Promise.resolve(
      Cesium.sampleTerrainMostDetailed(
        viewer.terrainProvider,
        terrainSamplePositions
      )
    ).then(function (samples) {
      let offset = 10.0;
      for (let i = 0; i < samples.length; ++i) {
        samples[i].height += offset;
      }

      viewer.entities.add({
        polyline: {
          positions:
            Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(samples),
          arcType: Cesium.ArcType.NONE,
          width: 5,
          material: new Cesium.PolylineOutlineMaterialProperty({
            color: Cesium.Color.ORANGE,
            outlineWidth: 2,
            outlineColor: Cesium.Color.BLACK,
          }),
          depthFailMaterial: new Cesium.PolylineOutlineMaterialProperty({
            color: Cesium.Color.RED,
            outlineWidth: 2,
            outlineColor: Cesium.Color.BLACK,
          }),
        },
      });

      const target = new Cesium.Cartesian3(
        300770.50872389384,
        5634912.131394585,
        2978152.2865545116
      );
      offset = new Cesium.Cartesian3(
        6344.974098678562,
        -793.3419798081741,
        2499.9508860763162
      );
      viewer.camera.lookAt(target, offset);
      viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
    });
  },
};
</script>

添加贴地线

<template>
  <div style="height: 100vh">
    <div id="cesiumContainer" />
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {};
  },
  mounted() {
    const viewer = new Cesium.Viewer("cesiumContainer", {
      terrainProvider: Cesium.createWorldTerrain(),
    });
    viewer.scene.globe.depthTestAgainstTerrain = true;
    viewer.entities.add({
      polyline: {
        positions: Cesium.Cartesian3.fromDegreesArray([
          86.953793, 27.928257, 86.953793, 27.988257, 86.896497, 27.988257,
        ]),
        clampToGround: true,
        width: 5,
        material: new Cesium.PolylineOutlineMaterialProperty({
          color: Cesium.Color.ORANGE,
          outlineWidth: 2,
          outlineColor: Cesium.Color.BLACK,
        }),
      },
    });

    const target = new Cesium.Cartesian3(
      300770.50872389384,
      5634912.131394585,
      2978152.2865545116
    );
    const offset = new Cesium.Cartesian3(
      6344.974098678562,
      -793.3419798081741,
      2499.9508860763162
    );
    viewer.camera.lookAt(target, offset);
    viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
  },
};
</script>

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值