一、简介
在Cesium中坐标的拾取非常重要,比如在标绘、测量等功能中需要获取地球表面、地形、三维模型、实体元素等物体表面的经纬度和高程,这样绘制的图形才能准确,拿到的坐标才可以使用。
与拾取相关的API比较多,不同的API适用的场景不同。比较常用的有scene.pickPosition、scene.pickPositionSupported、scene.pickTranslucentDepth、scene.pick、scene.drillPick、scene.camera.pickEllipsoid、scene.camera.getPickRay、scene.globe.pick等。另外还有一些私有类或者方法有时候也会用到,包括scene.picking、scene.pickFromRay、scene.drillPickFromRay等。
下面根据我自己在产品封装和项目中实际经验先大致说一下。【不涉及原理细节,拾取原理请等待第2篇文章】
1) scene.pick [拾取到实体对象]
该API签名为pick(windowPosition, width, height) → Object
返回一个具有“primitive”属性的对象,该对象包含特定窗口坐标处场景中的第一个(顶部)基元,如果该位置没有任何内容,则返回未定义的对象。可以根据基元的类型潜在地设置其他属性,并且可以用于进一步识别拾取的对象。
拾取3dtiles后,拾取将返回Cesium3DTileFeature对象。
2)scene.drillPick [拾取到实体对象]
该API签名为drillPick(windowPosition, limit, width, height) → Array.<*>
穿透拾取到多个对象。
3)scene.globe.pick[拾取到坐标]
该API签名为pick(ray, scene, result) → Cartesian3|undefined
返回射线和地球Globe交点的坐标,Globe包括地形图层、影像图层等,因此拾取到与地形交点的坐标。
4)scene.pickPosition[拾取到坐标]
该API签名为pickPosition(windowPosition, result) → Cartesian3
返回从深度缓冲区和窗口位置重建的笛卡尔位置。
5)scene.camera.pickEllipsoid[拾取到坐标]
该API签名为pickEllipsoid(windowPosition, ellipsoid, result) → Cartesian3|undefined
拾取椭球体表面的坐标。