当前位置: 首页 > news >正文

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~

相关文章:

  • Gradle介绍
  • 扩展SpringMVC以支持绑定JSON格式的请求参数
  • 0x05 Python数据分析,Anaconda八斩刀
  • dos保存adb logcat读取的Android信息
  • Rotate Image LeetCode
  • MFC消息映射与命令传递
  • CentOS6.6下解压安装mysql-5.7.10-linux-glibc2.5-i686.tar.gz
  • myeclipse安装插件phpeclipse后进行PHP代码编写
  • 怎样选择前端框架
  • 【遇到的问题】父div不能被撑开
  • iOS开发-UIView扩展CGRect
  • 如何使用 SPICE client (virt-viewer) 来连接远程虚拟机桌面?
  • openssh 加固
  • Spring MVC 拦截器 interceptors
  • Javascript继承机制的实现
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Bytom交易说明(账户管理模式)
  • IDEA常用插件整理
  • Java小白进阶笔记(3)-初级面向对象
  • Python 基础起步 (十) 什么叫函数?
  • Rancher如何对接Ceph-RBD块存储
  • Web设计流程优化:网页效果图设计新思路
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 整理一些计算机基础知识!
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #QT(串口助手-界面)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $jQuery 重写Alert样式方法
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (理论篇)httpmoudle和httphandler一览
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (强烈推荐)移动端音视频从零到上手(下)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .apk文件,IIS不支持下载解决
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET的微型Web框架 Nancy
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝