首页 > 其他分享 >cesium 相机视口

cesium 相机视口

时间:2023-10-25 15:00:43浏览次数:34  
标签:viewer camera roll heading 相机 视口 pitch cesium viewJson

        function saveView2() {
            var viewJson = {
                // 世界坐标(不直观)
                ...viewer.camera.position,
                // 弧度值(不直观)
                "heading": viewer.camera.heading,
                "pitch": viewer.camera.pitch,
                "roll": viewer.camera.roll
            }
            console.log("viewJson", JSON.stringify(viewJson));

            // 经纬度 高度 角度 (常用且直观)
            let degrees = cartesianToDegrees(viewer.camera.position)
            var viewJson2 = {
                ...degrees,
                // 相机姿态 heading pitch roll
                "heading": Cesium.Math.toDegrees(viewer.camera.heading), // 朝向  朝东90度  朝北0度
                "pitch": Cesium.Math.toDegrees(viewer.camera.pitch), // 俯仰 向下是-90度  水平0度  向上90度
                "roll": Cesium.Math.toDegrees(viewer.camera.roll), // 旋转(为0即可,不影响视角)
            }
            console.log("viewJson2", JSON.stringify(viewJson2));
        }

        function backView2(viewJson) {
            console.log("开始返回视角", viewJson)
            // 经纬度转世界坐标
            let point = Cesium.Cartesian3.fromDegrees(viewJson.longitude, viewJson.latitude, viewJson.height)
            viewer.camera.flyTo({ // 定位到范围中心点
                destination: point,
                orientation: {
                    heading: Cesium.Math.toRadians(viewJson.heading),
                    pitch: Cesium.Math.toRadians(viewJson.pitch),
                    roll: 0
                },
            })
        }

        // {"longitude":117.21936682793581,"latitude":31.813278953515983,"height":1930.0811561075159,"heading":1.0177774980683254e-13,"pitch":-89.99997906948178,"roll":0}

        backView2({"longitude":117.219366,"latitude":31.813278,"height":1930,"heading":0,"pitch":-90,"roll":0})

        // 世界坐标转经纬度
        function cartesianToDegrees() {
            let radians = Cesium.Cartographic.fromCartesian(viewer.camera.position)
            return {
                longitude: Cesium.Math.toDegrees(radians.longitude),
                latitude: Cesium.Math.toDegrees(radians.latitude),
                height: radians.height
            }
        }

        // 与 cartesianToDegrees 结果一样
        function transformCartesianToWGS84(cartesian) {
            var ellipsoid = Cesium.Ellipsoid.WGS84;
            var cartographic = ellipsoid.cartesianToCartographic(cartesian);
            return {
                lng: Cesium.Math.toDegrees(cartographic.longitude),
                lat: Cesium.Math.toDegrees(cartographic.latitude),
                alt: cartographic.height,
            };
        }

 一般情况下直接使用不直观的值就可以了,因为使用者并不需要看到视角数据,只要能保存能返回保存的视角即可

        function saveView() {
            var viewJson = {
                "x": viewer.camera.position.x,
                "y": viewer.camera.position.y,
                "z": viewer.camera.position.z,
                "pitch": viewer.camera.pitch,
                "heading": viewer.camera.heading,
                "roll": viewer.camera.roll
            }
            console.log("viewJson", JSON.stringify(viewJson));
            if (!window.localStorage) {
                window.alert("该浏览器不支持LocalStorage")
            } else {
                window.localStorage.setItem("viewJson", JSON.stringify(viewJson));
                console.log("保存成功");
            }
        }

        function backView(viewJson) {
            if (!viewJson) {
                viewJson = window.localStorage.getItem("viewJson")
            }
            if (!viewJson) {
                viewJson = {x: -2458112.7618688047, y: 4760718.645741547, z: 3448779.8410891695, pitch: -0.05670309137107821, heading: 2.125839285083903, roll: 0}
            }
            console.log("开始返回视角", viewJson)
            viewer.camera.flyTo({ // 定位到范围中心点
                destination: {
                    x: viewJson.x,
                    y: viewJson.y,
                    z: viewJson.z
                },
                orientation: {
                    heading: viewJson.heading,
                    pitch: viewJson.pitch,
                    roll: viewJson.roll
                },
            })
        }

 

标签:viewer,camera,roll,heading,相机,视口,pitch,cesium,viewJson
From: https://www.cnblogs.com/LcxSummer/p/17787222.html

相关文章

  • Cesium 加载面数据 点数据 label
    Cesium加载geojosn数据exportconstcesiumUtils={viewer:null,dataSourceArr:[],addDataSource(geojsonData,config){Cesium.GeoJsonDataSource.load(geojsonData,{stroke:Cesium.Color.HOTPINK,fill:Cesium.Color.PINK......
  • cesium 3dtile单击选中
    监听瓦片加载完成事件,将所有3dtile对象按id归纳到map中tileset.readyPromise.then(()=>{console.log('tileset.readyPromise');tileset.setObjsColor()})//allTilesLoaded会被调用多次旋转、放大缩小模型时会触发这个事件,不适合用来做一......
  • cesium对比entity和primitive添加polyline
    primitive方式要复杂一些,但是效率要高一些 primitive方式functioncreatePrimitive(coordinate){letpolyline=newCesium.GroundPolylineGeometry({positions:Cesium.Cartesian3.fromDegreesArray(coordinate.flat()),......
  • macOS 支持 Raw 格式的相机名称 All In One
    macOS支持Raw格式的相机名称AllInOneRawSupport```sh$system_profiler$system_profiler>system_profiler.md#具体CPU型号信息隐藏了/加密了......
  • cesium 自定义属性方法
    Cesium.Cesium3DTileset.prototype.setObjsColor=function(ids){letcurrentStyle=this.style&&this.style.style||{};this.style=newCesium.Cesium3DTileStyle({...currentStyle,color:{evaluateColor:function(......
  • cesium 3dtils 房屋打组 实现单个房屋选中效果
    效果 scenetree.json记录的是模型的数据,这种element的节点上记录的name就是建模时给建筑物打组时起的名字,后面cesium创建模型时,建筑物上的每个feature都会添加这个name参数,根据这个name参数可以找到这个模型中的所有feature  handler.setInputAction((event)=>......
  • .NET解所有相机RAW格式照片
    再聊.NET解相机RAW格式照片上次我发了一篇文章《用.NET解索尼相机ARW格式照片》,提到通过安装SonyRawFileDecoder的方式,然后调用WindowsImagingComponents来解析RAW格式文件。后来我经过进一步研究、探索,发现还有更简单的办法。新的方法实在是太简单、好用了,相比之下,我前一......
  • 打卡拍照替换_虚拟相机实时拍照替换
     在我们日常生活中,总有一些app要求我们到场实时拍照上传的要求,但因为种种原因无法到场,或者为了提高效率总要想一些能解决这个问题的办法,比如叫同事帮忙拍照上传等。今天我们开发了一款可以满足这个需求的插件,能够替换实时拍照上传的照片,使用简单便捷,新手也可以轻松使用。手机要......
  • 相机噪声建模研究
    一.相机噪声概述图像噪音由于拍摄设备、传输误差、数据压缩或其他外部因素引入的。它可以干扰图像的视觉质量,使图像失真,并可能影响后续的图像处理和分析。在我们分析噪音时,通常要对图像的生成全流程进行追溯1.1光子的产生和传播(Sceneradiance)光源的光子通过物体进行反射......
  • 无涯教程-OC - 相机管理
    相机是移动设备中的常见功能之一。无涯教程可以用相机拍照并在无涯教程的应用程序中使用它,这也非常简单。相机管理步骤步骤1-创建一个简单的基于视图的应用程序。步骤2-在ViewController.xib中添加按钮并为该按钮创建IBAction。步骤3-添加图像视图并创建IBOutlet,将其......