Cesium中的各个坐标拾取

1.屏幕坐标:鼠标点击位置距离canvas左上角的像素值

var handler= new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
    // movement.position 为屏幕坐标
     console.log(movement.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

 结果样式:(563, 257) (502, 270)

2.地图/椭球体表面的坐标, pickEllipsoid(windowPosition, ellipsoid, result) → Cartesian3

var canvas = viewer.scene.canvas;
var center = new Cesium.Cartesian2(canvas.clientWidth / 2.0, canvas.clientHeight / 2.0);
var ellipsoid = viewer.scene.globe.ellipsoid;
var result = viewer.camera.pickEllipsoid(center, ellipsoid);

  结果样式:(681947.5488226605, -5179905.785616342, 3646170.1225966625)

3.地形坐标:只能求交于地形,不包括模型、倾斜摄影表面,能获取加载地形后的坐标,pick(ray, scene, result) → Cartesian3|undefined

var handler= new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
    // movement.position 为屏幕坐标
    // 从相机位置到windowPosition 世界坐标中的像素创建射线。
// 返回Cartesian3射线的位置和方向。
var ray = viewer.camera.getPickRay(movement.position);
// 查找射线与渲染的地球表面之间的交点。射线必须以世界坐标给出。
var intersection = viewer.scene.globe.pick(ray, viewer.scene);
 console.log(intersection);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

结果样式:(-227002.79031916102, -4633338.676891252, 4347365.535626734) 

4.场景坐标:根据窗口坐标,从场景的深度缓冲区中拾取相应的位置,返回笛卡尔坐标,不仅可以求交地形,还可以求交除地形以外其他所有写深度的物体。pickPosition(windowPosition, result) → Cartesian3

var viewer = new Cesium.Viewer('cesiumContainer');
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
    var pickedObject = viewer.scene.pick(movement.position);
    // 使用时,最好利用pickPositionSupported判断一下浏览器是否支持模型高度拾取 
    if (scene.pickPositionSupported && Cesium.defined(pickedObject)) {
        var cartesian = viewer.scene.pickPosition(movement.position);
     	console.log(cartesian);
    } 
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

 结果样式:(-897241.7860763469, -596443.5414603687, 1626683.6914076842)

5 .globe.pickscene.pickPosition比较

globe.pick的结果相对稳定准确,不论地形深度检测开启与否,不论加载的是默认地形还是别的地形数据;

scene.pickPosition只有在开启地形深度检测viewer.scene.globe.depthTestAgainstTerrain = true,且不使用默认地形时是准确的。

注意:

globe.pick只能求交地形;

scene.pickPosition不仅可以求交地形,还可以求交除地形以外其他所有写深度的物体。

所以使用时可以二者结合来使用。

Scenepick讲解

pickscene.pick可以通过此方法获取到pick对象,通过pick.id即可拾取当前的entity对象,也可以获取Cesium3DTileFeature对象;

drillPickscene.drillPick(click.position)是从当前鼠标点击位置获取entity的集合,然后通过for循环可以获取当前坐标下的所有entity;
 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值