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的一样