Cesium屏幕中心、相机坐标和距离计算

这篇具有很好参考价值的文章主要介绍了Cesium屏幕中心、相机坐标和距离计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.获取当前屏幕中心点的位置

    getCenterPosition() {
        let centerResult = viewer.camera.pickEllipsoid(
            new Cesium.Cartesian2(
                viewer.canvas.clientWidth / 2,
                viewer.canvas.clientHeight / 2,
            ),
        )
        centerPoint = centerResult;
        let curPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(centerResult);
        let curLongitude = (curPosition.longitude * 180) / Math.PI;
        let curLatitude = (curPosition.latitude * 180) / Math.PI;
        return {
            lon: curLongitude,
            lat: curLatitude,
        }
        // }
    }

2.获取当前相机的位置

 getCameraPosition() {
        var position = viewer.scene.camera.positionCartographic;
        // 弧度转经纬度
        var longitude = Cesium.Math.toDegrees(position.longitude);
        var latitude = Cesium.Math.toDegrees(position.latitude);
        var height = position.height;
        return { lng: longitude, lat: latitude, h: height }
    }

3.计算相机到屏幕中心点的距离

  // 获取相机位置坐标
  let a = this.getCenterPosition();
  // 获取屏幕中心点位置坐标
  let b = this.getCameraPosition();
  let clickPosition1 = Cesium.Cartesian3.fromDegrees(a.lon, a.lat, 0);
  let clickPosition2 = Cesium.Cartesian3.fromDegrees(b.lng, b.lat, b.h);
  // 计算两个点之间的距离
  let distancetemp = Cesium.Cartesian3.distance(clickPosition1, clickPosition2);
  console.log('屏幕到地图中心距离:', distancetemp)

4.绕非固定屏幕中心点旋转

moveRotation方法参数中第一个参数step是移动步长,第二个参数i是判断是否是俯仰角还是航向角进行绕中心点进行翻滚,entity可以另外分离出来做一个方法,这样避免每次调用moveRotation方法都生成一个entity覆盖物。

  moveRotation(step, i = 0) {
        // 添加实体
        let a = this.getCenterPosition();
        let b = this.getCameraPosition();
        entity = viewer.entities.add({
            position: new Cesium.Cartesian3.fromDegrees(a.lon, a.lat, 0),
            point: {
                pixelSize: 0,
                // show: false
            }
        });
        let clickPosition1 = Cesium.Cartesian3.fromDegrees(a.lon, a.lat, 0);
        let clickPosition2 = Cesium.Cartesian3.fromDegrees(b.lng, b.lat, b.h);
        // 计算两个点之间的距离
        let distancetemp = Cesium.Cartesian3.distance(clickPosition1, clickPosition2);
        // 距离远一些就将移动角度调整大一些
        if (i && distancetemp > 20000) {
            heading += 3 * step;
        } else if (i) {
            heading += step;
        } else if (!i && distancetemp > 20000) {
            pitch += 3 * step;
        } else if (!i) {
            pitch += step;
        }
       let offset = new Cesium.HeadingPitchRange(
            heading,
            pitch,
            distancetemp  // 相机距离地球球心的距离
        );
        viewer.zoomTo(entity, offset);
    }

5.相机位置在原地据法向量升起和下降 

该方法的参数distance接受正负数,对应上升和下降文章来源地址https://www.toymoban.com/news/detail-801303.html

   moveForward(distance) {
        var camera = viewer.camera;
        var direction = camera.direction;
        //获得此位置默认的向上方向
        var up = Cesium.Cartesian3.normalize(camera.position, new Cesium.Cartesian3());
        var right = Cesium.Cartesian3.cross(direction, up, new Cesium.Cartesian3());
        direction = Cesium.Cartesian3.cross(up, right, new Cesium.Cartesian3());
        direction = Cesium.Cartesian3.normalize(direction, direction);
        direction = Cesium.Cartesian3.multiplyByScalar(direction, distance, direction);
        camera.position = Cesium.Cartesian3.add(camera.position, direction, camera.position);
    }

到了这里,关于Cesium屏幕中心、相机坐标和距离计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【opencv3】鼠标框选矩形并显示当前像素点坐标和矩形中心点坐标C++

    (1)用鼠标在图中框选矩形目标,然后保存框选的图片; (2)鼠标拖动过程中要求显示框的线条以及鼠标当前像素点信息(坐标和RGB值); (3)拖动完成后单独显示框取的图像,拖动完成后cout输出框中心像素点坐标。 鼠标事件: 鼠标左键按下时(event == CV_EVENT_LBUTTONUP),标

    2024年02月09日
    浏览(49)
  • 已知中心点、长宽和旋转角度,求矩形的四个顶点坐标(Python)

    本次实现有几个前提: 已知的信息如下形式:[x_center, y_center, w, h, angle],其中默认 w w w 是矩形最长的边,即 w h w h w h 。 已知的旋转角度 θ theta θ 是矩形的最长边 w w w 相对于 x x x 坐标轴的旋转角度 旋转角度 θ theta θ 的旋转区间在 [ 0 , π ] [0, pi] [ 0 , π ] 可以将情况分为两

    2024年02月05日
    浏览(88)
  • 基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

    一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出文本的外框 三、中心点由坐标的左上和右下均值得出 四、

    2024年02月03日
    浏览(36)
  • Unity之UI、模型跟随鼠标移动(自适应屏幕分辨率、锚点、pivot中心点)

    UI跟随鼠标移动, 当我们修改屏幕分辨率、锚点、pivot等参数时会动态自适应并始终让ui的pivot中心点位置跟随鼠标位置。同时脚本中包含3d物体跟随ui位置和3d物体直接跟随鼠标位置移动 在说功能原理之前我们需要先了解屏幕坐标、Canvas自适应、锚点、中心的特性和之间的关系

    2024年02月04日
    浏览(64)
  • unity 获取复杂物体(模型)中心点

    2024年02月02日
    浏览(56)
  • 高德API JS 高德地图获取多个坐标点的中心点

    我需要: 在地图上展示多个地点 地图缩放到合适的大小,要求刚好能显示全部点位 边缘留有一部分间隔。 做成如图所示这样。 经过一下午的研究,弄出来了。 需要以下这些 AMap 的类库: AMap.Bounds() 区域 AMap.LngLat() 点坐标(基础点位) AMap.setBounds() 设置地图区域,这会自动

    2024年02月07日
    浏览(59)
  • C# 获取鼠标在屏幕中的位置(获取鼠标坐标)

    近段时间需要一个鼠标点击器,目前能找到的都不太符合使用要求,所以就准备自己写一个 如果需要显示文本就把int转换成string. 如果需要显示到窗体上可以把int转换成string 如果需要实时获取位置信息可以把GetMousePose()方法放到Timer定时器或者Thread子线程 具体如何选择看自己的

    2024年02月08日
    浏览(38)
  • react结合js获取屏幕鼠标滚动等距离实现页面懒加载

            也叫延迟加载,指的是在长网页中延迟加载内容或图像,是一种很好优化网页性能的方式。在滚动屏幕之前,可视化区域之外的内容不会进行加载,在屏幕滚动距离底部到一定距离时才加载。这样网页的加载速度更快,减少了服务器的负载。         懒加载适

    2024年02月10日
    浏览(43)
  • unity shader中获得模型中心点 + 中心点详解

    参考连接: Unity Shader中获取模型中心点的世界坐标_unity获取物体坐标_VirtualCreator的博客-CSDN博客 实际是当前材质球挂接的Renderer的mesh定义的坐标原点,但是有两种情况: 1 Renderer是MeshRender 原点就是当前mesh的坐标原点. 当前body的mesh , 坐标中心就是原点 2 SkinnedMeshRender  是Ro

    2024年02月13日
    浏览(50)
  • PCL圆柱中心轴线提取、中心点提取

    适用于 圆柱中心轴线计算,轴线的端点、中心点计算 附代码完整实现及测试代码。 相关链接: C++ PCL点云圆柱结构提取/立杆结构提取

    2024年02月14日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包