首先,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 鼠标拾取椭球、地形、模型坐标点(经度+纬度+高程)的更多相关文章

  1. DirectX11 With Windows SDK--21 鼠标拾取

    前言 拾取是一项非常重要的技术,不论是电脑上用鼠标操作,还是手机的触屏操作,只要涉及到UI控件的选取则必然要用到该项技术.除此之外,一些类似魔兽争霸3.星际争霸2这样的3D即时战略游戏也需要通过拾取技 ...

  2. cesium 学习(五) 加载场景模型

    cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...

  3. Cesium中级教程5 - Terrain 地形

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ CesiumJS支持对与水流相关的海洋.湖泊和河流以及全球高分辨 ...

  4. CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身

    CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...

  5. 【转】Unity3D 入门小技巧——鼠标拾取并移动物体

    http://blog.csdn.net/sysujackjiao/article/details/69396274 一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物 ...

  6. OpenRail中地形模型特征的含义

    点或点高程 点(附有 X.Y.Z 数据)与任何其他点之间没有功能关系.对开阔地形的随机测量拍摄可以被当做随机点的例子.点图元,如单元.圆圈和文字串是典型的 MICROSTATION 图元,用于用图表定 ...

  7. blender导入灰度图生成地形模型

    安装软件 在此处下载blender并安装. 添加平面 1.打开blender,右键删除初始的立方体. 2.shift+a选择平面添加进场景: 3.按下s键鼠标拖动调节平面大小确定后按下鼠标左键: 4. ...

  8. 鼠标/手指相对于元素的坐标(px转百分比)

    鼠标/手指相对于元素的坐标:鼠标或手指当前的位置 - 元素距离文档的位置 px转百分比:px / 文档尺寸 * 100 获取手指触摸在屏幕中相对于元素的坐标(px转百分比): $('#div').on ...

  9. Qt OpenGL 鼠标拾取实现

    在之前的文章中讲到了OpenGL鼠标拾取操作的例子,工作中需要在Qt中实现,下面的程序演示了QT中opengl的拾取例子. 本例子在Qt5.12和Qt Creator4.8.0上测试,使用的是QOpe ...

随机推荐

  1. hdu 1207 四柱汉诺塔

    递推,汉诺塔I的变形. 这题真心没想到正确解法,越想越迷糊.这题看了别人题解过得,以后还是自己多想想,脚步太快并非好事. 贴上分析:   分析:设F[n]为所求的最小步数,显然,当n=1时,F[n]= ...

  2. uva10603 倒水问题

    状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...

  3. CSRF的本质及防御

    本质:产生的原因本质上是参数可知或可预测 防御: 1.加密参数:加密加盐,不可知,不可预测      忧虑,引入其他麻烦:一.数据分析困难                               ...

  4. ubuntu 14.04 分辨率调整 -- xrandr命令

    问题描述: 自己在安装ubuntu-kylin 14.04 TLS系统成功后,在调整分辨率的时候(系统设置--显示)发现分辨率的选项只有1024x768以及800x600两个选项,而台式机的外接显示屏 ...

  5. Android JNI的Android.mk文件语法详解

    Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解 ...

  6. zTree实现地市县三级级联DAO接口测试

    zTree实现地市县三级级联DAO接口测试 ProvinceDaoTest.java: /** * @Title:ProvinceDaoTest.java * @Package:com.gwtjs.d ...

  7. C# 时间格式化大全

    DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25        Label2.Text = dt ...

  8. Eclipse远程debug服务器

    一,找端口号 二,Eclipse配置 三,测试是否成功 四,结束远程debug

  9. Python Cookbook(第3版)中文版:15.18 传递已打开的文件给C扩展

    15.18 传递已打开的文件给C扩展¶ 问题¶ 你在Python中有一个打开的文件对象,但是需要将它传给要使用这个文件的C扩展. 解决方案¶ 要将一个文件转换为一个整型的文件描述符,使用 PyFile ...

  10. 【BZOJ1040】骑士(动态规划)

    [BZOJ1040]骑士(动态规划) 题面 BZOJ 题解 对于每一组厌恶的关系 显然是连边操作 如果是一棵树的话 很显然的树型\(dp\) 但是,现在相当于有很多个基环 也就是在一棵树的基础上再加了 ...