拾取坐标的四种方式

1、viewer.scene.pick()

只能获取一个对象,并且是最顶部的对象。如果拾取点没有对象,则会返回undefined

2、viewer.scene.globe.pick()

最好开启深度检测:scene.globe.depthTestAgainstTerrain = true;

3、viewer.scene.camera.pickEllipsoid()

在有地形的情况下误差较大,在使用时需要关闭深度测试

4、viewer.scene.pickPosition()

一定开启深度检测viewer.scene.globe.depthTestAgainstTerrain = true),否则在没有没有3dTile模型的情况下,会出现空间坐标不准的问题。

拾取方式分类

在Cesium中,可以通过鼠标拾取来获取场景中的地理坐标和高度信息。通常,拾取地理坐标的方式可以分为两种:屏幕空间拾取和地理空间拾取。

pickPosition方法:

  • 方法:pickPosition方法用于从指定的屏幕位置获取地理坐标和高度信息。
  • 适用范围:适用于场景中的任何地方,包括地形、3D模型和Primitive等。
  • 注意事项:如果拾取到的物体是Primitive,则需要在创建Primitive时设置pickPrimitive属性为true。

pickEllipsoid方法:

  • 方法:pickEllipsoid方法用于从指定的屏幕位置获取地理坐标和高度信息,不考虑任何地形或模型。
  • 适用范围:适用于场景中的任何地方,但不考虑地形或模型的高度。
  • 注意事项:适用于简单的地理信息获取,不考虑场景中的复杂地形或3D模型。

pickTerrain方法:

  • 方法:pickTerrain方法用于从指定的屏幕位置获取地理坐标和高度信息,考虑地形的高度。
  • 适用范围:主要用于拾取地形表面的高度信息,适用于地形表面的任何位置。
  • 注意事项:对于大规模地形数据,拾取可能会比较耗时,需要考虑性能问题。

sampleTerrainMostDetailed方法:

  • 方法:sampleTerrainMostDetailed方法用于从指定的经纬度位置获取地形的最详细高度信息。
  • 适用范围:主要用于获取特定位置的最详细地形高度信息。
  • 注意事项:对于大规模地形数据,获取详细高度信息可能会比较耗时,需要考虑性能问题

关于注意事项,需要根据具体的业务场景和需求进行判断和处理。在实际应用中,通常需要根据拾取到的物体进行相应的业务逻辑处理,例如显示信息窗口、执行特定操作等。



scene.globe.depthTestAgainstTerrain = true; // 创建一个事件处理器来处理屏幕空间事件 var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas); // 监听鼠标点击事件 handler.setInputAction(function (click) { // 使用pick函数获取点击位置的实际位置 var cartesian = viewer.scene.pickPosition(click.position); if (Cesium.defined(cartesian)) { // 将笛卡尔坐标转换为经纬度坐标 var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6); var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6); var heightString = cartographic.height.toFixed(2); console.log('经度:' + longitudeString + ',纬度:' + latitudeString + ',高度:' + heightString) } // 使用Scene.pick来获取3D Tiles的实际高度 var pickedObject = viewer.scene.pick(click.position); if (Cesium.defined(pickedObject)) { // 获取到3D Tiles的高度 const cartographic = Cesium.Cartographic.fromCartesian(cartesian); const height = cartographic.height; const lon=Cesium.Math.toDegrees(cartographic.longitude).toFixed(6); const lat =Cesium.Math.toDegrees(cartographic.latitude).toFixed(6); console.log('点击位置的经度是: ' + lon); console.log('点击位置的纬度是: ' + lat); console.log('点击位置的高度是: ' + height); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK);




应用【Cesium】坐标拾取---坐标测量_cesinum坐标查询功能-CSDN博客

【Cesium基础学习】拾取坐标_Math

编辑