zoukankan      html  css  js  c++  java
  • Supermap/Cesium 开发心得----获取三维视角的四至范围

    网上目前有两种获取当前Camera的四至范围的方法

    方法一    这种方法是最通用的,即使在哥伦布视角(2.5D下依旧能准确获取值)

     function getCurrentExtent() {
            // 范围对象
            var extent = {};
    
            // 得到当前三维场景
            var scene = viewer.scene;
    
            // 得到当前三维场景的椭球体
            var ellipsoid = scene.globe.ellipsoid;
            var canvas = scene.canvas;
    
            // canvas左上角
            var car3_lt = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(0, 0), ellipsoid);
    
            // canvas右下角
            var car3_rb = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(canvas.width, canvas.height), ellipsoid);
    
            // 当canvas左上角和右下角全部在椭球体上
            if (car3_lt && car3_rb) {
                var carto_lt = ellipsoid.cartesianToCartographic(car3_lt);
                var carto_rb = ellipsoid.cartesianToCartographic(car3_rb);
                extent.xmin = Cesium.Math.toDegrees(carto_lt.longitude);
                extent.ymax = Cesium.Math.toDegrees(carto_lt.latitude);
                extent.xmax = Cesium.Math.toDegrees(carto_rb.longitude);
                extent.ymin = Cesium.Math.toDegrees(carto_rb.latitude);
            }
    
            // 当canvas左上角不在但右下角在椭球体上
            else if (!car3_lt && car3_rb) {
                var car3_lt2 = null;
                var yIndex = 0;
                do {
                    // 这里每次10像素递加,一是10像素相差不大,二是为了提高程序运行效率
                    yIndex <= canvas.height ? yIndex += 10 : canvas.height;
                    car3_lt2 = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(0, yIndex), ellipsoid);
                } while (!car3_lt2);
                var carto_lt2 = ellipsoid.cartesianToCartographic(car3_lt2);
                var carto_rb2 = ellipsoid.cartesianToCartographic(car3_rb);
                extent.xmin = Cesium.Math.toDegrees(carto_lt2.longitude);
                extent.ymax = Cesium.Math.toDegrees(carto_lt2.latitude);
                extent.xmax = Cesium.Math.toDegrees(carto_rb2.longitude);
                extent.ymin = Cesium.Math.toDegrees(carto_rb2.latitude);
            }
    
            // 获取高度
            extent.height = Math.ceil(viewer.camera.positionCartographic.height);
            return extent;
        }

    方法二  使用Cesium自带的方法,但是我使用下来发现,在哥伦布视角下不能获取值,值是undefined

    viewer.camera.computeViewRectangle()
  • 相关阅读:
    星辰小队针对于软件“星遇”的10天冲刺——第8天
    星辰小队针对于软件“星遇”的10天冲刺——第7天
    周周总结——时时更新(第4学期,第11周)
    星辰小队针对于软件“星遇”的10天冲刺——第6天
    星辰小队针对于软件“星遇”的10天冲刺——第5天
    对于文章的字母、单词、短语,(无用词表)的检索Java代码实现
    星辰小队针对于软件“星遇”的10天冲刺——第4天
    图片保存到相册
    心情不好
    NSString和data转换
  • 原文地址:https://www.cnblogs.com/yangzhengier/p/11847550.html
Copyright © 2011-2022 走看看