zoukankan      html  css  js  c++  java
  • Cesium 获取当前视图范围

    Cesium作为一个开源的WebGlobe解决方案已经很牛了,不过因为开发的资料不多,很多功能不知道怎么实现。下面记录下自己获取Cesium当前场景范围的方法(2维中对应的是extent)。

    extent其实对我们有用的也就是左上角和右下角坐标,于是首先应该想办法实现的是获取场景左上角和右下角的经纬度坐标。

    技术分享

    接下来说下point1和point2获取方法。

    我没有发现Cesium有直接获取范围的方法,不过根据经验,场景范围在三维中应该从Camera来获取,Cesium倒是有个获取Camera范围的方法,就是获取up和right的坐标,但是获取出来的结果不是经纬度,使用cameraToWorldCoordinatesPoint也无法转换成需要用的数据,于是放弃。

    技术分享

    后来看到了getPickRay这个方法,官方解释是Create a ray from the camera position through the pixel at windowPosition in world coordinates.大体意思是能够通过屏幕坐标转换成经纬度坐标。屏幕坐标的话,我们可以通过div位置来获取,这样屏幕的左上角坐标和右下角坐标是可以很容易获取到的。

    以下是获取point1和point2的详细代码:

    var pt1 = new Cesium.Cartesian2(0,0);
    var pt2= new Cesium.Cartesian2(500,500);
    
    var pick1= viewer.scene.globe.pick(viewer.camera.getPickRay(pt1), viewer.scene);
    var pick2= viewer.scene.globe.pick(viewer.camera.getPickRay(pt2), viewer.scene);
    
    //将三维坐标转成地理坐标
    var geoPt1= viewer.scene.globe.ellipsoid.cartesianToCartographic(pick1);
    var geoPt2= viewer.scene.globe.ellipsoid.cartesianToCartographic(pick2);
    
    //地理坐标转换为经纬度坐标
    var point1=[geoPt1.longitude / Math.PI * 180,geoPt1.latitude / Math.PI * 180];            
    var point2=[geoPt2.longitude / Math.PI * 180,geoPt2.latitude / Math.PI * 180];            
    

      

    以上是只是个人工作学习中记录下的一些过程,如果有更好的实现方案,请各位留言指教O(∩_∩)O~

  • 相关阅读:
    SQL CREATE INDEX 语句:如何创建索引?
    SQL DEFAULT 约束:使用方法及撤销方法解析
    SQL CHECK 约束:使用方法及撤销方法剖析
    SQL FOREIGN KEY 约束:外键的用法大全
    oracle表的管理和单行函数、多行函数、行列转换、分析函数以及集合运算
    oracle插入数据中文乱码问题
    oracle体系结构
    PL/SQL连接Oracle数据库
    SVN规范
    IDEA下 SVN 配置与使用
  • 原文地址:https://www.cnblogs.com/yanan-boke/p/7644763.html
Copyright © 2011-2022 走看看