• 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~

  • 相关阅读:
    javascript常用对象
    oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)
    xml直接读取节点
    脑瓜子的文章导航 脑瓜子的学院系列文章汇总
    ASP.NET MVC 中实现View与Controller分离
    开发
    SQLite学习手册(转)
    缓存数据库redis、memcached。 MongoDB 资源集锦
    在GOOGLE浏览器中模拟移动浏览器 调试Web app
    Intelligencia.UrlRewriter在IIS 7.0下的完全配置攻略
  • 原文地址:https://www.cnblogs.com/yanan-boke/p/7644763.html
Copyright © 2020-2023  润新知