拾取坐标的四种方式
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博客
编辑