drillPick(windowPosition, limit, width, height) → Array.<*>

scene中(一般用来获取entity对象):

pick:scene.pick可以通过此方法获取到pick对象,通过pick.id即可拾取当前的entity对象,也可以获取Cesium3DTileFeature对象;

drillPick:scene.drillPick(click.position)是从当前鼠标点击位置获取entity的集合,然后通过for循环可以获取当前坐标下的所有entity;

pickPosition:通过viewer.scene.pickPosition(movement.position)获取,可以获取场中任意点击处的对应的世界坐标。(高程不精确)

pick与drillPick的区别:pick只可获取一个entity对象(如该位置存在多个entity,哪怕面点线不在同一高度,面entity都可能会盖住点线entity),但drillPick可获取当前坐标下的多个对象;

camera和globel中的pick:

这两个里面的pick一般搭配使用,通过camera中的getPickRay获取ray(射线),然后通过globel中的pick方法,获取世界坐标,如下面的地形坐标的获取;

======================================================

1、通过pick进行地形上的坐标的获取

这个是常用的方法,当你想获取当前鼠标位置的三维坐标时,经常使用到这个方法:

第一步:通过camera的getPickRay,将当前的屏幕坐标转为ray(射线);

viewer.camera.getPickRay(windowCoordinates);

第二步:找出ray和地形的交点,即可求出三维世界坐标

globe.pick(ray, scene);

2、通过pick获取entity

handler.setInputAction(function (movement) {
        var pick = viewer.scene.pick(movement.endPosition);  //获取的pick对象
        var pickedEntity = Cesium.defined(pick) ? pick.id : undefined; //pick.id即为entity
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

Picking 拾取

选择(单击选择一个对象)是我们需要与基本API进行短暂交互的领域之一。使用scene.pickscene.drillpick检索实体。

/*** Returns the top-most entity at the provided window coordinates* or undefined if no entity is at that location.** @param {Cartesian2} windowPosition The window coordinates.* @returns {Entity} The picked entity or undefined.*/
function pickEntity(viewer, windowPosition) {var picked = viewer.scene.pick(windowPosition);if (defined(picked)) {var id = Cesium.defaultValue(picked.id, picked.primitive.id);if (id instanceof Cesium.Entity) {return id;}}return undefined;
};/*** Returns the list of entities at the provided window coordinates.* The entities are sorted front to back by their visual order.** @param {Cartesian2} windowPosition The window coordinates.* @returns {Entity[]} The picked entities or undefined.*/
function drillPickEntities(viewer, windowPosition) {var i;var entity;var picked;var pickedPrimitives = viewer.scene.drillPick(windowPosition);var length = pickedPrimitives.length;var result = [];var hash = {};for (i = 0; i < length; i++) {picked = pickedPrimitives[i];entity = Cesium.defaultValue(picked.id, picked.primitive.id);if (entity instanceof Cesium.Entity &&!Cesium.defined(hash[entity.id])) {result.push(entity);hash[entity.id] = true;}}return result;
};

Cesium中使entity响应drillPick点击事件

var handler = new Cesium.ScreenSpaceEventHandler(canvas);

handler.setInputAction(function(click){

var pickedObjects = scene.drillPick(click.position);
for(var objNumber=0;objNumber

var pickedId=pickedObject.id.id;}}

}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

注意scene.drillPick(click.position)是从当前鼠标点击位置获取entity的集合pickedObjects,通过一个for循环,用pickedId匹配所要响应的entity的id。如果把LEFT_CLICK换成MOUSE_MOVE或者其他,则需要考虑click的position是什么。比如,MOUSE_MOVE的click就有startPosition和endPosition,请具体问题具体分析。

如果把scene.drillPick(click.position)中drillPick改成pick,那么当鼠标点击或滑过时该位置存在多个entity,哪怕面点线不在同一高度,面entity都可能会盖住点线entity,从而使得被遮盖的点或线无法响应点击和滑过事件。

cesium 鼠标点击pick与drillPick的区别相关推荐

  1. 获取窗口句柄模拟鼠标点击

    一.任务要求. 需要我们编写一个程序能够自动的进行某些鼠标点击的操作.比如某个客户端,我们利用程序,可以自动点击操作. 二.需求分析. 为了实现这种要求,我们必须首先获得需要操作窗口的句柄.其次是点击 ...

  2. java 鼠标单击_不通过鼠标点击,单纯的通过Java代码生成鼠标单击事件

    不通过鼠标点击,单纯的通过Java代码生成鼠标单击事件 关注:54  答案:3  信息版本:手机版 电脑版 解决时间 2021-01-13 04:21 提问者少走感情路 2021-01-12 08:3 ...

  3. 入门C语言第三话:数组之实战篇——扫雷(进阶版——图形化界面,递归展开,播放音乐与音效,标记取消雷,记录雷的个数,鼠标点击,文末附有完整代码)

    文章目录 前言 每日鸡汤 基本思路 衔接基础班扫雷 准备阶段 正文 一.雷盘信息的存储 1.设置雷盘11*11与初始化 2.放置雷 3.放置雷周围的信息 二.图形化界面 1.创建与初始化窗口 2.加载 ...

  4. HQChart使用教程67 - 鼠标点击K线柱子监听事件

    HQChart使用教程67 - 鼠标点击K线柱子监听事件 点击K线事件 步骤 1. 注册监听事件 事件回调函数说明 参数说明: K线数据说明 交流QQ群: 950092318 HQChart代码地址 ...

  5. special effects - 鼠标点击,出现烟花炸裂效果

    鼠标点击,出现烟花炸裂效果 一. 效果图 二. 实现代码 一. 效果图 二. 实现代码 <!DOCTYPE html> <html><head><meta c ...

  6. python鼠标点击位置_python鼠标点击位置 Python3怎么模拟鼠标点击?

    Python3怎么模拟鼠标点击? Python3怎么模拟鼠标点击?最好简单一点的方法 import win32api,win32condef click(x,y): win32api.SetCurso ...

  7. CTreeCtrl::SelectItem 光标 模拟鼠标点击

    CTreeCtrl::SelectItem 光标 模拟鼠标点击 (2010-12-02 17:37:14) 转载▼ 标签: selectitem 光标 模拟鼠标 分类: C /VC/WM/MFC 我想 ...

  8. C#控制鼠标点击,移动,滑轮滚动

    前不久无意中发现了一款手机上的软件,看新闻就可以得金币,通过金币可以换取RMB,怀着好奇,我下载了并且点击进去查看了,通过使用,发现这款软件获取金币的方法很简单,就是点击一篇新闻,进去后,隔一段时间滑 ...

  9. 计算机鼠标怎么设置在哪里,技巧:如何在计算机上调整鼠标移动速度?如何设置鼠标点击?...

    鼠标是我们与计算机交互的重要手段. 鼠标的速度和图标的显示都为我们提供了最直接的系统体验,因此我们必须根据自己的习惯设置鼠标. 那么如何在计算机上调整鼠标的速度呢?如何设置鼠标点击?以下编辑器将向您介 ...

最新文章

  1. 实现分布式服务注册及简易的netty聊天
  2. DeepMind大放送:开放4个多物体表征学习数据集,还有一篇智能体新研究
  3. 【MPI程序】向量乘法,向量点积(高性能计算)
  4. com口驱动_Ubuntu 安装Nvidia显卡驱动指南
  5. [vue] 请描述下vue的生命周期是什么?
  6. MyBatis入门基础(一)
  7. 精致的App登录页设计欣赏给你灵感
  8. 免费又好用的Redis客户端工具!AnotherRedisDesktopManager
  9. 鸡汤:【转载】超级高效术,让你的人生效率快人10倍
  10. python实现txt合并
  11. 学习笔记(15):程序员的数学:微积分-常用导数(二):最常用到的技巧
  12. Mac OS系统下安装Win10系统到移动硬盘
  13. SSRF利用协议中的万金油——Gopher
  14. Can总线基本关注事项(仲裁、电气、阻抗计算、负载率)
  15. python flask 微信_使用Flask创建微信公众号
  16. java我的世界溺尸为啥这么少,我的世界:溺尸刷新几率存在问题?溺尸刷怪塔为何得不到三叉戟?...
  17. 固态硬盘寿命不长?!快来看看12个固态硬盘优化技巧
  18. building workspace
  19. 苹果cms模板_苹果cms怎么更换模板?
  20. Docker搭建Pikachu靶场

热门文章

  1. 联合体(union)的使用方法及其本质
  2. 关于联合体union的详细解释
  3. 猫眼电影爬取(woff 字体文件解析)
  4. edge 黑色 护眼 深色模式
  5. 华里士公式(点火公式)与区间再现公式
  6. 离线百度地图嵌入开发
  7. Uncaught TypeError: Cannot read property ‘dispatch‘ of undefined
  8. STC89C52的中断
  9. 西安信息资源网(计算机电子书)
  10. HTML行内元素、块级元素和行内块元素