首先,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. POJ - 2912 Rochambeau 种类并查集

    题意:有三组小朋友在玩石头剪刀布,同一组的小朋友出的手势是一样的.这些小朋友中有一个是裁判,他可以随便出手势.现在给定一些小朋友的关系,问能否判断出裁判,如果能最早什么时候能够找到裁判. 思路:枚举每 ...

  2. 一个逼格很低的appium自动化测试框架

    Github地址: https://github.com/wuranxu 使用说明 1. 安装配置Mongo数据库 下载地址 mongo是用来存放元素定位的,截图如下: 通过case_id区分每个ca ...

  3. Flask Ansible自动化平台搭建(持续更新)

    一:简介 使用Ansible + Flask + Celery搭建web平台. 目录结构 . ├── ansible_api │   ├── ansible_playbook_inventory.py ...

  4. Json序列化、反序列化

    引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; 把Json字符串反序列化为对象 1.目标对象 = JavaScriptConve ...

  5. 导出CSV格式文件,用Excel打开乱码的解决办法

    导出CSV格式文件,用Excel打开乱码的解决办法 1.治标不治本的办法 将导出CSV数据文件用记事本打开,然后另存为"ANSI"编码格式,再用Excel打开,乱码解决. 但是,这 ...

  6. R分词

    #用于下载安装rJava 和 Rwordseg,如果安装了就注释掉 install.packages("rJava") install.packages("Rwordse ...

  7. const char *p;和char * const p的区别

    const char *p;       const修饰*p,所以*p是一个常量,不可修改. char* const p; const修饰p,所以指针p是一个常量,不可修改. #include< ...

  8. My97 DatePicker普通调用

    My97 DatePicker普通调用 1.设计源码 <%@ page language="java" import="java.util.*" page ...

  9. Linux显示用户注册名

    Linux显示用户注册名 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ finger -s Login Name Tty Idle Login Time Of ...

  10. Linux显示已经挂载的分区列表

    Linux显示已经挂载的分区列表 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda8 1 ...