cesium通过经纬度获取3dtiles 得feature信息

找到这里3dtiles的两种访问方式:

1.1 3DTileContent#getFeature   

这里涉及3DTile 数据结构,暂不了解3DTile 数据结构,因此暂不使用。

1.2 scene.pick   

本次使用

scene表示虚拟场景中所有 3D 图形对象和状态的容器;scene中pick方法:

scene.pick(windowPosition, width, height)
windowPosition	Cartesian2		Window coordinates to perform picking on.
width	number	3	optionalWidth of the pick rectangle.
height	number	3	optionalHeight of the pick rectangle.
  • 缺点只支持Cartesian2  即窗口坐标,窗口坐标无法作为唯一经纬度坐标。但能凑活用。
Cesium中,要通过经纬度获取3D Tiles在当前经纬度的高度,可以借助`Cesium.Cesium3DTileset.pickFromRay`方法。以下是实现该功能的示例代码: ```javascript // 初始化Cesium Viewer const viewer = new Cesium.Viewer('cesiumContainer'); // 加载3D Tileset const tileset = viewer.scene.primitives.add( new Cesium.Cesium3DTileset({ url: '/tileset/Photogrammetry/tileset.json' }) ); // 定义经纬度 const longitude = Cesium.Math.toRadians(-75.59777); const latitude = Cesium.Math.toRadians(40.03883); // 创建从经纬度位置向上的射线 const cartographic = new Cesium.Cartographic(longitude, latitude, 0); const cartesian = Cesium.Cartographic.toCartesian(cartographic); const ray = new Cesium.Ray(cartesian, Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(Cesium.Cartesian3.ZERO, cartesian, new Cesium.Cartesian3()), new Cesium.Cartesian3())); // 使用射线进行拾取 tileset.readyPromise.then(function () { const result = tileset.pickFromRay(ray); if (result) { const pickedPosition = result.position; const pickedCartographic = Cesium.Cartographic.fromCartesian(pickedPosition); const height = pickedCartographic.height; console.log('高度:', height); } else { console.log('未拾取到3D Tiles'); } }); ``` 上述代码首先初始化了一个Cesium Viewer,然后加载3D Tileset。接着定义了经纬度,将其转换为笛卡尔坐标并创建了一条从该位置向上的射线。最后使用`tileset.pickFromRay`方法进行拾取操作,如果成功拾取到3D Tiles,就可以获取到该位置的高度信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值