Cesium 鼠标拾取椭球、地形、模型坐标点(经度+纬度+高程)
学习过程中遇到的坑,搜索了半天没找到好的解决办法,最后翻API找到了方法,共享出来大家讨论借鉴。
首先,Cesium 中的坐标可分为两种情况:二维和三维,三维又有地形和模型之分;
1、二维坐标,获取椭球体表面的经纬度坐标:
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {var cartesian=viewer.camera.pickEllipsoid(evt.position,viewer.scene.globe.ellipsoid);var cartographic=Cesium.Cartographic.fromCartesian(cartesian);var lng=Cesium.Math.toDegrees(cartographic.longitude);//经度值var lat=Cesium.Math.toDegrees(cartographic.latitude);//纬度值var mapPosition={x:lng,y:lat,z:cartographic.height};//cartographic.height的值始终为零。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
2、三维坐标,获取地形表面的经纬度高程坐标:
方法一
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {var ray=viewer.camera.getPickRay(evt.position);var cartesian=viewer.scene.globe.pick(ray,viewer.scene);var cartographic=Cesium.Cartographic.fromCartesian(cartesian);var lng=Cesium.Math.toDegrees(cartographic.longitude);//经度值var lat=Cesium.Math.toDegrees(cartographic.latitude);//纬度值var mapPosition={x:lng,y:lat,z:cartographic.height};//cartographic.height的值为地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
方法二
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {var ray=viewer.camera.getPickRay(evt.position);var cartesian=viewer.scene.globe.pick(ray,viewer.scene);var cartographic=Cesium.Cartographic.fromCartesian(cartesian);var lng=Cesium.Math.toDegrees(cartographic.longitude);//经度值var lat=Cesium.Math.toDegrees(cartographic.latitude);//纬度值//height结果与cartographic.height相差无几,注意:cartographic.height可以为0,也就是说,可以根据经纬度计算出高程。var height=viewer.scene.globe.getHeight(cartographic);var mapPosition={x:lng,y:lat,z:height.height};//height的值为地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
3、三维坐标,获取模型表面的经纬度高程坐标(此方法借鉴于官方示例):
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {var scene = viewer.scene;if (scene.mode !== Cesium.SceneMode.MORPHING) {var pickedObject = scene.pick(evt.position);if (scene.pickPositionSupported && Cesium.defined(pickedObject) && pickedObject.node) {var cartesian = viewer.scene.pickPosition(evt.position);if (Cesium.defined(cartesian)) {var cartographic = Cesium.Cartographic.fromCartesian(cartesian);var lng = Cesium.Math.toDegrees(cartographic.longitude);var lat = Cesium.Math.toDegrees(cartographic.latitude);var height = cartographic.height;//模型高度mapPosition={x:lng,y:lat,z:height}}}}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
Cesium 鼠标拾取椭球、地形、模型坐标点(经度+纬度+高程)相关推荐
- 地图坐标: 经度 纬度 解读
坐标拾取器 - 腾讯地图// 坐标表示中 一般前面的是纬度,后面的是经度,但有些不是这样: // 纬度最大是90度,大于90度的一定是经度.// 经度 private String longitude ...
- cesium 鼠标点击事件获取各种坐标
文章目录 cesium点击事件 屏幕坐标 世界坐标(也叫笛卡尔坐标Cartesian3) 场景坐标 问题列表: cesium点击事件 new Cesium.ScreenSpaceEventHandle ...
- PCL之鼠标拾取点云的三维坐标
代码展示: #include <string> #include <pcl/io/pcd_io.h> #include <pcl/point_cloud.h> # ...
- 通过proj4js实现不同椭球之间的坐标点的七参数转换
一.本次转换是实现北京54地理坐标到国家2000地理坐标的转换: 1.引用proj4.js文件: <script type="text/javascript" src=&qu ...
- 椭球曲面拟合算法实现,matlab/C++
椭球曲面的标准表达式:(x-x0)^2/A^2+(Y-Y0)^2/B^2+(Z-Z0)^2/C^2=R^2, 一般形式可以写为:x^2+ay^2+bz^2+cxy+dxz+eyz+f=0, 模型参数估 ...
- 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合
目录 硬知识 Python代码 使用方法 串口收集数据 椭球拟合 验证 STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Develope ...
- 不同参考系统(椭球)的坐标转换
一.不同椭球基准的坐标转换方法之一 ①原坐标需先转换成所在椭球基准的空间直角坐标(X1, Y1, Z1) ②通过"七参转换"转换成目标所在椭球基准的空间直角坐标(X2, Y2, Z ...
- 【传感器】最小二乘法实现磁力计椭球校准
总体思路 磁力计的数据在实际中是椭球的形状,在此之前使用了球体拟合进行校准,也就是简化为正球体的模型,得出的结果比较差,航向计算不准,还是需要用椭球的模型来估计偏移量,先使用标准的椭球方程,进行化简与 ...
- 高斯旋转热源与双椭球热源_【干货】论焊接,3D打印模拟的热源模型——焊缝、3D打印高度变换模拟...
原标题:[干货]论焊接,3D打印模拟的热源模型--焊缝.3D打印高度变换模拟 焊接.3D打印是难度相对较高的数值模拟过程,在模拟温度场及应力场过程中,至关重要的是如何进行热源函数的建立和加载,同时配以 ...
最新文章
- 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录
- 2022-2028年中国导热硅胶行业市场研究及前瞻分析报告
- 对面向对象基本原则的总结
- 德国科学院院士:传统企业寻求变革,向智能制造靠近
- 快速提升网站收录量的技巧有哪些?
- 26.智能指针和动态内存
- 【小白学习PyTorch教程】十、基于大型电影评论数据集训练第一个LSTM模型
- mysql 连接池 100_mysql的最大连接数默认是100_MySQL
- ping不通Linux系统解决方法
- SASL讲解,以及在Spark中的应用
- ajax post提交数据_JavaEE学习——为什么get请求方式比post请求方式效率高
- 想学人工智能从哪入手?
- 计算机丨浏览器访问出现DNS_PROBE_POSSIBLE解决方法
- hibernate-annotation
- 计算机辅助翻译入门第十章课后答案,计算机辅助翻译简明教程
- 网页如何设置背景图片
- 《花花公子》的封面女郎,计算机图像界的女神
- 无root权限怎么完全卸载系统自带软件(捆绑软件)
- 阿里Java后端开发面经,面试官都替我感到绝望
- 盐城北大青鸟东台基地学员生日会 | 美好的时光里,你我同在
热门文章
- SQL 日期格式转换(转)
- JAVA毕业设计vue.js开发红酒网站计算机源码+lw文档+系统+调试部署+数据库
- 如何在SensorIMX178 中加入720p120fps
- 三维重建的研究思路与框架
- java 对象为空判断_java中判断对象是否为空的方法
- 01 Qt6.2.3播放YUV视频,使用QOpenGLWidget
- 业余学python数据挖掘怎么赚钱_如何在业余时学数据分析?
- 字母图形:利用字母可以组成一些美丽的图形,请找出这个图形的规律,并输出一个n行m列的图形。
- 专家视点:快手,社交新物种
- 手机恢复出厂设置文件怎么恢复