Cesium鼠标交互

一、获取对象的方法

  • scene.pick返回的是包含给定窗口位置基元的对象
  • scene.drillpick返回的是给定窗口所有对象的列表
  • Globe.pick返回的是给定光线和地形的交点

二、鼠标监听的方法

  • Cesium.ScreenSpaceEventType.MIDDLE_CLICL 鼠标中键点击事件
  • Cesium.ScreenSpaceEventType.MOUSE_MOVE 鼠标移入事件
  • Cesium.ScreenSpaceEventType.RIGHT_CLICK 鼠标右击事件
  • Cesium.ScreenSpaceEventType.LEFT_CLICK 鼠标左击事件

下面来展示一个鼠标左击事件的实例:

// 加载新地图,设置一个变量用于存储新地图的信息
var esri = new Cesium.ArcGisMapServerImageryProvider({
	url:'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
})
 Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxMjQxNmU0YS1hNTBjLTRhMTItYTM4Yy02MTI5MDUyYjVhZGEiLCJpZCI6MTAyNTk5LCJpYXQiOjE2NTg4MzAwODB9.NknDn2xRdJLRdInv0fH7g_G4svRx07FcXduNvv_RW2w';
 const viewer = new Cesium.Viewer('yc-cesiumContainer',{
   // 首先要把默认的地图按钮设置为隐藏,否则会影响新地图的加载
   baseLayerPicker: false,
   // 设置地图
   imageryProvider:esri,
   // 放入引入的地形,CesiumTerrainProvider方法是将地形数据,转换为Cesium可以访问的格式
   terrainProvider: new Cesium.CesiumTerrainProvider({
     // url用于放入地形服务器的地址
     url:Cesium.IonResource.fromAssetId(1),
     // 可以增加法线,用于提高光照效果
     requestVertexNormals:true,
     // 可以增加水面特效
     requestWaterMask:true
   })
 });

 // 设置好视口位置,否则观测不到加载的物体
 viewer.camera.setView({
   // 设置经纬度位置和相机高度
   destination: Cesium.Cartesian3.fromDegrees(116.39, 39.91, 2500.0),
   // 设置相机方向
   orientation: {
     heading: Cesium.Math.toRadians(0),
     pitch: Cesium.Math.toRadians(-90.0),
     roll:0.0
   }
 })

 // 先添加一个图片
 const entity = viewer.entities.add({
   id:'planeLogo',
   position: new Cesium.Cartesian3.fromDegrees(116.39, 39.91, 0),
   plane: {
     // 确认面得朝向,这里设置沿着Z轴平铺,参考笛卡尔坐标
     plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Z,0.0),
     // dimensions属性设置面的长度和宽度
     dimensions: new Cesium.Cartesian2(500,300),
     // 背景图片
     material:"../../lib/image/ui.jpg",
     // 是否显示边框
     outline:true,
     outlineColor: Cesium.Color.BLACK
   },
   //用于设置选定对象的显示信息,可以直接用HTML标签,包裹后可直接传到页面中
   description:`<div>
     <img width="100%" height="250px" src="../../lib/image/ui.jpg" />
     <h3>欢迎来到</h3>
     <h3>长沙</h3>
     </div>`
 })

 // 先定义一个变量,用于存储实例,ScreenSpaceEventHandler方法创建了一个屏幕控制实例
 // 获取scene下的所有canvas创建的元素
 var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
 // 再使用setInputAction方法进行监听:它可以用于监听各种点击、移入事件
 // 第一个参数放入回调函数,第二个参数录入的是我们监听的具体是鼠标哪个事件
 handler.setInputAction(function(mobement){
   // 通过viewer.scene.pick可以获取到点击的对象
   var pick = viewer.scene.pick(movement.position)
   // 先确定他的位置信息是否为空并要同时满足当前获取对象的id号是否和之前绑定的一致
   if(Cesium.defined(pick) && (pick.id.id === 'planeLogo')){
     alert('欢迎来到长沙')
   }
   // 监听鼠标左键点击事件
 },Cesium.ScreenSpaceEventType.LEFT_CLICK)

效果图:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未名'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值