Cesium点集中获取点的id,使用viewer.value.entities.getById报错的解决方法

错误代码:

viewer.value.entities.getById(pickedObject.id)

报错:

可以正常获取movement.position但是一直出现如下报错,无法获得航点的id,通过断点定位为

viewer.value.entities.getById(pickedObject.id)导致的报错

解决方案:

首先在官网明确api的调用与返回值

通过控制台打印发现无论是pick的返回值和pick返回值.id都是对象[object Object]

但参考博主cesium关于entity的点击、鼠标移动事件_cesium 点击entity获取id-优快云博客的文章后发现使用pick返回值.id.id即可解决问题

viewer.value.entities.getById(pickedObject.id.id)

为什么是id.id希望大佬们不吝赐教,控制台打印看不出来,文档也看不出来

watch(selectTowerId, (newVal, oldVal) => { if (oldVal && viewer.entities.getById('billboard' + oldVal + 'gltf')) { viewer.entities.getById('billboard' + oldVal + 'gltf').billboard.image = p1; } if (oldVal && viewer.entities.getById('billboard' + oldVal + 'tile')) { viewer.entities.getById('billboard' + oldVal + 'tile').billboard.image = p1; } if (newVal && viewer.entities.getById('billboard' + newVal + 'gltf') && nowModelType.value == 'gltf') { viewer.entities.getById('billboard' + newVal + 'gltf').billboard.image = p2 let data = getPositionById(newVal + 'gltf') let flyToPosition = Cesium.Cartesian3.fromDegrees( data[0], data[1] - 0.002, 130 ); viewer.camera.flyTo({ destination: flyToPosition, orientation: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-10), roll: Cesium.Math.toRadians(0), }, duration: 2, // 飞行持续时间 complete: function callback() { // 定位完成之后的回调函数 }, }); } else if (newVal && viewer.entities.getById('billboard' + newVal + 'tile')) { viewer.entities.getById('billboard' + newVal + 'tile').billboard.image = p2 let data = getPositionById('billboard' + newVal + 'tile') let flyToPosition = Cesium.Cartesian3.fromDegrees( data[0], data[1] - 0.002, 130 ); viewer.camera.flyTo({ destination: flyToPosition, orientation: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-10), roll: Cesium.Math.toRadians(0), }, duration: 2, // 飞行持续时间 complete: function callback() { // 定位完成之后的回调函数 }, }); } if (newVal && nowModelType.value == 'pointCloud' && viewer.entities.getById('billboard' + newVal)) { viewer.entities.getById('billboard' + newVal).billboard.image = img2 allTiles.forEach((item) => { if (item.id == newVal + 'tile') { // 获取tileset的边界球体中心坐标 let { longitude, latitude, radius } = getTilesPosition(item.tileset); viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees( longitude, latitude - 0.002, radius + 50 + Number(item.elevation) ), orientation: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-15), roll: Cesium.Math.toRadians(0), }, duration: 2, // 飞行持续时间 complete: function callback() { // 定位完成之后的回调函数 }, }); } }); } if (newVal && (!viewer.entities.getById('billboard' + newVal + 'gltf') && !viewer.entities.getById('billboard' + newVal + 'tile'))) { ElMessage({ message: "缺失模型数据!", grouping: true, type: "warning", offset: 200, }) } }); 优化代码
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值