【Cesium基础学习】拾取坐标

发布于:2024-05-19 ⋅ 阅读:(193) ⋅ 点赞:(0)

cesium 4种拾取坐标的方法_cesium 点击获取坐标-CSDN博客

拾取坐标的四种方式

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中,可以通过鼠标拾取来获取场景中的地理坐标和高度信息。通常,拾取地理坐标的方式可以分为两种:屏幕空间拾取和地理空间拾取。

  1. pickPosition方法

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

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

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