使用前端VUE框架通过Cesium加载3dtiles,计算3dtiles的面积

计算3dtiles面积需要使用Cesium内置的 Tileset 类型提供的方法。以下是一个通过Vue和Cesium加载3dtiles并计算其面积的示例代码:

<template>
  <div id="cesiumContainer"></div>
</template>

<script>
  import Cesium from 'cesium/Cesium'
  import 'cesium/Widgets/widgets.css'

  export default {
    name: 'TilesetArea',
    data() {
      return {
        viewer: null,
        tileset: null,
        tilesetArea: 0
      }
    },
    mounted() {
      this.init()
    },
    methods: {

      // 初始化
      init() {
        this.viewer = new Cesium.Viewer('cesiumContainer', {
          animation: false,
          baseLayerPicker: false,
          geocoder: false,
          timeline: false
        })

        this.viewer.imageryLayers.remove(this.viewer.imageryLayers.get(0))

        this.addTileset()
        this.viewer.zoomTo(this.tileset)
        
        this.computeTilesetArea() // 计算3dtiles面积

      },

      // 添加tileset
      addTileset() {
        this.tileset = new Cesium.Cesium3DTileset({
          url: 'https://XXX.XXX.XXX.XXX/Tilesets/tileset.json'
        })
        this.viewer.scene.primitives.add(this.tileset)
      },

      // 计算tileset面积
      computeTilesetArea() {
        let boundingSphere = this.tileset.boundingSphere
        let cartographic = Cesium.Rectangle.fromCartesian3(boundingSphere.center)

        let surfacePromise = Cesium.sampleTerrainMostDetailed(this.viewer.terrainProvider, [cartographic])
        Cesium.when(surfacePromise, function (updatedPositions) {
          let positions = Cesium.Cartesian3.fromRadiansArray(updatedPositions)
          let ph = new Cesium.PolygonHierarchy(positions)

          let area = Cesium.PolygonGeometryLibrary.computeArea2D([ph])
          this.tilesetArea = area / 1000000.0 // 平方米转平方千米
          
          console.log('tileset面积:' + this.tilesetArea + '平方千米')
        }.bind(this))
      }
    }
  }
</script>

<style>
  #cesiumContainer {
    width: 100%;
    height: 100vh;
    margin-top: -70px;
    position: absolute;
    top: 60px;
    left: 0px;
  }
</style>

在代码中,我们使用了Cesium内置的Tileset对象加载了一个3dtiles模型,并使用 computeArea2D() 方法计算其面积。需要注意的是由于计算的单位为平方米,所以最终将结果换算成了平方千米。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值