Cesium给3dtileset中的每个瓦片添加一个billboard/label(六)

2023-01-14

改了下思路,直接根据点击的位置转换为世界坐标系再添加label

          console.log(`鼠标点击位置为:${click.position}`);
          
          var cartesian = that.viewer.scene.globe.pick(that.viewer.camera.getPickRay(click.position),that.viewer.scene);

          console.log(`世界坐标:${cartesian}`);
          // 世界坐标转换为弧度
          var ellipsoid = that.viewer.scene.globe.ellipsoid;
          var cartographic = ellipsoid.cartesianToCartographic(cartesian);
          console.log(`弧度:${cartographic}`);
          // 弧度转换为经纬度
          var lon = Cesium.Math.toDegrees(cartographic.longitude);  // 经度
          var lat = Cesium.Math.toDegrees(cartographic.latitude);   // 纬度  
          console.log(`经度:${lon},纬度:${lat}`);
          console.log(height);
                         
          // 创建label
          that.createOnlyLabel(lat,lon,height,info);

 

 

    createOnlyLabel(latitude,longitude,height,text){

      if(Cesium.defined(this.infoBoard)){
        console.log("Cesium.defined(this.infoBoard)");
        
        this.infoBoard.position = new Cesium.Cartesian3.fromDegrees(longitude, latitude,height);
        this.infoBoard.label.text = text;
        return;
      }
      //添加弹出信息
      var infoBoard = this.viewer.entities.add({
        // id:5,
        position:new Cesium.Cartesian3.fromDegrees(longitude, latitude,height),
        //设置朝向和翻滚角度
        // orientation:orientation,
        label: { 
          //文字标签
          text: text,
          font: '500 30px Helvetica',// 15pt monospace
          scale: 0.8,
          style: Cesium.LabelStyle.FILL,
          fillColor: Cesium.Color.WHITE,
          // pixelOffset: new Cesium.Cartesian2(-8, -35),   //偏移量
          showBackground: true,
          backgroundColor: new Cesium.Color(0.5, 0.6, 1, 1.0)
        },
      })
      this.infoBoard = infoBoard;
    },

 

 

 

2023-01-10

没成功,记录一下怎么失败的,以后会了来更新

 

1.Cesium3DTileset :瓦片集

2.Cesium3DTile(瓦片集中的单个瓦片) :通过Cesium3DTileset.tileVisible来获取单个瓦片

3.Cesium3DTileContent(单个瓦片中的所有的要素集合组成内容) 通过Cesium3DTile.content来获取。内部通过 batch table来存储每个Feature的索引

4.Cesium3DTileFeature(单个瓦片内容(要素集合)中单个要素) 通过 Cesium3DTileContent.getFeature() 获取 这里面就存储的每一个要素的id 等属性信息。

 

按理来说Cesium3DTile里就是每一个瓦片自己的信息,但是

        console.log(`鼠标点击位置为:${click.position}`);
        console.log(`当前模型的bounding:${pickedFeature.content._tile.boundingSphere.center}`);

 

 每个tile的boundingsphere都是一样的...

也看过_selectedTiles,里面的boundingsohere也是和tileset的一样

 

posted @ 2023-01-10 15:43  一摩尔时光  阅读(1093)  评论(2编辑  收藏  举报