《Cesium 进阶知识点》- 监听鼠标移动和缩放等场景信息

这篇具有很好参考价值的文章主要介绍了《Cesium 进阶知识点》- 监听鼠标移动和缩放等场景信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果 

cesium zoomto,Cesium 进阶知识点,Cesium,MouseMove,Wheel

 关键代码

使用对象 Cesium.ScreenSpaceEventHandler 监听鼠标 Cesium.ScreenSpaceEventType.MOUSE_MOVE 和 WHEEL事件。

//鼠标位置信息
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
//鼠标移动监听,插件跟踪
handler.setInputAction((position) => {
    // TODO 

}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
// 鼠标中间滚动
handler.setInputAction((event) => {
    // TODO 
    
}, Cesium.ScreenSpaceEventType.WHEEL);

完整代码

这里涉及到获取级别信息,详见《《Cesium 进阶知识点》- 获取当前场景的级别》文章来源地址https://www.toymoban.com/news/detail-578173.html

<template>
    <div id="index">
        <div id="cesiumContainer">
            <!-- 位置信息 -->
            <div class="viewer-position" >{{levelInfo}}{{ positionInfo }}</div>
        </div>
    </div>
</template>
<script>

export default {
    data () {
        return {
            levelInfo: '',
            positionInfo: ''
        }
    },
	methods: {
        init() {
            let viewer = new Cesium.Viewer('cesiumContainer');
            //鼠标位置信息
            let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
            //鼠标移动监听,插件跟踪
            handler.setInputAction((position) => {
                //捕获椭球体,将笛卡尔二维平面坐标转为椭球体的笛卡尔三维坐标,返回球体表面的点
                let ellipsoid = viewer.scene.globe.ellipsoid;
                let worldPos = viewer.scene.pickPosition(position.endPosition);
                let cartesian = viewer.camera.pickEllipsoid(position.endPosition, ellipsoid);
                if (cartesian) {
                    // 级别
                    
                    //将笛卡尔三维坐标转为地图坐标(弧度)
                    let cartographic = ellipsoid.cartesianToCartographic(cartesian);
                    //将地图坐标(弧度)转为十进制
                    //经度
                    let log = Cesium.Math.toDegrees(cartographic.longitude).toFixed(2);
                    //纬度
                    let lat = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2);
                    //视高
                    let alt = (viewer.camera.positionCartographic.height / 1000).toFixed(2);
                    //海拔
                    let height = (viewer.scene.globe.getHeight(cartographic) / 1000).toFixed(2);
                    //方位角
                    let heading = Cesium.Math.toDegrees(viewer.camera.heading).toFixed(2);
                    if (worldPos) {
                        cartographic = ellipsoid.cartesianToCartographic(worldPos);
                        height = cartographic.height.toFixed(2);
                    }
                    this.positionInfo = `  经度:${log}°  纬度:${lat}°  海拔:${height}m  视高:${alt}km  方位角:${heading}°`
                }
                // 级别在 wheel 和 mouse move 都设置。避免在使用 flyTo或zoomTo等自动跳转功能时级别无变化。注意:也只能部分避免,当鼠标不移动时也失效
                this.levelInfo = '级数:0级  ';
                let tileRender = viewer.scene._globe._surface._tilesToRender;
                if (tileRender && tileRender.length > 0) {
                    this.levelInfo = "级数:" + viewer.scene._globe._surface._tilesToRender[0]._level + '级  ';
                }
            }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
            // 鼠标中间滚动
            handler.setInputAction((event) => {
                this.levelInfo = '级数:0级  ';
                let tileRender = viewer.scene._globe._surface._tilesToRender;
                if (tileRender && tileRender.length > 0) {
                    this.levelInfo = "级数:" + viewer.scene._globe._surface._tilesToRender[0]._level + '级  ';
                }
            }, Cesium.ScreenSpaceEventType.WHEEL);
        }
	},
    mounted() {
        this.$nextTick(() => {
			this.init()
        });
    }
}
</script>
<style>
* {
    padding: 0;
    margin: 0;
}
#index, #cesiumContainer {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}
.viewer-position {
    position: absolute;
    bottom: 0;
    right: 0;
    height: 25px;
    z-index: 1;
    padding-top: 8px;
    padding-right: 10px;
    color: white;
    text-align: right;
    font-size: 10px;
    user-select: none;
    -o-user-select: none;
    -ms-user-select: none;
    -moz-user-select: none;
    -webkit-user-select: none;
}
</style>

到了这里,关于《Cesium 进阶知识点》- 监听鼠标移动和缩放等场景信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Vue2.X 进阶知识点》- 防 ElementUI Divider 分割线

    使用 el-divider 背景为白色是没问题的。 但当背景换成其它颜色,问题就出现了!! 仔细看原来是两层,默认背景色是 白色 。 想着把背景色改为 透明 应该能用,结果发现背面是一条实线,难怪要用白色遮挡…不符合我的需求… 那就仿一个吧( Vue 组件)~ 。先看效果,上为

    2024年02月04日
    浏览(38)
  • Java体系性能测试进阶必须了解的知识点——死锁分析和锁竞争分析

    所谓 死锁 ,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。对于锁更好的理解,先要理解monitor这个概念! monitor直译过来是监视器的意思,专业一点叫管程。monitor是属于编程语言级别的,它的出现

    2024年02月07日
    浏览(45)
  • 后悔没早学这份Python神级文档!2023最新入门到进阶核心知识点学习文档!

    如今学 Python 的程序员越来越多,甚至不少人会把 Python 当作第一语言来学习。不过尽管 Python 功能强大上手轻松,但并不代表它的学习曲线不陡峭,得来全不费工夫。 当推开 Python 的大门,你会发现 Python 入门简单但精通很难。看似语法记得滚瓜烂熟,但一进入实际项目,就

    2024年02月06日
    浏览(49)
  • 基于Qt数据库项目实现(Sqlite3为例)|考查数据库、绘制(画家)、事件等知识点(进阶)

    坚持最初的梦想,扬帆起航,乘风破浪,永不言败。 01 数据库 数据库是什么?简易言之,就是保存数据的文件。可以存储大量数据,包括插入数据、更新数据、截取数据等。用专业术语来说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计

    2024年02月19日
    浏览(47)
  • 【Vue前端】vue使用笔记0基础到高手第2篇:Vue进阶知识点介绍(附代码,已分享)

    本系列文章md笔记(已分享)主要讨论vue相关知识。Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。Vue.js是一个构建

    2024年02月19日
    浏览(44)
  • Cesium 鼠标滚轮事件获取地图缩放等级

    Cesium 监听鼠标滚轮,滚轮每次滚动获取当前地图瓦片等级。 灵感来自:cesium获取当前地图瓦片缩放级别_右弦GISer的博客-CSDN博客_cesium 获取缩放级别 实际使用时体验并不好,最后使用监听高度的方法。

    2024年02月11日
    浏览(57)
  • 压枪源码,移动鼠标源码,监听鼠标源码,控制鼠标移动源码,控制鼠标移动脚本

    压枪源码,移动鼠标源码,监听鼠标源码,控制鼠标移动源码,控制鼠标移动脚本 加了很多注释了,肯定能看懂,双开火键,左键正常,侧键直接压开 先ahk官网下载安装后就能直接运行这个ahk文件了 一开始尝试python写,可以移动鼠标可以监听按键,游戏里不行,有延迟感,

    2024年02月16日
    浏览(41)
  • Unity鼠标控制3D物体的移动、旋转、缩放

    1.使用协程 2.鼠标左键控制物体移动,鼠标碰到物体,物体颜色改变 1. 控制物体左右旋转,上下旋转 2. 控制摄像机以物体为中心旋转 脚本挂载到摄像机上 1. 基于物体本身的Transform的缩放 2. 基于摄像机的远近的缩放 脚本挂载到摄像机上

    2024年02月11日
    浏览(52)
  • vue 拖动、缩放容器组件,支持移动端双指缩放和PC端鼠标滚轮缩放

    本组件基于CSS的transform实现。移动端监听touch事件(单指移动,双指移动+缩放),PC端监听mouse事件(移动)和滚动事件wheel(缩放),更新transform的translateX/translateY/scale值,从而实现缩放、移动。由于transform不会产生重排,因此不节流也可以有很好的性能,用户体验就像德芙

    2024年02月03日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包